AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Buffer warten

Ein Thema von Bahamutsfire · begonnen am 25. Mär 2008
Antwort Antwort
Bahamutsfire

Registriert seit: 8. Feb 2007
20 Beiträge
 
#1

Auf Buffer warten

  Alt 25. Mär 2008, 09:54
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz