Client:
Delphi-Quellcode:
procedure TMainForm.ConnectBtnClick(Sender: TObject);
var
buffer: TIdBytes;
begin
MsgRec.id := 1;
MsgRec.auth.version := '0.1';
MsgRec.auth.nickname := nick_input.text;
MsgRec.auth.password := pw_input.text;
try
Client.Connect;
buffer := RawToBytes(MsgRec, SizeOf(TMsgRec));
Client.IOHandler.Write(buffer);
except
ShowMessage('Verbindung konnte nicht hergestellt werden');
end;
end;
Server:
Delphi-Quellcode:
procedure TMainForm.ServerExecute(AContext: TIdContext);
var
MsgRec: TMsgRec;
buffer: TIdBytes;
begin
AContext.Connection.IOHandler.ReadBytes(buffer, SizeOf(TMsgRec));
BytesToRaw(buffer, MsgRec, SizeOf(TMsgRec));
case MsgRec.Id
of
1: ClientAuth(MsgRec, AContext);
end;
end;
procedure TMainForm.ClientAuth(MsgRec: TMsgRec; Client: TIdContext);
var
i: Integer;
begin
for i := 0
to concnt
do begin //Namenszuweisung für IP!
if Connections[i].client.Binding.PeerIP = Client.Binding.PeerIP
then begin
Connections[i].
name := MsgRec.auth.nickname;
WriteProtocol('
Client #' + IntToStr(concnt) + '
: ' + Connections[i].client.Binding.PeerIP + '
changed Name to "' + Connections[i].
name + '
"');
end;
end;
UpdateClientList;
end;
Klappt auch super :]
Muss jetzt nur noch einen Weg finden die Clients eindeutig zu identifizieren, auch wenn die
IP dieselbe ist (das Anhängen der Identifizierungsinformationen an das Data Object scheint nicht zu klappen da der Client bei
Indy 10 kein Data Objekt besitzt)