Nein, so würde er die Pointer-Adresse verschicken:deify hat geschrieben:ich meine, so würde er doch nur die pointer-addresse verschicken oder? der client hat doch zu 100% komplett andere Daten an diesem Pointer, oder nicht?
Code: Alles auswählen
@*Send
Dann hat man natürlich den Nachteil, dass das Paket immer gleich gross ist, egal ob man nun nur ein A, oder ein Buch senden will.
Hier mal ein nicht lauffähiges Konzept, mithilfe meiner weiter oben geposteten Beispielstruktur:
Code: Alles auswählen
Structure _MY_SEND_MSG_
LengthOfData.l
KindOfPaket.w
*Data
EndStructure
*Send._MY_SEND_MSG_ = AllocateMemory($10000)
;Wir senden ein Hallo, Welt
Text$ = "Hallo, Welt!"
*Send\KindOfPaket = 1 ;<- Chat msg
*Send\LengthOfData = StringByteLength(Text$, #PB_UTF8) + 1 ;<- Am besten immer im UTF8-Format senden, und nicht das abschliessende Nullbyte vergessen
;Sodele, nun nur noch den Text als *Data anhängen:
PokeS(*Send + OffsetOf(_MY_SEND_MSG_\Data), Text$, -1, #PB_UTF8)
;Dann versenden
SendNetworkData(ClientID, *Send, *Send\LengthOfData + OffsetOf(_MY_SEND_MSG_\Data))
;Bemerkung:
;Wenn man mit OffsetOf() arbeitet, hat es den Vorteil, das der Code auch dann funktioniert, wenn man in die
; _MY_SEND_MSG_-Struktur noch Felder einfügen muss.
; Allerdings muss *Data IMMER am Ende stehen!
;Beim Empfänger, zupft man das Paket einfach wieder raus:
*Receive._MY_SEND_MSG_ = AllocateMemory($10000)
R = ReceiveNetworkData(ClientID, *Receive, $10000)
If R > OffsetOf(_MY_SEND_MSG_\Data)
;O.k., wir haben mindestens ein Paket, ohne *Data
If *Receive\LengthOfData + OffsetOf(_MY_SEND_MSG_\Data) <= R
;O.k., Paket ist vollständig
Select *Receive\KindOfPaket
Case 1
;Chat-Msg
Text$ = PeekS(*Receive + OffsetOf(_MY_SEND_MSG_\Data), -1, #PB_UTF8) ;Da wir das Nullbyte mitgesendet haben, lesen wir einfach bis dort.
Debug Text$
;....