unit ChatServerService_Impl; {----------------------------------------------------------------------------} { This unit was automatically generated by the RemObjects SDK after reading } { the RODL file associated with this project . } { } { This is where you are supposed to code the implementation of your objects. } {----------------------------------------------------------------------------} interface uses {vcl:} Classes, SysUtils, SyncObjs, {RemObjects:} uROClientIntf, uROTypes, uROServer, uROServerIntf, uROSessions, {Required:} uRORemoteDataModule, {Generated:} SuperTCPChannelChatLibrary_Intf; type { TChatServerService } TChatServerService = class(TRORemoteDataModule, IChatServerService) private protected { IChatServerService methods } procedure TalkPrivate(const TargetNickname: String; const Message: String); procedure Talk(const Message: String); end; var UserClientIDList: TStringList; UserClientIDListCs: TCriticalSection; implementation {$R *.dfm} uses {Generated:} SuperTCPChannelChatLibrary_Invk, SuperTCPChannelChat_ServerMain; procedure Create_ChatServerService(out anInstance : IUnknown); begin anInstance := TChatServerService.Create(nil); end; { ChatServerService } procedure TChatServerService.TalkPrivate(const TargetNickname: String; const Message: String); var ev: IChatEvents_Writer; i: Integer; aDestGuid: string; begin UserClientIDListCs.Acquire; try i := UserClientIDList.IndexOfName(TargetNickname); if i = -1 then raise Exception.Create('Invalid user: '+TargetNickname); aDestGuid := UserClientIDList.Values[TargetNickname]; finally UserClientIDListCs.Release; end; ev := (EventRepository as IChatEvents_Writer); ev.ExcludeSender := False; ev.SessionList.Add(aDestGuid); ev.Message(session.SessionID, Session['nick'], TargetNickname, Message); end; procedure TChatServerService.Talk(const Message: String); var ev: IChatEvents_Writer; begin ev := (EventRepository as IChatEvents_Writer); ev.ExcludeSender := False; ev.Message(session.SessionID, Session['nick'], '', Message); end; initialization TROClassFactory.Create('ChatServerService', Create_ChatServerService, TChatServerService_Invoker); UserClientIDList := TStringList.Create; UserClientIDListCs := TCriticalSection.Create; finalization UserClientIDListCs.Free; UserClientIDList.Free; end.