GroupConfig.pas 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. unit GroupConfig;
  2. interface
  3. uses
  4. Classes, SysUtils;
  5. type
  6. TGroupVersion = (gvUnkown, gvIntegration, gvIndependent);
  7. TGroupShareVersion = (gsvUnkown, gsvOld, gsvNew);
  8. TGroupAddress = class
  9. public
  10. Port: Integer;
  11. Enable: Boolean;
  12. IP: string;
  13. end;
  14. TGroupConfig = class
  15. private
  16. FIP,
  17. FImageIP: string;
  18. FPort,
  19. FImagePort: Integer;
  20. FGroupVersion: TGroupVersion;
  21. FGroupAddresses: TStringList;
  22. FImageAddresses: TStringList;
  23. procedure RandomGroupServer;
  24. procedure RandomImageServer;
  25. function GetImageIP: string;
  26. function GetImagePort: Integer;
  27. function GetIP: string;
  28. function GetPort: Integer;
  29. public
  30. constructor Create;
  31. destructor Destroy; override;
  32. class function Load: TGroupConfig;
  33. class function GetConfig: TGroupConfig;
  34. property IP: string read GetIP;
  35. property ImageIP: string read GetImageIP;
  36. property Port: Integer read GetPort;
  37. property ImagePort: Integer read GetImagePort;
  38. property GroupVersion: TGroupVersion read FGroupVersion;
  39. end;
  40. TGroupShareConfig = class
  41. private
  42. FIP: string;
  43. FURL: string;
  44. FPort: Integer;
  45. FGroupShareVersion: TGroupShareVersion;
  46. public
  47. class function Load: TGroupShareConfig;
  48. class function GetConfig: TGroupShareConfig;
  49. property IP: string read FIP;
  50. property URL: string read FURL;
  51. property Port: Integer read FPort;
  52. property GroupShareVersion: TGroupShareVersion read FGroupShareVersion;
  53. end;
  54. implementation
  55. uses
  56. superobject, Dialogs, TypInfo, LoggerImport;
  57. const
  58. GROUP_CONFIG: string = 'Config\group.config';
  59. GROUP_SHARE_CONFIG: string = 'Config\groupShare.config';
  60. var
  61. config: TGroupConfig;
  62. groupShareConfig: TGroupShareConfig;
  63. constructor TGroupConfig.Create;
  64. begin
  65. FGroupAddresses := TStringList.Create;
  66. FImageAddresses := TStringList.Create;
  67. end;
  68. destructor TGroupConfig.Destroy;
  69. var
  70. AGroupAddress: TGroupAddress;
  71. begin
  72. while FGroupAddresses.Count > 0 do
  73. begin
  74. AGroupAddress := FGroupAddresses.Objects[0] as TGroupAddress;
  75. FGroupAddresses.Delete(0);
  76. FreeAndNil(AGroupAddress);
  77. end;
  78. while FImageAddresses.Count > 0 do
  79. begin
  80. AGroupAddress := FImageAddresses.Objects[0] as TGroupAddress;
  81. FImageAddresses.Delete(0);
  82. FreeAndNil(AGroupAddress);
  83. end;
  84. inherited;
  85. end;
  86. class function TGroupConfig.GetConfig: TGroupConfig;
  87. begin
  88. if config <> nil then
  89. Result := config
  90. else
  91. Result := TGroupConfig.Load;
  92. end;
  93. function TGroupConfig.GetImageIP: string;
  94. begin
  95. RandomImageServer;
  96. Result := FImageIP;
  97. end;
  98. function TGroupConfig.GetImagePort: Integer;
  99. begin
  100. Result := FImagePort;
  101. end;
  102. function TGroupConfig.GetIP: string;
  103. begin
  104. RandomGroupServer;
  105. Result := FIP;
  106. end;
  107. function TGroupConfig.GetPort: Integer;
  108. begin
  109. Result := FPort;
  110. end;
  111. class function TGroupConfig.Load: TGroupConfig;
  112. var
  113. AFullFileName: string;
  114. jo, AServer: ISuperObject;
  115. AGroupServerAddresses: TSuperArray;
  116. iLoop: Integer;
  117. AServerAddress: TGroupAddress;
  118. begin
  119. if config <> nil then
  120. FreeAndNil(config);
  121. config := TGroupConfig.Create;
  122. Result := config;
  123. Result.FGroupVersion := gvUnkown;
  124. AFullFileName := ExtractFilePath(ParamStr(0)) + GROUP_CONFIG;
  125. if not FileExists(AFullFileName) then
  126. begin
  127. Result.FGroupVersion := gvUnkown;
  128. Exit;
  129. end;
  130. //(const FileName: string; partial: boolean = true; const this: ISuperObject = nil; options: TSuperFindOptions = [];
  131. // const put: ISuperObject = nil; dt: TSuperType = stNull):
  132. try
  133. jo := TSuperObject.ParseFile(AFullFileName, False);
  134. Result.FGroupVersion := TGroupVersion(GetEnumValue(TypeInfo(TGroupVersion), jo['version'].AsString()));
  135. if jo.O['groupServerAddress'] <> nil then
  136. begin
  137. AGroupServerAddresses := jo.O['groupServerAddress'].AsArray();
  138. for iLoop := 0 to AGroupServerAddresses.Length - 1 do
  139. begin
  140. AServer := AGroupServerAddresses.O[iLoop];
  141. if not AServer['enable'].AsBoolean then
  142. Continue;
  143. AServerAddress := TGroupAddress.Create;
  144. AServerAddress.IP := AServer['ip'].AsString;
  145. AServerAddress.Port := AServer['port'].AsInteger;
  146. AServerAddress.Enable := True;
  147. Result.FGroupAddresses.AddObject(IntToStr(iLoop), AServerAddress);
  148. end;
  149. end;
  150. if jo.O['imageServerAddress'] <> nil then
  151. begin
  152. AGroupServerAddresses := jo.O['imageServerAddress'].AsArray();
  153. for iLoop := 0 to AGroupServerAddresses.Length - 1 do
  154. begin
  155. AServer := AGroupServerAddresses.O[iLoop];
  156. if not AServer['enable'].AsBoolean then
  157. Continue;
  158. AServerAddress := TGroupAddress.Create;
  159. AServerAddress.IP := AServer['ip'].AsString;
  160. AServerAddress.Port := AServer['port'].AsInteger;
  161. AServerAddress.Enable := True;
  162. Result.FImageAddresses.AddObject(IntToStr(iLoop), AServerAddress);
  163. end;
  164. end;
  165. except
  166. on E: Exception do
  167. begin
  168. Result.FGroupVersion := gvUnkown;
  169. Dialogs.ShowMessage(E.Message);
  170. end;
  171. end;
  172. end;
  173. procedure TGroupConfig.RandomGroupServer;
  174. var
  175. i: Integer;
  176. AGroupAddress: TGroupAddress;
  177. begin
  178. if FGroupAddresses.Count = 0 then
  179. Exit;
  180. i := Random(FGroupAddresses.Count);
  181. AGroupAddress := FGroupAddresses.Objects[i] as TGroupAddress;
  182. FIP := AGroupAddress.IP;
  183. FPort := AGroupAddress.Port;
  184. end;
  185. procedure TGroupConfig.RandomImageServer;
  186. var
  187. i: Integer;
  188. AGroupAddress: TGroupAddress;
  189. begin
  190. if FImageAddresses.Count = 0 then
  191. Exit;
  192. i := Random(FImageAddresses.Count);
  193. AGroupAddress := FImageAddresses.Objects[i] as TGroupAddress;
  194. FImageIP := AGroupAddress.IP;
  195. FImagePort := AGroupAddress.Port;
  196. end;
  197. { TGroupShareConfig }
  198. class function TGroupShareConfig.GetConfig: TGroupShareConfig;
  199. begin
  200. if groupShareConfig <> nil then
  201. Result := groupShareConfig
  202. else
  203. Result := TGroupShareConfig.Load;
  204. end;
  205. class function TGroupShareConfig.Load: TGroupShareConfig;
  206. var
  207. AFullFileName: string;
  208. jo: ISuperObject;
  209. begin
  210. if groupShareConfig <> nil then
  211. FreeAndNil(groupShareConfig);
  212. groupShareConfig := TGroupShareConfig.Create;
  213. Result := groupShareConfig;
  214. Result.FGroupShareVersion := gsvUnkown;
  215. AFullFileName := ExtractFilePath(ParamStr(0)) + GROUP_SHARE_CONFIG;
  216. if not FileExists(AFullFileName) then
  217. begin
  218. Result.FGroupShareVersion := gsvUnkown;
  219. Exit;
  220. end;
  221. try
  222. jo := TSuperObject.ParseFile(AFullFileName, False);
  223. Result.FGroupShareVersion := TGroupShareVersion(GetEnumValue(TypeInfo(TGroupShareVersion), jo['version'].AsString()));
  224. Result.FIP := jo['ip'].AsString();
  225. // Result.FURL := jo['url'].AsString();
  226. Result.FPort := jo['port'].AsInteger();
  227. except
  228. on E: Exception do
  229. begin
  230. Result.FGroupShareVersion := gsvUnkown;
  231. Debug(E.Message, 'TGroupShareConfig.Load');
  232. end;
  233. end;
  234. end;
  235. initialization
  236. finalization
  237. if config <> nil then
  238. FreeAndNil(config);
  239. if groupShareConfig <> nil then
  240. FreeAndNil(groupShareConfig);
  241. end.