| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374 |
- unit GroupProcess;
- interface
- uses
- superobject, GroupUtility, GroupClient, GroupModel, Classes, SysUtils;
- type
- TBaseProcess = class
- private
- FClient: TGroupClient;
- public
- constructor Create(AClient: TGroupClient);
- procedure Excute(AData: ISuperObject); virtual;
- procedure Send(AData: string);
- property Client: TGroupClient read FClient;
- end;
- TGroupCreateResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TGroupDeleteResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TGroupUpdateResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TGroupSearchResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TGroupSearchByIDResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TMemberAddResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TMemberDelResponse = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- /// <summary>
- /// 群管理员收到加入群的申请
- /// </summary>
- TMemberApplyP = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TMemberReplyP = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- TMessageBroadcast = class(TBaseProcess)
- public
- procedure Excute(AData: ISuperObject); override;
- end;
- function ManagersConvertToStr(AManagers: TSuperArray): string;
- function MembersConvertToStr(AJoUser: ISuperObject): string;
- implementation
- uses
- LoggerImport, GroupService, DataProviderImport, DateUtils;
-
- function ManagersConvertToStr(AManagers: TSuperArray): string;
- var
- iLoop: Integer;
- begin
- iLoop := 0;
- Result := '';
- while iLoop < AManagers.Length - 1 do
- begin
- Result := Result + AManagers[iLoop].AsString + Chr(10);
- Inc(iLoop);
- end;
- Result := Result + AManagers[iLoop].AsString
- end;
- function MembersConvertToStr(AJoUser: ISuperObject): string;
- var
- AItem: TSuperAvlEntry;
- begin
- Result := '';
- for AItem in AJoUser.AsObject do
- Result := Result + AItem.Value['id'].AsString + Chr(10);
- Result := Copy(Result, 0, Length(Result) - 1);
- end;
- { TNoProcess }
- constructor TBaseProcess.Create(AClient: TGroupClient);
- begin
- FClient := AClient;
- end;
- procedure TBaseProcess.Excute(AData: ISuperObject);
- begin
- end;
- procedure TBaseProcess.Send(AData: string);
- begin
- if FClient <> nil then
- FClient.Send(AData);
- end;
- { TGroupCreateResponse }
- procedure TGroupCreateResponse.Excute(AData: ISuperObject);
- var
- ATeam: TRealICQTeam;
- iLoop: Integer;
- begin
- try
- ATeam := TRealICQTeam.Create;
- ATeam.TeamID := AData.S['group.id'];
- ATeam.TeamCaption := AData.S['group.name'];
- ATeam.TeamCreater := AData.S['group.creator'];
- ATeam.TeamIntro := AData.S['group.intro'];
- ATeam.TeamCallBoard := AData.S['group.notice'];
- ATeam.TeamValidate := TRealICQTeamValidateType(AData.I['group.auth']);
- ATeam.TeamManagers := ManagersConvertToStr(AData.A['group.managers']);
- ATeam.TeamMembers := MembersConvertToStr(AData.O['group.members']);
- except
- on Ex: Exception do
- begin
- Error(Ex.Message, 'TGroupCreateResponse.Excute');
- ATeam.Free;
- end;
- end;
- TGroupService.GetService.AddTeam(ATeam);
- GetMapTeamUsersProvider.Insert(AData.S['group.id'], AData.O['group'].AsJSon(), AData.I['group.ver']);
- end;
- { TGroupDeleteResponse }
- procedure TGroupDeleteResponse.Excute(AData: ISuperObject);
- var
- ATeamID: string;
- begin
- try
- ATeamID := AData.A['group.id'].S[0];
- TGroupService.GetService.RemoveTeam(ATeamID);
- except
- on Ex: Exception do
- begin
- Error(Ex.Message, 'TGroupDeleteResponse.Excute');
- end;
- end;
- end;
- { TGroupUpdateResponse }
- procedure TGroupUpdateResponse.Excute(AData: ISuperObject);
- var
- ATeam: TRealICQTeam;
- begin
- try
- ATeam := TRealICQTeam.Create;
- ATeam.TeamID := AData.S['group.id'];
- ATeam.TeamCaption := AData.S['group.name'];
- ATeam.TeamIntro := AData.S['group.intro'];
- ATeam.TeamCallBoard := AData.S['group.notice'];
- ATeam.TeamValidate := TRealICQTeamValidateType(AData.I['group.auth']);
- TGroupService.GetService.UpdateTeam(ATeam);
- except
- on Ex: Exception do
- begin
- Error(Ex.Message, 'TGroupCreateResponse.Excute');
- ATeam.Free;
- end;
- end;
- ATeam.Free;
- // GetMapTeamUsersProvider.Insert(AData.S['group.id'], AData.O['group'].AsJSon(), AData.I['group.ver']);
- end;
- { TGroupSearchResponse }
- procedure TGroupSearchResponse.Excute(AData: ISuperObject);
- var
- ARecord: TSearchTeamResultRecord;
- ARecords: TStringList;
- iLoop: Integer;
- jaGroups: TSuperArray;
- begin
- ARecords := TStringList.Create;
- try
- jaGroups := AData.A['groups'];
- for iLoop := 0 to jaGroups.Length - 1 do
- begin
- ARecord := TSearchTeamResultRecord.Create;
- ARecord.TeamID := jaGroups[iLoop]['id'].AsString;
- ARecord.TeamCaption := jaGroups[iLoop]['name'].AsString;
- ARecord.TeamCreater := jaGroups[iLoop]['creator'].AsString;
- ARecords.AddObject(IntToStr(iLoop), ARecord);
- end;
- TGroupService.GetService.OnSearched(ARecords, AData.I['skip'], AData.I['limit']);
- finally
- ARecords.Free;
- end;
- end;
- { TGroupSearchByIDResponse }
- procedure TGroupSearchByIDResponse.Excute(AData: ISuperObject);
- var
- ARecord: TSearchTeamResultRecord;
- jaGroups: TSuperArray;
- begin
- jaGroups := AData.A['groups'];
- if jaGroups.Length > 0 then
- begin
- ARecord := TSearchTeamResultRecord.Create;
- ARecord.TeamID := jaGroups[0]['id'].AsString;
- ARecord.TeamCaption := jaGroups[0]['name'].AsString;
- ARecord.TeamCreater := jaGroups[0]['creator'].AsString;
- TGroupService.GetService.OnSearched(TSearchTeamResultRecord(ARecord));
- end;
- end;
- { TBaseProcess }
- procedure TMemberAddResponse.Excute(AData: ISuperObject);
- var
- ATeamID: string;
- AMembers, AManagers: TStringList;
- jaMembers, jaManagers: TSuperArray;
- iLoop: Integer;
- begin
- try
- ATeamID := AData.S['group.id'];
- if Trim(ATeamID) = '' then
- Exit;
-
- AMembers := TStringList.Create;
- AManagers := TStringList.Create;
- jaMembers := AData.A['group.members'];
- jaManagers := AData.A['group.managers'];
- for iLoop := 0 to jaMembers.Length - 1 do
- AMembers.Add(jaMembers.S[iLoop]);
- for iLoop := 0 to jaManagers.Length - 1 do
- AManagers.Add(jaManagers.S[iLoop]);
-
- if AData.A['group.members'].Length > 0 then
- TGroupService.GetService.OnAddedMembers(ATeamID, AMembers);
- if AData.A['group.managers'].Length > 0 then
- TGroupService.GetService.OnAddedManagers(ATeamID, AManagers);
- except
- on Ex: Exception do
- begin
- Error(Ex.Message, 'TMemberAddResponse.Excute');
- FreeAndNil(AMembers);
- FreeAndNil(AManagers);
- end;
- end;
- FreeAndNil(AMembers);
- FreeAndNil(AManagers);
- end;
- { TMemberDelResponse }
- procedure TMemberDelResponse.Excute(AData: ISuperObject);
- var
- ATeamID: string;
- AMembers, AManagers: TStringList;
- jaMembers, jaManagers: TSuperArray;
- iLoop: Integer;
- begin
- try
- ATeamID := AData.S['group.id'];
- if Trim(ATeamID) = '' then
- Exit;
-
- AMembers := TStringList.Create;
- AManagers := TStringList.Create;
- jaMembers := AData.A['group.members'];
- jaManagers := AData.A['group.managers'];
- for iLoop := 0 to jaMembers.Length - 1 do
- AMembers.Add(jaMembers.S[iLoop]);
- for iLoop := 0 to jaManagers.Length - 1 do
- AManagers.Add(jaManagers.S[iLoop]);
-
- if AData.A['group.members'].Length > 0 then
- TGroupService.GetService.OnDeletedMembers(ATeamID, AMembers);
- if AData.A['group.managers'].Length > 0 then
- TGroupService.GetService.OnDeletedManagers(ATeamID, AManagers);
- except
- on Ex: Exception do
- begin
- Error(Ex.Message, 'TMemberAddResponse.Excute');
- FreeAndNil(AMembers);
- FreeAndNil(AManagers);
- end;
- end;
- FreeAndNil(AMembers);
- FreeAndNil(AManagers);
- end;
- { TMemberApplyP }
- procedure TMemberApplyP.Excute(AData: ISuperObject);
- var
- ATeamID: string;
- joApply: ISuperObject;
- begin
- ATeamID := AData.S['group.id'];
- joApply := AData.O['group.apply'];
- TGroupService.GetService.OnReceivedApplyRequest(joApply.S['uid'], joApply.S['msg']);
- end;
- { TMemberReplyP }
- procedure TMemberReplyP.Excute(AData: ISuperObject);
- var
- ATeamID: string;
- joApply: ISuperObject;
- begin
- ATeamID := AData.S['group.id'];
- joApply := AData.O['group.apply'];
- TGroupService.GetService.OnReceivedApplyRequest(joApply.S['uid'], joApply.S['msg']);
- end;
- { TMessageBroadcast }
- //{id:'', group:{id:[id...]}, message:{message}}
- procedure TMessageBroadcast.Excute(AData: ISuperObject);
- var
- ATeamID: string;
- ASender: string;
- AStyle: string;
- AContent: string;
- TimesTamp: Int64;
- ASendTime: TDateTime;
- jaImgs: TSuperArray;
- iLoop: Integer;
- begin
- ATeamID := AData.A['group.id'].S[0];
- AContent := AData.S['msg.txt'];
- AContent := StringReplace(AContent, '\r\n', #13#10, [rfReplaceAll]);
- AContent := StringReplace(AContent, '[\r][\n]', '\r\n', [rfReplaceAll]);
- ASender := AData.S['msg.sender'];
- ASendTime := UnixToDateTime(Round(AData.I['msg.ts'] / 1000)+8*60*60);
- AStyle := Format('"%s", %s, [%s], [%s]',[
- AData.A['msg.style'].S[0],
- AData.A['msg.style'].S[1],
- AData.A['msg.style'].S[3],
- AData.A['msg.style'].S[2]]);
- jaImgs := AData.A['msg.img'];
- for ILoop := 0 to jaImgs.Length - 1 do
- if jaImgs.O[iLoop].I['ret'] = 1 then
- Client.DownloadTeamFace(jaImgs.O[iLoop].S['hash'], jaImgs.O[iLoop].S['file'], '');
- end;
- end.
|