![]() |
Delphi 7,indy ,Game Maker Studio Server
Hallo leute da ich hier immer was nützliches finde hoffe ich auf eure hilfe. :D
Ich möchte mit Delphi einen Server für ein MMO erstellen das ich in Game Maker Studio code. In game maker schicke ich die daten mit diesem code ab der server soll dann Byte mit inhalt 5 lesen und wissen das als nächstes ein string folgt.
Code:
Also was soll der server können...
client = network_create_socket( network_socket_tcp );
network_connect_raw( client, "127.0.0.1", 8090 ); buff = buffer_create( 256, buffer_grow, 1) buffer_seek(buff, buffer_seek_start, 0); buffer_write(buff, buffer_u8, 5 ); buffer_write(buff, buffer_string, "hallo" ); network_send_raw( client, buff, buffer_tell(buff) ); 1 mehrere clients gleichzeitig bedienen. 2 unabhängig von clients anfragen daten an clients senden (globaler event) 3 strings,double,integer lesen und senden können nun zu meinen Fragen 1.wie gehe ich am besten an die sache ran? ich habe mich bereits für delphi entsvhieden da ich hier die meiste erfahrung habe c++ ,c sharp,java,node.js scheiden für mich aus.natürlich habe ich auch hhier im forum schon einige beispiele ausprobiert editiert und versucht auf mein project anzuwenden leider vergebends. Mein letzter versuch schaffte es zumindest das cmd byte mit wert 5 zu lesen aber liest dann den folgen den string nicht mehr.
Code:
wenn mir jemand wenigstens mit einem kleinen code schnipsel start hilfe geben könnte wäre ich sehr dankbar. Leider kenne ich auch nicht die genauen abläufe mit buffern nicht. Weder von game maker noch von delphi Game maker intern funktioniert das ganze recht simpel man schickt den cmd vorran und dann weiß der server was das daten paket enthält also zb.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdTCPServer, IdGlobal; type TForm1 = class(TForm) Button1: TButton; log: TMemo; IdTCPServer1: TIdTCPServer; Button2: TButton; procedure Button2Click(Sender: TObject); procedure IdTCPServer1Execute(AThread: TIdPeerThread); procedure IdTCPServer1Disconnect(AThread: TIdPeerThread); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} var LastSessionID: Integer = 1; procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var SessionID: Integer; procedure DoLog(const Msg: String); var S: String; I: Integer; begin S := Format('%s-%0.6d: %s', [FormatDateTime('YYMMDD HHNNSS ZZZ', Now), SessionID, Msg]); for I := 1 to Length(S) do if S[I] in [#10,#13] then S[I] := ' '; // da Memo1.Lines.Add() intern über SendMessage() arbeitet sollte dies Threadsafe sein. log.Lines.Add(S); end; function ReadByte: Byte; begin AThread.Connection.ReadBuffer(Result, SizeOf(Result)); //DoLog(inttostr(Result)); end; function ReadLong: Cardinal; function SwapLong(Value: Cardinal): Cardinal; // konvertiert Big Endian zu Little Endian // im INet ist es üblich ALLE Daten in Big Endian zu übertragen asm BSWAP EAX end; begin AThread.Connection.ReadBuffer(Result, SizeOf(Result)); Result := SwapLong(Result); end; function ReadString: String; begin SetLength(Result, ReadByte); AThread.Connection.ReadBuffer(Result[1], Length(Result)); end; procedure WriteByte(Value: Byte); begin AThread.Connection.WriteBuffer(Value, SizeOf(Value)); end; procedure WriteString(const Value: ShortString); begin WriteByte(Length(Value)); AThread.Connection.WriteBuffer(Value[1], Length(Value)); end; var FileName: String; FileSize: Cardinal; FileStream: TStream; cmd:integer; begin SessionID := LastSessionID; Inc(LastSessionID); cmd:=ReadByte; DoLog(inttostr(cmd)); while True do case cmd of 5: begin // LOGOUT DoLog('try to read string'); DoLog(ReadString); Break; end; end; sleep(1); end; procedure TForm1.Button2Click(Sender: TObject); begin IdTCPServer1.Active:=false; end; procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread); begin log.Lines.Add('Client disconnected'); end; end. wenn ich byte 10 schicke kommt darauf folgend integer integer string an. Ich freue mich auf eure posts bitte geht nicht zu hart mit mir ins Gericht ich bin noch anfänger aber möchte dieses project wirklich gerne verwirklichen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz