unit BroadcastChatMain; {$I RemObjects.inc} interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, uROPoweredByRemObjectsButton, uROServer, uROIndyUDPServer, uROBroadcastServer, uROIndyUDPChannel, uROBroadcastChannel, uROClient, uROBINMessage, BroadcastChatLibrary_Async, ActnList; type TBroadcastChatMainForm = class(TForm) Panel1: TPanel; Panel2: TPanel; Panel3: TPanel; Panel4: TPanel; ed_Chat: TMemo; Panel5: TPanel; Panel6: TPanel; Panel7: TPanel; ed_Message: TEdit; Panel8: TPanel; Panel9: TPanel; ed_NickName: TEdit; Label1: TLabel; RoPoweredByRemObjectsButton1: TRoPoweredByRemObjectsButton; btn_Send: TBitBtn; ROBINMessage: TROBINMessage; ROBroadcastServer: TROBroadcastServer; ROBroadcastChannel: TROBroadcastChannel; ActionList1: TActionList; ac_SendMessage: TAction; BitBtn1: TBitBtn; procedure FormCreate(Sender: TObject); procedure ac_SendMessageExecute(Sender: TObject); procedure ActionList1Update(Action: TBasicAction; var Handled: Boolean); procedure BitBtn1Click(Sender: TObject); // procedure tim_CheckInfoTimer(Sender: TObject); procedure ROBroadcastChannelBroadCastResponseReceived(aServerIP, aResponseUID: string); procedure FormDestroy(Sender: TObject); private fChatProxy: IBroadcastChatService_Async; public {$IFDEF VER140} procedure WMUser(var Msg: TMessage); message WM_USER; {$ENDIF} procedure MessageReceived(iDate: TDateTime; const iFrom, iMessage: string); end; var BroadcastChatMainForm: TBroadcastChatMainForm; implementation uses IdStack, IdGlobal, BroadcastChatService_Impl; {$R *.dfm} {$IFDEF RemObjects_INDY8} function IndyGetHostName: string; var i: LongWord; begin SetLength(Result, MAX_COMPUTERNAME_LENGTH + 1); i := Length(Result); if GetComputerName(@Result[1], i) then begin SetLength(Result, i); end; end; {$ENDIF} procedure TBroadcastChatMainForm.FormCreate(Sender: TObject); begin fChatProxy := CoBroadcastChatService_Async.Create(ROBINMessage, ROBroadcastChannel); {$IFDEF RemObjects_INDY10} ed_NickName.Text := GStack.HostName; {$ELSE} ed_NickName.Text := IndyGetHostName; {$ENDIF} end; procedure TBroadcastChatMainForm.MessageReceived(iDate: TDateTime; const iFrom, iMessage: string); begin ed_Chat.Lines.Add(Format('[%s] <%s> %s', [TimeToStr(iDate), iFrom, iMessage])); end; procedure TBroadcastChatMainForm.ac_SendMessageExecute(Sender: TObject); begin if ed_Message.Text <> '' then begin fChatProxy.Invoke_SendMessage(Now, ed_NickName.Text, ed_Message.Text); ed_Message.Text := ''; ActiveControl := ed_Message; end; end; procedure TBroadcastChatMainForm.ActionList1Update(Action: TBasicAction; var Handled: Boolean); begin ac_SendMessage.Enabled := ed_Message.Text <> ''; end; procedure TBroadcastChatMainForm.BitBtn1Click(Sender: TObject); begin fChatProxy.Invoke_GetInfo(); end; procedure TBroadcastChatMainForm.ROBroadcastChannelBroadCastResponseReceived(aServerIP, aResponseUID: string); var lName: string; begin lName := fChatProxy.Retrieve_GetInfo(); ed_Chat.Lines.Add(Format('[%s] chat user: %s (at %s)', [TimeToStr(Now), lName, aServerIP])); end; procedure TBroadcastChatMainForm.FormDestroy(Sender: TObject); begin fChatProxy := nil; end; {$IFDEF VER140} procedure TBroadcastChatMainForm.WMUser(var Msg: TMessage); begin TBroadcastChatService(Msg.WParam).MessageReceived; end; {$ENDIF} end.