Hallo Leute,
ich habe versucht einkommende Buffer auf eine Indytcpserver mit einem integer wert zu versehen. Allerdings funktioniert das nur so lange nur ein Client connectet ist. Ich habe mal mit einzelanweisungen das ganze durchlaufen lassen und bin zu dem Ergebnis gekommen, das der richtige Buffer gelesen werden kann, allerdings kommt dieser Leer an(also bei string ''). Ich folgere daraus, dass man hier auf den Buffer gewartet werden muss, die Frage ist nur wie.
Desweiteren habe ich probleme bei For-Schleifen, die scheinen einfach nicht richig zu zählen. Passiert mir aber nur in Unterprogrammen, welcher von OnExecute ausgeführt werden.
(zb: Zählt er statt 1, 2 , 3 .. 5,7,3) ich habe mir gedacht, das es eventuell Probleme mit den Variablen gab so habe ich meine Zählvariable vorher auf 0 gesetzt, bekomm aber dann im Complier die Meldung, das dieser Wert nie genutzt wird.
Hier ein paar Auszüge aus dem Quelltext:
Auf dem Server
Delphi-Quellcode:
procedure TFormSockel.IdTCPServer1Execute(AThread: TIdPeerThread);
var
anweisung: byte;
begin
anweisung:= AThread.Connection.ReadSmallInt;
case anweisung of
2: IdentifikationsAnfragen(AThread);//identifikation
11: spielerleaved(Athread); //logout
1: Nachrichtkommtan(AThread);
end;
AThread.Connection.Disconnect;
end;
das Unterprogramm zum senden:
Delphi-Quellcode:
procedure Spielerlogininformieren(vtyp:TSpielerjointChat);
var
i: byte;
begin
for i:= 1 to 8 do
begin
if not(VASpieler[i].UserId = vtyp.userid) and (VASpieler[i].Statusverbunden = true) then
begin
with Welchersockel(i) do
begin
WriteSmallInt(0);
WriteBuffer(vtyp,sizeof(tspielerjointchat));
end;
end;
end;
end;
Bei ServerKomponenten des Clients
Delphi-Quellcode:
procedure TFormVerbinden.IdTCPServer1Execute(AThread: TIdPeerThread);
var
vantwort : byte;
begin
vantwort:= AThread.Connection.ReadSmallInt;
case vantwort of
3 : Idantwort(AThread);
1 : Chatnachrictempfang(AThread);
0 : spielerjoinchat(AThread);
13: spielerleaved(AThread);
end;
end;
Und hier wo es oft hängen bleibt, also wo der Buffer mit leeren Werten gelesen wird:
Delphi-Quellcode:
procedure spielerjoinchat (AThread: TIdPeerThread);
var
vtyp: TSpielerjointChat;
i: byte;
begin
AThread.Connection.ReadBuffer(vtyp,sizeof(Tspielerjointchat));
for i:=1 to 7 do
begin
if(vAanderespieler[i].Statusverbunden = false) then
begin
with vAanderespieler[i] do
begin
Nickname:= vtyp.Nickname;
UserId:= vtyp.userid;
Statusverbunden:= true;
userlisterefresh;
exit;
end;
end;
end;
end;
Hoffe jemand hat ne Idee
mfg
Lukas
P.S: kann mir jemand sagen welcher Indyversion standartmäßig bei Delphi 6 pro dirn ist? Würde meine Suche manchmal erleichtern.Danke
€:
Oh sorry gerade gemerkt falsche Ecke bitte verschieben. Habe ich irgendwie verpennt.