| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- unit TeamsService;
- interface
- uses
- StrUtils, SysUtils, Windows, superobject, Classes, BaseService, RealICQModel;
- type
- TTeamsService = class(TBaseService)
- private
- FTeams: TStrings;
- FTeamsIsGettedUsers: TStrings;
- procedure HandleUsersStatus(AJo: ISuperObject);
- public
- procedure Init;
- procedure Uninstall;
- procedure HandleTeamMemberssStatus(AJo: ISuperObject);
- function IsGettedUsers(ATeamID: string): Boolean;
- function GetUserInfos(ATeamID: string; ATeamMembers: TStrings): TStringList;
- procedure RequestUserStatus(ATeamID: string);
- constructor Create;
- destructor Destroy; override;
- class function GetService: TTeamsService; static;
- end;
-
- implementation
- uses
- MainFrm, DataProviderImport, InterfaceDataProvider, LoggerImport, Messages,
- UsersService, AsynRequestUserStatus;
- var
- ATeamsService: TTeamsService;
- { TTeamsServcie }
- procedure TTeamsService.HandleUsersStatus(AJo: ISuperObject);
- var
- iLoop: Integer;
- joUser: ISuperObject;
- ja: TSuperArray;
- AServerid: string;
- // AKeyValues: TKeyValues;
- AUser: TRealICQUser;
- AUSers: TStringList;
- // ATreeView: TRealICQContacterTreeView;
- begin
- ja := AJo.A['us'];
- AServerid := AJo.S['s'];
- AUsers := TStringList.Create;
- for iLoop := 0 to ja.Length - 1 do
- begin
- joUser := ja[iLoop];
- if joUser.S['l'] = '' then
- Continue;
- joUser.S['l'] := TUsersService.FullLoginName(MainForm.RealICQClient.CenterServerID, AServerid, joUser.S['l']);
- AUser := TUsersService.GetUsersService.GetUser(joUser.S['l']);
- if AUser = nil then
- Continue;
- AUser.LoginState := TRealICQLoginState(joUser.I['os']);
- AUsers.AddObject(AUser.LoginName, AUser);
- end;
- if AUsers.Count = 0 then
- Exit;
- try
- TUsersService.GetUsersService.UpdateTeamsMembers(AUsers);
- finally
- FreeAndNil(AUsers);
- end;
- end;
- procedure TTeamsService.RequestUserStatus(ATeamID: string);
- var
- AsynAction: TAsynRequestUserStatus;
- AUsers: TStringList;
- begin
- if IsGettedUsers(ATeamID) then
- begin
- AUsers := FTeamsIsGettedUsers.Objects[FTeamsIsGettedUsers.Indexof(ATeamID)] as TStringList;
- if AUsers.Count = 0 then
- Exit;
- AsynAction := TAsynRequestUserStatus.Create(True);
- AsynAction.Protocol := TEAMMEMBERS_USERSTATE_PROLOCOL;
- AsynAction.Users := TStringList.Create;
- AsynAction.Users.AddStrings(AUsers);
- AsynAction.Resume;
- end;
- end;
- constructor TTeamsService.Create;
- begin
- FTeams := TStringList.Create;
- FTeamsIsGettedUsers := TStringList.Create;
- end;
- destructor TTeamsService.Destroy;
- begin
- FreeAndNil(FTeams);
- FreeAndNil(FTeamsIsGettedUsers);
- inherited;
- end;
- class function TTeamsService.GetService: TTeamsService;
- begin
- if ATeamsService = nil then
- ATeamsService := TTeamsService.Create;
- Result := ATeamsService;
- end;
- function TTeamsService.GetUserInfos(ATeamID: string; ATeamMembers: TStrings): TStringList;
- begin
- if IsGettedUsers(ATeamID) then
- begin
- Result := FTeamsIsGettedUsers.Objects[FTeamsIsGettedUsers.Indexof(ATeamID)] as TStringList;
- if Result.Count = ATeamMembers.Count then
- Exit;
- FTeamsIsGettedUsers.Delete(FTeamsIsGettedUsers.Indexof(ATeamID));
- FreeAndNil(Result);
- end;
-
- try
- Result := TUsersService.GetUsersService.RequestAndGetTeamMembers(ATeamMembers, MainForm.RealICQClient);
- except
- on E: Exception do
- Error('获取群成员详细信息时报错', 'TTeamsServcie.GetUserInfos');
- end;
- FTeamsIsGettedUsers.AddObject(ATeamID, Result)
- end;
- procedure TTeamsService.HandleTeamMemberssStatus(AJo: ISuperObject);
- var
- iLoop: Integer;
- joUser: ISuperObject;
- ja: TSuperArray;
- AServerid: string;
- // AKeyValues: TKeyValues;
- AUser: TRealICQUser;
- AUSers: TStringList;
- // ATreeView: TRealICQContacterTreeView;
- begin
- ja := AJo.A['us'];
- AServerid := AJo.S['s'];
- AUsers := TStringList.Create;
- for iLoop := 0 to ja.Length - 1 do
- begin
- joUser := ja[iLoop];
- if joUser.S['l'] = '' then
- Continue;
- joUser.S['l'] := TUsersService.FullLoginName(MainForm.RealICQClient.CenterServerID, AServerid, joUser.S['l']);
- AUser := TUsersService.GetUsersService.GetUser(joUser.S['l']);
- if AUser = nil then
- Continue;
- AUser.LoginState := TRealICQLoginState(joUser.I['os']);
- AUsers.AddObject(AUser.LoginName, AUser);
- end;
- if AUsers.Count = 0 then
- Exit;
- try
- TUsersService.GetUsersService.UpdateTeamsMembers(AUsers);
- finally
- FreeAndNil(AUsers);
- end;
- end;
- procedure TTeamsService.Init;
- begin
- end;
- function TTeamsService.IsGettedUsers(ATeamID: string): Boolean;
- begin
- Result := FTeamsIsGettedUsers.IndexOf(ATeamID) > -1;
- end;
- procedure TTeamsService.Uninstall;
- begin
- FTeams.Clear;
- FTeamsIsGettedUsers.Clear;
- end;
- end.
|