Netzwerk Spiel
Verfasst: 26.11.2004 17:53
Hallo,
ich möchte ien Netzwerkspiel erstellen. Doch wie kann ich eine Liste schicken?
ich möchte ien Netzwerkspiel erstellen. Doch wie kann ich eine Liste schicken?
Code: Alles auswählen
Structure sNetPacket
pakBefehl.l
pakLeange.l
pakData.s
EndStructure
Global DummyNetPacket.sNetPacket
Procedure.l HexToLong(strHex.s)
DefType.l HexLen, ptrI, ZeichenASC, Dec
DefType.s Zeichen
strHex = UCase(strHex)
HexLen = Len(strHex)
For ptrI = 0 To HexLen - 1
Zeichen = Mid(strHex, HexLen - ptrI, 1)
If Asc(Zeichen) >= 65 And Asc(Zeichen) >= 55 + 16
ProcedureReturn 0
EndIf
If Asc(Zeichen) >= 65
ZeichenASC = 10 + Asc(Zeichen) - 65
Else
ZeichenASC = Val(Zeichen)
EndIf
Dec + ZeichenASC * Pow(16, ptrI)
Next
ProcedureReturn Dec
EndProcedure
Procedure SplitNetPacket(ReceivedPacket.s, *CallFnkPtr.l)
DefType.s tmpPacket, tmpNetData
DefType.l tmpPacketPtr, tmpLaenge, tmpBefehl
Repeat
tmpPacketPtr + 1
tmpPacket = StringField(ReceivedPacket, tmpPacketPtr, Chr(4))
If tmpPacket <> ""
tmpBefehl = HexToLong(StringField(StringField(tmpPacket, 1, Chr(1)), 1, Chr(2)))
tmpLaenge = HexToLong(StringField(StringField(tmpPacket, 1, Chr(1)), 2, Chr(2)))
tmpNetData = StringField(tmpPacket, 2, Chr(1))
If Len(tmpNetData) = tmpLaenge
Debug "/CMD: " + Str(tmpBefehl) + "/LEN: " + Str(tmpLaenge) + "/DAT: " + tmpNetData
DummyNetPacket\pakBefehl = tmpBefehl
DummyNetPacket\pakLeange = tmpLaenge
DummyNetPacket\pakData = tmpNetData
CallFunctionFast(*CallFnkPtr, @DummyNetPacket)
; Funktion aufrufen, die das Packet nun "ausführt"
Else
; Wir haben ein fehlerhaftes Packet, ne Mißgeburt geangelt, tu was du willst.
; Wer jetzt sagt, Packete sind auch lebewesen, der sollte echt mal den PC
; aus machen o_O
EndIf
EndIf
Until tmpPacket = ""
EndProcedure
Procedure.b SendNetPacket(lngBefehl.l, strData.s)
DefType.l PaketLen
PaketLen = Len(strData)+32
*TCPSendBuffer = AllocateMemory(PaketLen)
PokeS(*TCPSendBuffer, Hex(lngBefehl))
PokeB(*TCPSendBuffer+4, 2)
PokeS(*TCPSendBuffer+5, Hex(Len(strData)))
PokeB(*TCPSendBuffer+9, 1)
PokeS(*TCPSendBuffer+10, strData)
PokeB(*TCPSendBuffer+(Len(strData)+10), 4)
Debug "Sending Buffer: " + PeekS(*TCPSendBuffer)
SendNetworkData(*TCPSendBuffer, Len(strData)+32)
RtlFillMemory_(*UDPSendBuffer, PaketLen, 0)
FreeMemory(*UDPSendBuffer)
EndProcedure
ForEach DeineList()
tmpListData = tmpListData + DeneList() + Chr(3)
Next
tmpListData = Left(tmpListData, len(tmpListData)-1)
SendNetPacket(0, tmpListData) ; packet senden und angeben das es sich um den Befehl null handelt