SuperObjectCase.pas 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. unit SuperObjectCase;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5. Dialogs, StdCtrls, superobject, Buttons;
  6. type
  7. TSuperObjectCaseFrm = class(TForm)
  8. mmo1: TMemo;
  9. btn1: TButton;
  10. btn2: TButton;
  11. btn3: TButton;
  12. btn4: TButton;
  13. btn5: TButton;
  14. btn6: TBitBtn;
  15. btn7: TBitBtn;
  16. procedure btn1Click(Sender: TObject);
  17. procedure btn2Click(Sender: TObject);
  18. procedure btn3Click(Sender: TObject);
  19. procedure btn4Click(Sender: TObject);
  20. procedure btn5Click(Sender: TObject);
  21. procedure btn6Click(Sender: TObject);
  22. procedure btn7Click(Sender: TObject);
  23. private
  24. function GetServerID(ALoginName: string): string;
  25. function GetAndClearServerID(var ALoginName: string): string;
  26. function RemoverBridgeServerID(ALoginName: string): string;
  27. { Private declarations }
  28. public
  29. { Public declarations }
  30. end;
  31. var
  32. SuperObjectCaseFrm: TSuperObjectCaseFrm;
  33. implementation
  34. {$R *.dfm}
  35. var
  36. TestJsonStr: string =
  37. '{"s":"0"' +
  38. '"bs" : {' +
  39. '"1" : [{"l":"lslqq", "v":1}, {"l":"lslqq", "v":1}],' +
  40. '"2" : [{"l":"lssfbcjf", "v":1}, {"l":"lssfbcjf", "v":1}]' +
  41. '} ' +
  42. '}';
  43. NewProtocol: string = '["g.create.r":{"id":"","ret":0,"group":{"id":"6d54247063414c99a7bb4ddc8b7a24bb","name":"ѧϰȺ"}}]';
  44. procedure TSuperObjectCaseFrm.btn1Click(Sender: TObject);
  45. var
  46. jo: TSuperObject;
  47. ja: TSuperArray;
  48. begin
  49. jo := TSuperObject.Create(stArray);
  50. ja := jo.AsArray();
  51. ja.S[0] := 'lqq';
  52. ja.S[1] := 'baidu';
  53. mmo1.Lines.Add(jo.AsJSon());
  54. end;
  55. procedure TSuperObjectCaseFrm.btn2Click(Sender: TObject);
  56. var
  57. l: string;
  58. begin
  59. l := '0578+0-lslqq';
  60. mmo1.Lines.Add(GetAndClearServerID(l));
  61. mmo1.Lines.Add(l);
  62. l := '0-lslqq';
  63. mmo1.Lines.Add(GetAndClearServerID(l));
  64. mmo1.Lines.Add(l);
  65. l := 'lslqq';
  66. mmo1.Lines.Add(GetAndClearServerID(l));
  67. mmo1.Lines.Add(l);
  68. end;
  69. procedure TSuperObjectCaseFrm.btn3Click(Sender: TObject);
  70. var
  71. jobs, jo1: ISuperObject;
  72. ja: TSuperArray;
  73. item: TSuperAvlEntry;
  74. iLoop: Integer;
  75. S: string;
  76. begin
  77. jobs := SO(TestJsonStr).O['bs'];
  78. s := SO(TestJsonStr).S['s'];
  79. for item in jobs.AsObject do
  80. begin
  81. mmo1.Lines.Add(item.Name);
  82. ja := item.Value.AsArray;
  83. mmo1.Lines.Add(item.Value.AsJSon());
  84. for iLoop := 0 to ja.Length - 1 do
  85. begin
  86. mmo1.Lines.Add(ja[iLoop].S['l'] + ':' + ja[iLoop].S['v']);
  87. end;
  88. end;
  89. end;
  90. procedure TSuperObjectCaseFrm.btn4Click(Sender: TObject);
  91. var
  92. jo: ISuperObject;
  93. begin
  94. jo := SO();
  95. jo.N['arr'] := SO('[]');
  96. jo.A['arr'].Add('12312');
  97. jo.B['True'] := True;
  98. jo.B['False'] := False;
  99. mmo1.Lines.Add(jo.AsJSon());
  100. end;
  101. procedure TSuperObjectCaseFrm.btn5Click(Sender: TObject);
  102. begin
  103. mmo1.Lines.Add(RemoverBridgeServerID('0578+0-lqq'));
  104. mmo1.Lines.Add(RemoverBridgeServerID('0-lqq'));
  105. mmo1.Lines.Add(RemoverBridgeServerID('+0-lqq'));
  106. end;
  107. procedure TSuperObjectCaseFrm.btn6Click(Sender: TObject);
  108. var
  109. jo: ISuperObject;
  110. begin
  111. jo := SO(NewProtocol);
  112. if jo <> nil then
  113. begin
  114. mmo1.Lines.Add(jo.AsJSon());
  115. end;
  116. end;
  117. function TSuperObjectCaseFrm.GetServerID(ALoginName: string): string;
  118. var
  119. iStart, iEnd, Len: Integer;
  120. begin
  121. Result := '';
  122. iEnd := AnsiPos('-', ALoginName);
  123. if iEnd < 0 then
  124. Exit;
  125. iStart := AnsiPos('+', ALoginName);
  126. if iStart < 0 then
  127. iStart := 0;
  128. if iEnd <= iStart + 1then
  129. Exit;
  130. Result := Copy(ALoginName, iStart + 1, iEnd - iStart - 1);
  131. end;
  132. function TSuperObjectCaseFrm.GetAndClearServerID(var ALoginName: string): string;
  133. var
  134. iStart, iEnd, Len: Integer;
  135. begin
  136. Result := '';
  137. iEnd := AnsiPos('-', ALoginName);
  138. if iEnd < 0 then
  139. Exit;
  140. iStart := AnsiPos('+', ALoginName);
  141. if iStart < 0 then
  142. iStart := 0;
  143. if iEnd <= iStart + 1then
  144. Exit;
  145. Result := Copy(ALoginName, iStart + 1, iEnd - iStart - 1);
  146. ALoginName := Copy(ALoginName, iEnd + 1, Length(ALoginName) - iEnd);
  147. end;
  148. function TSuperObjectCaseFrm.RemoverBridgeServerID(ALoginName: string): string;
  149. var
  150. iStart: Integer;
  151. begin
  152. iStart := AnsiPos('+', ALoginName);
  153. if iStart < 0 then
  154. iStart := 0;
  155. Result := Copy(ALoginName, iStart + 1, Length(ALoginName) - iStart);
  156. end;
  157. procedure test(const This, Params: ISuperObject; var Result: ISuperObject);
  158. begin
  159. ShowMessage('Hello');
  160. end;
  161. procedure TSuperObjectCaseFrm.btn7Click(Sender: TObject);
  162. var
  163. jo: ISuperObject;
  164. rs: ISuperObject;
  165. begin
  166. jo := SO('{}');
  167. rs := SO('{}');
  168. jo.M['test'] := test;
  169. mmo1.Lines.Add(jo.AsJSon());
  170. jo.M['test'](nil,nil, rs);
  171. end;
  172. end.