unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Label1: TLabel;
Button1: TButton;
Edit1: TEdit;
Panel3: TPanel;
Label2: TLabel;
Label3: TLabel;
ListBox1: TListBox;
Button2: TButton;
Button3: TButton;
CheckBox1: TCheckBox;
Memo1: TMemo;
ClientSocket1: TClientSocket;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure ClientSocket1Lookup(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
public
end;
var
Form1: TForm1;
nickname: string;
implementation
uses conn;
{$R *.DFM}
procedure TForm1.Button2Click(Sender: TObject);
var do_connect: Boolean;
host,port: string;
begin
Form2 := TForm2.Create(Application);
do_connect := (Form2.ShowModal = mrOk);
host := Form2.Edit1.Text;
port := Form2.Edit2.Text;
nickname := Form2.Edit3.Text;
Form2.Free;
if not do_connect then
Exit;
if ClientSocket1.Active then
ClientSocket1.Close;
ClientSocket1.Host := host;
ClientSocket1.Port := StrToInt(port);
ClientSocket1.Open;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if ClientSocket1.Active then
ClientSocket1.Close;
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Memo1.Lines.Insert(0,'Socket error ('+IntToStr(ErrorCode)+')');
end;
procedure TForm1.ClientSocket1Lookup(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,'Looking up for server...');
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,'connecting...');
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,'connected!');
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Insert(0,'disconnected');
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var s,from_,to_: string;
begin
s := Socket.ReceiveText;
if Copy(s,1,2) = '#U' then begin
Delete(s,1,2);
ListBox1.Items.Clear;
while Pos(';',s) > 0 do begin
ListBox1.Items.Add(Copy(s,1,Pos(';',s)-1));
Delete(s,1,Pos(';',s));
end;
Exit;
end;
if Copy(s,1,2) = '#M' then begin
Delete(s,1,2);
Memo1.Lines.Insert(0,Copy(s,1,Pos(';',s)-1)+'> '+
Copy(s,Pos(';',s)+1,Length(s)-Pos(';',s)));
Exit;
end;
if Copy(s,1,2) = '#N' then begin
Socket.SendText('#N'+nickname);
Exit;
end;
if Copy(s,1,2) = '#P' then begin
Delete(s,1,2);
to_ := Copy(s,1,Pos(';',s)-1);
Delete(s,1,Pos(';',s));
from_ := Copy(s,1,Pos(';',s)-1);
Delete(s,1,Pos(';',s));
if (to_ = nickname)or(from_ = nickname) then
Memo1.Lines.Insert(0,from_+' (private) > '+s);
Exit;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
begin
if (CheckBox1.Checked)and(ListBox1.ItemIndex < 0) then begin
ShowMessage('At first you should select the user in the User List!');
Exit;
end;
if CheckBox1.Checked then
s := '#P'+ListBox1.Items[ListBox1.ItemIndex]+';'
else
s := '#M';
s := s+nickname+';'+Edit1.Text;
ClientSocket1.Socket.SendText(s);
Edit1.Text := '';
ActiveControl := Edit1;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_RETURN then
Button1.Click;
end;
end.