Einzelnen Beitrag anzeigen

psycore

Registriert seit: 16. Sep 2006
Ort: Österreich
11 Beiträge
 
#17

Re: Records dynamisch verschachteln

  Alt 12. Jun 2008, 14:52
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)
  Mit Zitat antworten Zitat