WebTabsPacket.pas 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. unit WebTabsPacket;
  2. interface
  3. uses
  4. BasePacket, RealICQModel;
  5. type
  6. TWebTabsPacket = class(TBasePacket)
  7. private
  8. FWebTabRecords: array of TWebTabRecord;
  9. public
  10. class function MajorProto: Byte; override;
  11. class function UnPack(const Data: Array of Byte): TBasePacket; override;
  12. function Pack(var buffer: TByte): Boolean; override;
  13. function Dispose: Boolean; override;
  14. end;
  15. implementation
  16. { TWebTabsPacket }
  17. function TWebTabsPacket.Dispose: Boolean;
  18. begin
  19. end;
  20. class function TWebTabsPacket.MajorProto: Byte;
  21. begin
  22. Result := $28;
  23. end;
  24. function TWebTabsPacket.Pack(var buffer: TByte): Boolean;
  25. begin
  26. end;
  27. class function TWebTabsPacket.UnPack(const Data: array of Byte): TBasePacket;
  28. var
  29. nIndex, iLoop, jLoop: Integer;
  30. WebTabCount: Byte;
  31. WebTabs: String;
  32. WebTabList: TStringList;
  33. WebTabRecord: TWebTabRecord;
  34. begin
  35. nIndex := 0;
  36. //取 (3)标签数量 1byte
  37. CopyMemory(@WebTabCount, @Data[nIndex], 1);
  38. Inc(nIndex, 1);
  39. //取 (4)消息内容 动态长度
  40. SetLength(WebTabs, Length(Data) - nIndex);
  41. CopyMemory(PChar(WebTabs), @Data[nIndex], Length(Data) - nIndex);
  42. //Inc(nIndex, Length(Data) - nIndex);
  43. WebTabList := SplitString(WebTabs, Chr(10));
  44. try
  45. SetLength(WebTabRecords, WebTabCount);
  46. jLoop := 0;
  47. for iLoop := 0 to WebTabCount - 1 do
  48. begin
  49. WebTabRecord := TWebTabRecord.Create;
  50. WebTabRecord.ID := WebTabList.Strings[jLoop];
  51. Inc(jLoop);
  52. WebTabRecord.Name := WebTabList.Strings[jLoop];
  53. Inc(jLoop);
  54. WebTabRecord.Icon := WebTabList.Strings[jLoop];
  55. Inc(jLoop);
  56. WebTabRecord.Method := WebTabList.Strings[jLoop];
  57. Inc(jLoop);
  58. WebTabRecord.PostFields := WebTabList.Strings[jLoop];
  59. Inc(jLoop);
  60. WebTabRecord.URL := WebTabList.Strings[jLoop];
  61. Inc(jLoop);
  62. WebTabRecord.MustShow := WebTabList.Strings[jLoop] = '1';
  63. Inc(jLoop);
  64. WebTabRecord.Content := WebTabList.Strings[jLoop];
  65. Inc(jLoop);
  66. SendDownloadFileRequest(WebTabRecord.Icon);
  67. WebTabRecords[iLoop] := WebTabRecord;
  68. end;
  69. finally
  70. FreeAndNil(WebTabList);
  71. end;
  72. if WebTabCount > 0 then
  73. begin
  74. CallServerDBProcedure('GetWebTabAcounts', '');
  75. Sleep(200);
  76. end;
  77. DoGetWebTabs(WebTabCount, WebTabRecords);
  78. end;
  79. end.