Code archives/Networking/SimpleUDP2
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Sry, because i cant speak english so good i cant give you a longer Description :( But Check it out, its very easy to Create Games with it ! This Lib is in progress, it gets some other functions ! To Download the Samples, look here : http://www.toebproductions.bplaced.net/SimpleUDP%202.0.rar Have fun ! | |||||
;+-------------------------+ ;| SimpleUDP | ;| by | ;| | ;| Tobias 'ToeB' Hendricks | ;+-------------------------+ ;| Version 2.0 | ;+-------------------------+ Const UDP_JoinMsg = 1 Const UDP_NotJoinMsg = 2 Const UDP_PingMsg = 3 Const UDP_PingDataMsg = 4 Const UDP_CmdMsg = 5 Const UDP_EndMsg = 6 Const UDP_AnswerMsg = 7 Const UDP_KickMsg = 8 Const UDP_BannMsg = 9 Const UDP_NameMsg = 10 Const UDP_ChangeHostMsg = 11 Const UDP_GetInformationMsg = 12 Const UDP_StartSendServerFile = 13 Const UDP_AnswerSendServerFile = 14 Const UDP_SendServerFileBytes = 15 Const UDP_EndSendServerFile = 16 Const UDP_EndSend = 17 Const UDP_ReConnectMsg = 18 Const Event_NewPlayer = 1 Const Event_ConnectedServer = 2 Const Event_PlayerLeft= 3 Const Event_NoConnection = 4 Const Event_PlayerKicked = 5 Const Event_PlayerBanned = 6 Const Event_ChangeName = 7 Const Event_ReConnect = 8 Const UDP_LanGame=1, UDP_NetGame=2 Const UDP_MaxParameter = 15 Const UDP_PingSendTime = 1000;ms Const UDP_PackedSize = 8187 ;Maximale Packetgröße : 8187 Const UDP_ServerFilePath$ = "ServerFiles\" Global UDP_Host, UDP_Connected, UDP_Connect, UDP_ChangeHostConnect, UDP_Dediziert Global UDP_Stream, UDP_ServerPort, UDP_ServerIP, UDP_ServerID, UDP_NetMode, UDP_MaxPlayers, UDP_ServerStream, UDP_ServerPing Global UDP_SendJoinMsgMs, UDP_ServerGlobalPing Global UDP_Player.UDP_Client, UDP_PlayerID, UDP_ServerClient.UDP_Client Global UDP_SendPingTime, UDP_GetPingFromServer Global UDP_EventID, UDP_EventMsg$, UDP_EventMsg2$, UDP_EventData$ Global UDP_MsgEntID Global UDP_ChangeName, UDP_NewName$ Global UDP_SendServerFiles, UDP_ServerFileID, UDP_ServerFile.UDP_ServerFile Global UDP_CmdID, UDP_CmdMaxParameter, UDP_CmdFromID, UDP_CmdBank Dim UDP_CmdParameter$( UDP_MaxParameter ) Dim UDP_ClientInfo.UDP_Client( 0 ) Dim UDP_tmpParameter$( UDP_MaxParameter ) Type UDP_Client Field ID Field Stream Field IP$,Port Field Ping,PingMs,WaitPing Field kick,host,connected Field name$,changename,newname$ Field serverfile.UDP_ServerFile Field recon, reconms End Type Type UDP_Server Field IP,Port Field Ping End Type Type UDP_Cmd Field typ Field ID Field FromID,toID Field maxparameter Field parameter$[ UDP_MaxParameter ] Field info.UDP_Cmd Field del Field send,sendms Field bank End Type Type UDP_Event Field Event Field EventData$ Field EventMsg$ Field EventMsg2$ End Type Type UDP_Ban Field IP Field time,ms Field reason$ End Type Type UDP_ServerFile Field transfer Field ID Field filename$ Field datei, size Field sendfile, sendms, byteID, byte Field client.UDP_Client End Type Function UDP_HostGame( tmpMaxPlayers=16, tmpNetMode=UDP_LanGame, tmpPort=8000, tmpDediziert=0 ) ;Übergabe an Globale UDP_ServerPort = tmpPort UDP_NetMode = tmpNetMode UDP_Host = 1 UDP_Connected = 1 UDP_MaxPlayers = tmpMaxPlayers UDP_Dediziert = tmpDediziert Dim UDP_ClientInfo.UDP_Client( UDP_MaxPlayers ) UDP_CmdBank = CreateBank( 0 ) ;Empfangs Stream erstellen UDP_Stream = CreateUDPStream( UDP_ServerPort ) ;Streamhandle prüfen If UDP_Stream Then If tmpDediziert = 0 Then ;Wenn der Host mitspielen soll tmpClient.UDP_Client = New UDP_Client tmpClient\ID = 1 tmpClient\IP = UDP_IntIP("127.0.0.1") tmpClient\Port = UDP_ServerPort tmpClient\stream = 0 tmpClient\name$ = "unnamed" tmpClient\host = 1 tmpClient\connected = 1 UDP_Player = tmpClient UDP_PlayerID = tmpClient\ID UDP_ServerID = tmpClient\ID UDP_ClientInfo( UDP_PlayerID ) = tmpClient UDP_ServerClient = tmpClient EndIf Return 1 Else UDP_Connected = 0 Return 0 EndIf End Function Function UDP_JoinGame( tmpHostIP$, tmpHostPort=8000 ) ;Übergabe an Globale UDP_ServerPort = tmpHostPort UDP_Host = 0 UDP_Connected = 0 UDP_CmdBank = CreateBank( 0 ) If Instr(tmpHostIP,".")<>0 Then UDP_ServerIP = UDP_IntIP(tmpHostIP$) Else UDP_ServerIP = Int( tmpHostIP ) ;Stream erstellen If UDP_Stream = 0 Then UDP_Stream = CreateUDPStream( ) ;Stream überpürfen If UDP_Stream = 0 Then Return 0 ;Wenn erfolgreich, UDP_Connect = 1 UDP_ChangeHostConnect = 0 Return 1 End Function Function UDP_Update( ) ;Host Aufgabenbereich If UDP_Host = 1 Then If UDP_Connected = 1 Then While RecvUDPMsg( UDP_Stream )<>0 ;Alle Nachrichten lesen tmpByte = ReadByte( UDP_Stream ) ;Header-Byte auslesen Select tmpByte ;Gucken welches Byte empfangen worden ist Case UDP_JoinMsg tmpClientIP = UDPMsgIP( UDP_Stream ) tmpClientPort = UDPMsgPort( UDP_Stream ) tmpClientConnected = ReadByte( UDP_Stream ) If tmpClientConnected = 0 Then ;Prüfen on ein Bann für die IP vorhanden ist tmpBanned = 0 tmpBanntime = 0 tmpReason$ = "" For tmpBan.UDP_Ban = Each UDP_Ban If tmpBan\IP = tmpClientIP Then tmpBanned = 1 If tmpBan\time > 0 Then tmpBannTime = tmpBan\time - ( MilliSecs( ) - tmpBan\ms ) EndIf tmpReason$ = tmpBan\reason Exit EndIf Next If tmpBanned = 0 Then ;Clients überpürfen tmpGet = 0 For tmpCLient.UDP_Client = Each UDP_Client If tmpClient\IP = tmpClientIP And tmpClient\Port = tmpClientPort Then tmpGet = 1 : Exit Next If tmpGet = 0 ;Prüfen ob Platz frei ist tmpID = 0 For i = 1 To UDP_MaxPlayers If UDP_ClientInfo( i ) = Null Then tmpID = i : Exit Next Else tmpID = tmpClient\ID EndIf If tmpID > 0 And tmpID <= UDP_MaxPlayers ;Clienten erstellen If tmpGet = 0 Then tmpClient.UDP_Client = New UDP_Client tmpClient\ID = tmpID tmpClient\IP = tmpClientIP tmpClient\Port = tmpClientPort tmpClient\stream = UDP_Stream tmpClient\name$ = "unnamed" tmpClient\connected = 1 If UDP_NetMode = UDP_LanGame Then tmpClient\stream = CreateUDPStream( ) EndIf UDP_ClientInfo( tmpClient\ID ) = tmpClient If UDP_SendServerFiles = 1 Then For tmpFile.UDP_ServerFile = Each UDP_ServerFile If tmpFile\transfer = 0 Then serverfile.UDP_ServerFile = New UDP_ServerFile serverfile\transfer = 1 serverfile\filename$ = tmpFile\filename$ serverfile\datei = ReadFile( serverfile\filename$ ) serverfile\size = tmpFile\size serverfile\ID = tmpFile\ID serverfile\byteID = 1 serverfile\byte = CreateBank( UDP_PackedSize ) ReadBytes( serverfile\byte, serverfile\datei, 0, UDP_PackedSize ) serverfile\client = tmpClient tmpClient\serverfile = serverfile EndIf Next EndIf ;Antwort geben mit Client daten WriteByte( tmpClient\stream, UDP_JoinMsg ) WriteByte( tmpClient\stream, 0 ) WriteInt( tmpClient\stream, UDP_MaxPlayers ) WriteByte( tmpClient\stream, UDP_Dediziert ) WriteByte( tmpClient\stream, UDP_NetMode ) WriteInt( tmpClient\stream, tmpClient\ID ) WriteInt( tmpClient\stream, UDP_ServerID ) WriteByte( tmpClient\stream, tmpClient\connected ) For tmpClientAll.UDP_Client = Each UDP_Client WriteInt( tmpClient\stream, tmpClientAll\ID ) WriteInt( tmpClient\stream, tmpClientAll\IP ) WriteInt( tmpClient\stream, tmpClientAll\Port ) WriteString( tmpClient\stream, tmpClientAll\name$ ) WriteByte( tmpClient\stream, tmpClientAll\connected ) Next SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) ;Anderen Clienten den Neuen "vorstellen" For tmpClientAll.UDP_Client = Each UDP_Client If tmpClientAll <> tmpClient And tmpClientAll <> UDP_Player Then ;Wenn der Client nicht der Neue ist und nicht der eignene WriteByte( tmpClientAll\stream, UDP_JoinMsg ) WriteInt( tmpClientAll\stream, tmpClient\ID ) WriteInt( tmpClientAll\stream, tmpClient\IP ) WriteInt( tmpClientAll\stream, tmpClient\Port ) SendUDPMsg( tmpClientAll\stream, tmpClientAll\IP, tmpClientAll\Port ) EndIf Next tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_NewPlayer tmpEvent\EventData$ = tmpClient\ID Else WriteByte( UDP_Stream, UDP_NotJoinMsg ) WriteByte( UDP_Stream, 0 ) ;Server Voll SendUDPMsg( UDP_Stream, tmpClientIP, tmpClientPort ) EndIf Else WriteByte( UDP_Stream, UDP_NotJoinMsg ) WriteByte( UDP_Stream, 1 ) ;Gebannt WriteInt( UDP_Stream, tmpBannTime ) WriteString( UDP_Stream, tmpReason$ ) SendUDPMsg( UDP_Stream, tmpClientIP, tmpClientPort ) EndIf Else tmpClientID = ReadInt( UDP_Stream ) For tmpClient.UDP_Client = Each UDP_Client If tmpClient\ID = tmpClientID Then Exit Next If tmpClient <> Null Then tmpClient\connected = 1 WriteByte( tmpClient\stream, UDP_JoinMsg ) WriteByte( tmpClient\stream, 1 ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) EndIf EndIf Case UDP_PingMsg tmpID = ReadInt( UDP_Stream ) If tmpID => 0 And tmpID <= UDP_MaxPlayers tmpClient.UDP_Client = UDP_ClientInfo.UDP_Client( tmpID ) If tmpClient <> Null If tmpClient\connected = 1 If tmpClient\PingMs > 0 Then ;If tmpClient\waitping = 1 tmpClient\Ping = ( MilliSecs() - tmpClient\PingMs ) / 2 : tmpClient\PingMs = 0 tmpClient\waitping = 0 ;EndIf EndIf WriteByte( tmpClient\stream, UDP_PingDataMsg ) For tmpClientAll.UDP_Client = Each UDP_Client WriteByte( tmpClient\stream, 1) WriteInt( tmpClient\stream, tmpClientAll\ID ) WriteInt( tmpClient\stream, tmpClientAll\Ping ) WriteByte( tmpClient\stream, tmpClientAll\connected ) Next WriteByte ( tmpClient\stream, 2 ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port) EndIf EndIf EndIf Case UDP_CmdMsg tmpSafety = ReadByte( UDP_Stream ) tmpClientID = ReadInt( UDP_Stream ) If tmpSafety = 1 Then tmpID = ReadInt( UDP_Stream ) tmpCmdID = ReadInt( UDP_Stream ) tmpToID = ReadInt( UDP_Stream ) If tmpClientID => 0 And tmpClientID <= UDP_MaxPlayers Then For tmpCmdInfo.UDP_Cmd=Each UDP_Cmd If tmpCmdInfo\typ=0 And tmpCmdInfo\ID=tmpCmdID Then Exit Next tmpGet = 0 If tmpSafety = 1 Then For tmpCmd.UDP_Cmd = Each UDP_Cmd If tmpCmd\typ = 4 And tmpCmd\ID = tmpID Then tmpGet = 1: Exit Next EndIf If tmpGet = 0 Then tmpCmd.UDP_Cmd = New UDP_Cmd If tmpSafety = 0 tmpCmd\Typ = 2 tmpCmd\ID = tmpCmdID Else tmpCmd\typ = 2 tmpCmd\ID = tmpID tmpCmd\sendMs = MilliSecs() If tmpGet = 0 tmpCmdNew.UDP_Cmd = New UDP_Cmd tmpCmdNew\Typ = 4 tmpCmdNew\ID = tmpID EndIf EndIf tmpCmd\FromID = tmpClientID tmpCmd\ToID = tmpToID tmpCmd\info = tmpCmdInfo tmpCmd\MaxParameter = tmpCmdInfo\MaxParameter For i = 0 To tmpCmdInfo\MaxParameter Select tmpCmdInfo\parameter[ i ] Case 0 : tmpCmd\parameter[ i ] = ReadInt( UDP_Stream ) Case 1 : tmpCmd\parameter[ i ] = ReadFloat( UDP_Stream ) Case 2 : tmpCmd\parameter[ i ] = ReadString( UDP_Stream ) Case 3 : tmpCmd\parameter[ i ] = ReadByte( UDP_Stream ) Case 4 : tmpCmd\parameter[ i ] = ReadShort( UDP_Stream ) Case 5 tmpBankSize = ReadInt( UDP_Stream ) tmpCmd\bank = CreateBank( tmpBankSize ) For j = 0 To tmpBankSize-1 tmpByte = ReadByte( UDP_Stream ) PokeByte( tmpCmd\bank, j, tmpByte ) Next tmpCmd\parameter[ i ] = tmpCmd\bank End Select Next If tmpSafety = 0 tmpCmdNew.UDP_Cmd = New UDP_Cmd tmpCmdNew\ID = tmpCmdID tmpCmdNew\Typ = 1 tmpCmdNew\FromID = tmpClientID tmpCmdNew\toID = tmpToID tmpCmdNew\info = tmpCmdInfo tmpCmdNew\MaxParameter = tmpCmdInfo\MaxParameter For i = 0 To tmpCmdInfo\MaxParameter tmpCmdNew\parameter[ i ] = tmpCmd\parameter[ i ] Next If tmptoID <> 1 And tmpToID > 0 And tmpToID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmptoID ) <> Null Then Delete tmpCmd EndIf Else If tmpClientID => 0 And tmpClientID <= UDP_MaxPlayers Then tmpClient.UDP_Client = UDP_ClientInfo( tmpClientID ) If tmpClient\connected = 1 WriteByte( tmpClient\stream, UDP_AnswerMsg ) WriteInt( tmpClient\stream, tmpID ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) tmpCmdToID = tmPCmd\toID If tmpCmdToID < 0 Or tmpCmdtoID > UDP_MaxPlayers Then tmpCmdtoID = -1 For tmpClient.UDP_Client = Each UDP_Client If (tmpCmdToID = tmpClient\ID Or tmpCmdToID = -1 ) And tmpClient\ID <> tmpClientID And tmpClient\ID <> UDP_PlayerID Then tmpCmdNew.UDP_Cmd = New UDP_Cmd tmpCmdNew\info = tmpCmd\info tmpCmdNew\typ = 3 tmpCmdNew\ID = UDP_MsgEntID UDP_MsgEntID =( UDP_MsgEntID + 1 ) Mod 2147483647 tmpCmdNew\FromID = tmpCmd\FromID tmpCmdNew\ToID = tmpClient\ID If tmpCmdNew\toID > 0 And tmpCmdNew\toID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpCmdNew\toID ) = Null Or tmpCmdNew\toID = UDP_PlayerID Then tmpCmdNew\toID = -1 EndIf tmpCmdNew\MaxParameter = tmpCmd\MaxParameter For i = 0 To tmpCmdNew\MaxParameter tmpCmdNew\Parameter[ i ] = tmpCmd\Parameter[ i ] Next EndIf Next If UDP_ServerClient <> Null Then If tmpToID <> UDP_PlayerID And tmpToID <> -1 Then Delete tmpCmd Else If tmpCmdToID <> 0 And tmpCmdtoID <> -1 Then Delete tmpCmd EndIf EndIf EndIf EndIf EndIf Case UDP_EndMsg tmpID = ReadInt( UDP_Stream ) For tmpClient.UDP_Client = Each UDP_Client If tmpClient <> UDP_Player Then WriteByte( tmpClient\Stream, UDP_EndMsg ) WriteInt( tmpClient\Stream, tmpID ) SendUDPMsg( tmpClient\Stream, tmpClient\IP, tmpClient\Port ) EndIf Next If UDP_ClientInfo( tmpID ) <> Null Then Delete UDP_ClientInfo( tmpID ) tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_PlayerLeft tmpEvent\EventData$ = tmpID Case UDP_AnswerMsg tmpPlayerID = ReadInt( UDP_Stream ) tmpID = ReadInt( UDP_Stream ) If tmpPlayerID => 0 And tmpPlayerID <= UDP_MaxPlayers Then tmpClient.UDP_Client = UDP_ClientInfo( tmpPlayerID ) If tmpClient\connected = 1 If tmpClient <> Null Then For tmpCmd.UDP_Cmd = Each UDP_Cmd If tmpCmd\typ = 3 And tmpCmd\ID = tmpID Then Delete tmpCmd Exit EndIf Next EndIf EndIf EndIf Case UDP_NameMsg tmpID = ReadInt( UDP_Stream ) tmpNewName$ = ReadString( UDP_Stream ) If tmpID => 0 And tmpID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpID ) <> Null Then UDP_ClientInfo( tmpID )\changeName = 1 UDP_ClientInfo( tmpID )\newName$ = tmpNewName$ EndIf EndIf Case UDP_GetInformationMsg tmpIP = UDPMsgIP( UDP_Stream ) tmpPort = UDPMsgPort( UDP_Stream ) WriteByte( UDP_Stream, UDP_GetInformationMsg ) SendUDPMsg( UDP_Stream, tmpIP, tmpPort ) Case UDP_AnswerSendServerFile tmpPlayerID = ReadInt( UDP_Stream ) tmpID = ReadInt( UDP_Stream ) If tmpPlayerID => 0 And tmpPlayerID <= UDP_MaxPlayers If UDP_ClientInfo( tmpPlayerID ) <> Null Then If UDP_ClientInfo( tmpPlayerID )\serverfile <> Null Then If UDP_ClientInfo( tmpPlayerID )\serverfile\ID = tmpID Then UDP_ClientInfo( tmpPlayerID )\serverfile\sendfile = 1 EndIf EndIf EndIf EndIf Case UDP_SendServerFileBytes tmpPlayerID = ReadInt( UDP_Stream ) tmpByteID = ReadInt( UDP_Stream ) If tmpPlayerID => 0 And tmpPlayerID <= UDP_MaxPlayers If UDP_ClientInfo( tmpPlayerID ) <> Null Then If UDP_ClientInfo( tmpPlayerID )\serverfile\byteID = tmpByteID Then UDP_CLientInfo( tmpPlayerID )\serverfile\byteID = ( UDP_CLientInfo( tmpPlayerID )\serverfile\byteID + UDP_PackedSize ) If UDP_CLientInfo( tmpPlayerID )\serverfile\byteID > UDP_CLientInfo( tmpPlayerID )\serverfile\size Then UDP_CLientInfo( tmpPlayerID )\serverfile\byteID = UDP_CLientInfo( tmpPlayerID )\serverfile\size EndIf If Eof( UDP_ClientInfo( tmpPlayerID )\serverfile\datei ) = 1 Then UDP_ClientInfo( tmpPlayerID )\serverfile\sendfile = 2 Else For i = 0 To UDP_PackedSize-1 : PokeByte( UDP_CLientInfo( tmpPlayerID )\serverfile\byte, i, 0 ) : Next ReadBytes( UDP_CLientInfo( tmpPlayerID )\serverfile\byte, UDP_CLientInfo( tmpPlayerID )\serverfile\datei, 0, UDP_PackedSize ) UDP_CLientInfo( tmpPlayerID )\serverfile\sendms = 0 EndIf EndIf EndIf EndIf Case UDP_EndSendServerFile tmpPlayerID = ReadInt( UDP_Stream ) If UDP_ClientInfo( tmpPlayerID ) <> Null Then tmpClient.UDP_Client = UDP_CLientInfo( tmpPlayerID ) CloseFile tmpClient\serverfile\datei FreeBank tmpClient\serverfile\byte Delete tmpClient\serverfile For tmpfile.UDP_ServerFile = Each UDP_ServerFile If tmpFile\client = tmpClient And tmpFile\transfer = 1 Then tmpClient\serverfile = tmpFile Exit EndIf Next If tmpClient\serverfile = Null Then tmpClient\connected = 1 WriteByte( tmpClient\stream, UDP_EndSend ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) EndIf EndIf Case UDP_ReConnectMsg tmpPlayerID = ReadInt( UDP_Stream ) If UDP_ClientInfo( tmpPlayerID ) <> Null Then UDP_ClientInfo( tmpPlayerID )\recon = 0 UDP_ClientInfo( tmpPlayerID )\connected = 0 EndIf End Select Wend ;Ping updaten tmpSendPing = 0 If UDP_SendPingTime <= MilliSecs() Then tmpSendPing = 1 UDP_SendPingTime = MilliSecs() + UDP_PingSendTime EndIf ;Cmd's senden For tmpClient.UDP_Client = Each UDP_Client If tmpClient\connected = 1 Then ;Serverfiles senden If tmpClient\serverfile <> Null Then tmpPing = tmpClient\Ping * 4 If tmpPing < 64 tmpPing = 64 If tmpClient\serverfile\sendfile = 0 And tmpClient\serverfile\sendms <= MilliSecs() - tmpPing Then WriteByte( tmpClient\stream, UDP_StartSendServerFile ) WriteInt( tmpClient\stream, tmpCLient\serverFile\ID ) WriteInt( tmpClient\stream, tmpClient\serverFile\size ) WriteString( tmpClient\stream, UDP_ServerFilePath$+tmpClient\serverFile\filename$ ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\port ) tmpClient\serverfile\sendms = MilliSecs() EndIf If tmpClient\serverfile\sendfile = 1 And tmpClient\serverfile\sendms <= MilliSecs() - tmpPing Then WriteByte( tmpClient\stream, UDP_SendServerFileBytes ) WriteInt( tmpClient\stream, tmpClient\serverfile\byteID ) WriteBytes( tmpCLient\serverfile\byte, tmpClient\stream, 0, UDP_PackedSize ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) tmpClient\serverfile\sendms = MilliSecs() EndIf If tmpClient\serverfile\sendfile = 2 And tmpClient\serverfile\sendms <= MilliSecs() - tmpPing Then WriteByte( tmpClient\stream, UDP_EndSendServerFile ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\port ) tmpClient\serverfile\sendms = MilliSecs() EndIf EndIf If tmpSendPing = 1 Then ;Ping nachricht If tmpClient\connected = 1 If tmpClient <> UDP_Player Then If tmpClient\waitping = 1 Then tmpClient\Ping = (MilliSecs() - tmpClient\PingMS) /2 WriteByte( tmpClient\stream, UDP_PingMsg ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) tmpClient\PingMS = MilliSecs() tmpClient\WaitPing = 1 EndIf EndIf EndIf If tmpClient\changeName = 1 Then tmpClient\changename = 0 For tmpClientAll.UDP_Client = Each UDP_Client If tmpClientAll <> UDP_Player Then If tmpClientAll\stream <> 0 Then WriteByte( tmpClientAll\stream, UDP_NameMsg ) WriteInt( tmpClientAll\stream, tmpClient\ID ) WriteString( tmpClientAll\stream, tmpClient\newname$ ) SendUDPMsg( tmpClientAll\stream, tmpClientAll\IP, tmpClientAll\Port ) EndIf EndIf Next tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_ChangeName tmpEvent\EventData = tmpClient\ID tmpEvent\EventMsg$ = tmpClient\NewName$ tmpEvent\EventMsg2$ = tmpClient\name$ tmpClient\name$ = tmpClient\newname$ EndIf If tmpClient <> UDP_Player Then If tmpClient\recon = 1 Then tmpPing = tmpClient\Ping * 4 If tmpPing < 64 tmpPing = 64 If tmpClient\reconms <= MilliSecs() - tmpPing Then WriteByte( tmpClient\stream, UDP_ReConnectMsg ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) tmpClient\reconms = MilliSecs() EndIf EndIf For tmpCmd.UDP_Cmd = Each UDP_Cmd If tmpCmd\typ = 1 Then If ( tmpCmd\toID=tmpClient\ID Or tmpCmd\toID = -1 ) And tmpCmd\FromID <> tmpClient\ID Then WriteByte( tmpClient\stream, UDP_CmdMsg ) WriteByte( tmpClient\stream, 0 ) WriteInt( tmpClient\stream, tmpCmd\ID ) WriteInt( tmpClient\stream, tmpCmd\FromID ) For i = 0 To tmpCmd\MaxParameter Select tmpCmd\info\parameter[i] Case 0 : WriteInt( tmpClient\stream, tmpCmd\parameter[ i ] ) Case 1 : WriteFloat( tmpClient\stream, tmpCmd\parameter[ i ] ) Case 2 : WriteString( tmpClient\stream, tmpCmd\parameter[ i ] ) Case 3 : WriteByte( tmpClient\stream, tmpCmd\parameter[ i ] ) Case 4 : WriteShort( tmpClient\stream, tmpCmd\parameter[ i ] ) Case 5 tmpBankSize = BankSize( tmpCmd\parameter[ i ] ) WriteInt( tmpClient\stream, tmpBankSize ) For j = 0 To tmpBankSize-1 WriteByte( tmpClient\stream, PeekByte( tmpCmd\Parameter[ i ], j ) ) Next End Select Next SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) tmpCmd\del = 1 EndIf EndIf If tmpCmd\typ = 3 And tmpCmd\del <> 1 Then If ( tmpCmd\toID=tmpClient\ID ) Or tmpCmd\toID = -1 Then WriteByte( tmpClient\stream, UDP_CmdMsg ) WriteByte( tmpClient\stream, 1 ) WriteInt( tmpClient\stream, tmpCmd\ID ) WriteInt( tmpClient\stream, tmpCmd\info\ID ) WriteInt( tmpClient\stream, tmpCmd\FromID ) For i = 0 To tmpCmd\MaxParameter Select tmpCmd\info\parameter[i] Case 0 : WriteInt( tmpClient\stream, tmpCmd\parameter[i] ) Case 1 : WriteFloat( tmpClient\stream, tmpCmd\parameter[i] ) Case 2 : WriteString( tmpClient\stream, tmpCmd\parameter[i] ) Case 3 : WriteByte( tmpClient\stream, tmpCmd\parameter[i] ) Case 4 : WriteShort( tmpClient\stream, tmpCmd\parameter[i] ) Case 5 tmpBankSize = BankSize( tmpCmd\parameter[ i ] ) WriteInt( tmpClient\stream, tmpBankSize ) For j = 0 To tmpBankSize-1 WriteByte( tmpClient\stream, PeekByte( tmpCmd\Parameter[ i ], j ) ) Next End Select Next SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) tmpCmd\del = 2 tmpCmd\sendms = MilliSecs() EndIf EndIf Next EndIf If tmpClient\kick = 1 Then If tmpClient\stream <> UDP_Stream Then CloseUDPStream( tmpClient\stream ) Delete tmpClient EndIf EndIf Next For tmpCmd.UDP_Cmd = Each UDP_Cmd tmpDel = 0 If tmpCmd\typ = 1 And tmpCmd\del = 1 Then tmpDel = 1 If tmpCmd\typ = 3 Then If tmpCmd\del = 2 Then tmpCmd\del = 1 If tmpCmd\del = 1 Then tmpPing = 512 If tmpCmd\toID > 0 And tmpCmd\toID <= UDP_MaxPlayers If UDP_ClientInfo( tmpCmd\toID ) <> Null Then tmpPing = UDP_ClientInfo( tmpCmd\toID )\Ping * 4 If tmpPing < 64 tmpPing = 64 EndIf EndIf If MilliSecs()-tmpCmd\sendms > tmpPing Then tmpCmd\del = 0 : tmpCmd\send = tmpCmd\send + 1 If tmpCmd\send > 3 Then tmpDel = 1 EndIf EndIf EndIf If tmpCmd\typ = 4 If MilliSecs()-tmpCmd\sendms => 20000 Then tmpDel = 1 EndIf If tmpDel = 1 Then Delete tmpCmd Next For tmpBan.UDP_Ban = Each UDP_Ban If tmpBan\time > 0 Then If MilliSecs() - tmpBan\ms => tmpBan\time Then Delete tmpBan EndIf Next EndIf EndIf ;Client Aufgabenbereich If UDP_Host = 0 Then ;Auf Verbunden / Nicht verbunden prüfen If UDP_Connected = 0 Then ;Wenn eine Anfrage geschickt worden ist ... If UDP_Connect = 1 ;Anfrage an den Server schicken DebugLog "CON" If UDP_SendJoinMsgMs <= MilliSecs() - 1000 Then WriteByte( UDP_Stream, UDP_JoinMsg ) WriteByte( UDP_Stream, UDP_ChangeHostConnect ) If UDP_ChangeHostConnect Then WriteInt( UDP_Stream, UDP_PlayerID ) EndIf SendUDPMsg( UDP_Stream, UDP_ServerIP, UDP_ServerPort) UDP_SendJoinMsgMs = MilliSecs() EndIf While RecvUDPMsg( UDP_Stream ) tmpByte = ReadByte( UDP_Stream ) Select tmpByte Case UDP_JoinMsg ;Bestätigung vom Server tmpGetJoin = ReadByte( UDP_Stream ) If tmpGetJoin = 0 Then UDP_MaxPlayers = ReadInt( UDP_Stream ) UDP_Dediziert = ReadByte( UDP_Stream ) UDP_NetMode = ReadByte( UDP_Stream ) If UDP_NetMode = UDP_NetGame Then UDP_ServerStream = UDP_Stream Else UDP_ServerStream = CreateUDPStream( ) EndIf Dim UDP_ClientInfo.UDP_Client( UDP_MaxPlayers ) UDP_PlayerID = ReadInt( UDP_Stream ) UDP_ServerID = ReadInt( UDP_Stream ) UDP_Connected = ReadByte( UDP_Stream ) ;Alle vorhandenen Clienten empfangen tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_ConnectedServer While Not Eof( UDP_Stream ) tmpClient.UDP_Client = New UDP_Client tmpClient\ID = ReadInt( UDP_Stream ) tmpClient\IP = ReadInt( UDP_Stream ) tmpClient\Port = ReadInt( UDP_Stream ) tmpClient\Name$ = ReadString( UDP_Stream ) tmpClient\connected = ReadByte( UDP_Stream ) tmpClient\stream = UDP_Stream UDP_ClientInfo( tmpClient\ID ) = tmpClient If tmpClient\ID = UDP_PlayerID Then UDP_Player.UDP_Client = tmpClient ;tmpClient\Port = UDPStreamPort(UDP_Stream) EndIf tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_NewPlayer tmpEvent\EventData$ = tmpClient\ID If (UDP_Dezidiert = 0 And tmpClient\ID = UDP_ServerID) Then tmpClient\IP = UDP_ServerIP tmpClient\Port = UDP_ServerPort tmpClient\host = 1 If UDP_NetMode = UDP_LanGame Then tmpClient\stream = CreateUDPStream( ) : UDP_ServerStream = tmpClient\stream UDP_ServerClient = tmpClient EndIf Wend UDP_Connect = 0 UDP_Connected = 1 Else UDP_Connect = 0 UDP_Connected = 1 EndIf Case UDP_NotJoinMsg; Fehler, keine connection tmpID = ReadByte( UDP_Stream ) UDP_Connect = 0 If tmpID = 0 tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_NoConnection tmpEvent\EventData = 0 Else tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_NoConnection tmpEvent\EventData = 1 tmpEvent\EventMsg2$ = ReadInt( UDP_Stream ) tmpEvent\EventMsg$ = ReadString( UDP_Stream ) EndIf End Select Wend ElseIf UDP_Connect = 2 While RecvUDPMsg( UDP_Stream ) tmpByte = ReadByte( UDP_Stream ) Select tmpByte Case UDP_GetInformationMsg tmpServer.UDP_Server = New UDP_Server tmpServer\IP = UDPMsgIP( UDP_Stream ) tmpServer\Port = UDPMsgPort( UDP_Stream ) tmpServer\Ping = ( MilliSecs( ) - UDP_ServerGlobalPing ) / 2.0 End Select Wend EndIf ElseIf UDP_Connected = 1 UDP_Connect = 0 While RecvUDPMsg( UDP_Stream ) ;NAchrichten empfangen tmpByte = ReadByte( UDP_Stream ); Header byte auslesen und überprüfen Select tmpByte Case UDP_JoinMsg ;Neuer Spieler tmpID = ReadInt( UDP_Stream ) tmpIP = ReadInt( UDP_Stream ) tmpPort = ReadInt( UDP_Stream ) If tmpID => 0 And tmpID <= UDP_MaxPlayers ;Clients überpürfen tmpGet = 0 For tmpCLient.UDP_Client = Each UDP_Client If tmpClient\IP = tmpIP And tmpClient\Port = tmpPort Then tmpGet = 1 : Exit Next If tmpGet = 0 Then tmpClient.UDP_Client = New UDP_Client tmpClient\ID = tmpID tmpClient\IP = tmpIP tmpClient\Port = tmpPort tmpClient\name$ = "unnamed" tmpClient\Stream = UDP_Stream tmpClient\host = 0 tmpClient\connected = 1 UDP_ClientInfo.UDP_Client( tmpClient\ID ) = tmpClient tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_NewPlayer tmpEvent\EventData$ = tmpClient\ID EndIf Case UDP_PingMsg ;Ping-Anfrage vom Server WriteByte( UDP_ServerStream, UDP_PingMsg ) WriteInt( UDP_ServerStream, UDP_PlayerID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) If UDP_ServerClient <> Null Then ;If UDP_ServerClient\WaitPing = 0 Then UDP_ServerClient\PingMs = MilliSecs() UDP_ServerClient\WaitPing = 1 UDP_GetPingFromServer = 0 ;EndIf EndIf Case UDP_PingDataMsg ;PingDaten der Spieler While ReadByte( UDP_Stream ) = 1 tmpID = ReadInt( UDP_Stream ) tmpPing = ReadInt( UDP_Stream ) tmpConnected = ReadByte( UDP_Stream ) If tmpID => 0 And tmpID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpID ) <> Null Then UDP_ClientInfo.UDP_Client( tmpID )\Ping = tmpPing UDP_ClientInfo.UDP_Client( tmpID )\Connected = tmpConnected EndIf EndIf Wend If UDP_ServerClient <> Null Then ;If UDP_ServerClient\WaitPing = 1 UDP_ServerClient\Ping = ( MilliSecs() - UDP_ServerClient\PingMs ) / 2 UDP_ServerClient\WaitPing = 0 UDP_GetPingFromServer = MilliSecs() ;EndIf EndIf Case UDP_CmdMsg tmpSafety = ReadByte( UDP_Stream ) If tmpSafety = 1 Then tmpID = ReadInt( UDP_Stream ) tmpCmdID = ReadInt( UDP_Stream ) tmpFromID = ReadInt( UDP_Stream ) For tmpCmdInfo.UDP_Cmd = Each UDP_Cmd If tmpCmdInfo\typ = 0 And tmpCmdInfo\ID = tmpCmdID Then Exit Next tmpGet = 0 If tmpSafety = 1 Then For tmpCmd.UDP_Cmd = Each UDP_Cmd If tmpCmd\typ = 4 And tmpCmd\ID = tmpID Then tmpGet = 1: Exit Next EndIf If tmpGet = 0 Then tmpCmd.UDP_Cmd = New UDP_Cmd If tmpCmd <> Null And tmpCmdInfo <> Null Then If tmpSafety = 0 Then tmpCmd\Typ = 2 tmpCmd\ID = tmpCmdID Else tmpCmd\typ = 2 tmpCmd\ID = tmpID tmpCmd\sendms = MilliSecs() If tmpGet = 0 tmpCmdNew.UDP_Cmd = New UDP_Cmd tmpCmdNew\Typ = 4 tmpCmdNew\ID = tmpID EndIf EndIf tmpCmd\FromID = tmpFromID tmpCmd\info = tmpCmdInfo tmpCmd\MaxParameter = tmpCmdInfo\MaxParameter For i = 0 To tmpCmdInfo\MaxParameter Select tmpCmdInfo\parameter[ i ] Case 0 : tmpCmd\parameter[ i ] = ReadInt( UDP_Stream ) Case 1 : tmpCmd\parameter[ i ] = ReadFloat( UDP_Stream ) Case 2 : tmpCmd\parameter[ i ] = ReadString( UDP_Stream ) Case 3 : tmpCmd\parameter[ i ] = ReadByte( UDP_Stream ) Case 4 : tmpCmd\parameter[ i ] = ReadShort( UDP_Stream ) Case 5 tmpBankSize = ReadInt( UDP_Stream ) tmpCmd\bank = CreateBank( tmpBankSize ) For j = 0 To tmpBankSize-1 tmpByte = ReadByte( UDP_Stream ) PokeByte( tmpCmd\bank, j, tmpByte ) Next tmpCmd\parameter[ i ] = tmpCmd\bank End Select Next EndIf If tmpSafety = 1 WriteByte( UDP_ServerStream, UDP_AnswerMsg ) WriteInt( UDP_ServerStream, UDP_PlayerID ) WriteInt( UDP_ServerStream, tmpID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) EndIf Case UDP_EndMsg tmpID = ReadInt( UDP_Stream ) If UDP_ClientInfo( tmpID ) <> Null Then Delete UDP_ClientInfo( tmpID ) If tmpID = 0 Then UDP_Connected = 0 If UDP_ServerStream <> UDP_Stream Then CloseUDPStream( UDP_ServerStream ) CloseUDPStream( UDP_Stream ) Delete Each UDP_Client EndIf tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_PlayerLeft tmpEvent\EventData$ = tmpID Return Case UDP_AnswerMsg tmpID = ReadInt( UDP_Stream ) For tmpCmd.UDP_Cmd = Each UDP_Cmd If tmpCmd\typ = 3 And tmpCmd\ID = tmpID Then Delete tmpCmd Exit EndIf Next Case UDP_KickMsg tmpID = ReadInt( UDP_Stream ) tmpReason$ = ReadString( UDP_Stream ) If tmpID = UDP_PlayerID Then UDP_Connected = 0 If UDP_ServerStream <> UDP_Stream Then CloseUDPStream( UDP_ServerStream ) CloseUDPStream( UDP_Stream ) Delete Each UDP_CLient Else If UDP_ClientInfo( tmpID ) <> Null Then Delete UDP_ClientInfo( tmpID ) EndIf tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_PlayerKicked tmpEvent\EventData = tmpID tmpEvent\EventMsg = tmpReason Return Case UDP_BannMsg tmpID = ReadInt( UDP_Stream ) tmpTime = ReadInt( UDP_Stream ) tmpReason$ = ReadString( UDP_Stream ) If tmpID = UDP_PlayerID Then UDP_Connected = 0 If UDP_ServerStream <> UDP_Stream Then CloseUDPStream( UDP_ServerStream ) CloseUDPStream( UDP_Stream ) Delete Each UDP_CLient Else If UDP_ClientInfo( tmpID ) <> Null Then Delete UDP_ClientInfo( tmpID ) EndIf tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_PlayerBanned tmpEvent\EventData = tmpID tmpEvent\EventMsg$ = tmpReason tmpEvent\EventMsg2$ = tmpTime Return Case UDP_NameMsg tmpID = ReadInt( UDP_Stream ) tmpName$ = ReadString( UDP_Stream ) If UDP_ClientInfo( tmpID ) <> Null tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_ChangeName tmpEvent\EventData = tmpID tmpEvent\EventMsg$ = tmpName$ tmpEvent\EventMsg2$ = UDP_CLientInfo( tmpID )\name$ UDP_CLientInfo( tmpID )\name$ = tmpName$ EndIf Case UDP_ChangeHostMsg tmpMe = ReadByte( UDP_Stream ) If tmpMe = 1 Then UDP_NetMode = ReadByte( UDP_Stream ) UDP_CmdOn = ReadByte( UDP_Stream ) If UDP_CmdOn = 1 Then tmpCmdID = ReadInt( UDP_Stream ) tmpCmd.UDP_Cmd = New UDP_Cmd For tmpCmdInfo.UDP_Cmd = Each UDP_Cmd If tmpCmdInfo\typ = 0 And tmpCmdInfo\ID = tmpCmdID Then Exit Next tmpCmd\Typ = 2 tmpCmd\ID = tmpCmdID tmpCmd\info = tmpCmdInfo tmpCmd\MaxParameter = tmpCmdInfo\MaxParameter For i = 0 To tmpCmdInfo\MaxParameter Select tmpCmdInfo\parameter[ i ] Case 0 : tmpCmd\parameter[ i ] = ReadInt( UDP_Stream ) Case 1 : tmpCmd\parameter[ i ] = ReadFloat( UDP_Stream ) Case 2 : tmpCmd\parameter[ i ] = ReadString( UDP_Stream ) Case 3 : tmpCmd\parameter[ i ] = ReadByte( UDP_Stream ) Case 4 : tmpCmd\parameter[ i ] = ReadShort( UDP_Stream ) Case 5 tmpBankSize = ReadInt( UDP_Stream ) tmpCmd\bank = CreateBank( tmpBankSize ) For j = 0 To tmpBankSize-1 tmpByte = ReadByte( UDP_Stream ) PokeByte( tmpCmd\bank, j, tmpByte ) Next tmpCmd\parameter[ i ] = tmpCmd\bank End Select Next EndIf ; Delete Each UDP_Client For tmpClient.UDP_CLient = Each UDP_Client If tmpClient\ID = UDP_PlayerID Then tmpClient\Host = 1 UDP_ServerClient = tmpCLient UDP_ServerIP = tmpClient\IP UDP_ServerPort = tmpClient\Port UDP_ServerID = tmpClient\ID Else tmpClient\Host = 0 EndIf tmpClient\waitping = 0 Next UDP_Host = 1 For tmpClient.UDP_Client = Each UDP_Client tmpClient\stream = UDP_Stream If UDP_NetMode = UDP_LanGame Then tmpClient\stream = CreateUDPStream() EndIf Next Else tmpID = ReadInt( UDP_Stream ) If tmpID => 0 And tmpID <= UDP_MaxPlayers If UDP_ClientInfo( tmpID ) <> Null Then For tmpClient.UDP_Client = Each UDP_Client If tmpClient\host = 1 Then tmpClient\host = 0 : Exit Next UDP_ClientInfo( tmpID )\host = 1 UDP_ServerPort = UDP_ClientInfo( tmpID )\port UDP_ServerIP = UDP_ClientInfo( tmpID )\IP UDP_ServerClient = UDP_ClientInfo( tmpID ) UDP_ServerID = UDP_ClientInfo( tmpID )\ID UDP_Connect = 1 UDP_Connected = 0 UDP_ChangeHostConnect = 1 EndIf EndIf EndIf Case UDP_StartSendServerFile tmpID = ReadInt( UDP_Stream ) tmpGet = 0 For tmpServerFile.UDP_ServerFile = Each UDP_ServerFile If tmpID = tmpServerFile\ID Then get = 1 : Exit Next If get = 0 Then tmpServerFile.UDP_ServerFile = New UDP_ServerFile tmpServerFile\ID = tmpID tmpServerFile\size = ReadInt( UDP_Stream ) tmpServerFile\filename$ = ReadString( UDP_Stream ) tmpServerFile\transfer = 1 tmpServerFile\byte = CreateBank( UDP_PackedSize ) If tmpServerFile\datei = 0 Then tmpServerFile\datei = UDP_CreateFile( tmpServerFile\filename$ ) EndIf UDP_ServerFile = tmpServerFile WriteByte( UDP_ServerStream, UDP_AnswerSendServerFile ) WriteInt( UDP_ServerStream, UDP_PlayerID ) WriteInt( UDP_ServerStream, tmpID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) Case UDP_SendServerFileBytes tmpByteID = ReadInt( UDP_Stream ) If UDP_ServerFile <> Null Then If UDP_ServerFile\byteID <> tmpByteID Then ReadBytes( UDP_ServerFile\byte, UDP_Stream, 0, UDP_PackedSize ) If UDP_ServerFile\datei <> 0 Then WriteBytes( UDP_ServerFile\byte, UDP_ServerFile\datei, 0, UDP_PackedSize ) UDP_ServerFile\byteID = tmpByteID EndIf EndIf WriteByte( UDP_ServerStream, UDP_SendServerFileBytes ) WriteInt( UDP_ServerStream, UDP_PlayerID ) WriteInt( UDP_ServerStream, tmpByteID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) Case UDP_EndSendServerFile If UDP_ServerFile <> Null Then If UDP_ServerFile\datei <> 0 Then CloseFile( UDP_ServerFile\datei ) FreeBank( UDP_ServerFile\byte ) Delete UDP_ServerFile EndIf WriteByte( UDP_ServerStream, UDP_EndSendServerFile ) WriteInt( UDP_ServerStream, UDP_PlayerID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) Case UDP_EndSend UDP_Connected = 1 Case UDP_ReConnectMsg UDP_ReConnect( ) WriteByte( UDP_ServerStream, UDP_ReConnectMsg ) WriteInt( UDP_ServerStream, UDP_PlayerID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) End Select Wend If UDP_ServerClient <> Null Then tmpSendPing = 0 If UDP_SendPingTime <= MilliSecs() Then tmpSendPing = 1 UDP_SendPingTime = MilliSecs() + UDP_PingSendTime EndIf If UDP_GetPingFromServer > 0 If (MilliSecs()-UDP_GetPingFromServer) > UDP_PingSendTime And tmpSendPing = 1 Then UDP_ServerClient\Ping = ( MilliSecs() - UDP_GetPingFromServer ) / 2 EndIf EndIf EndIf If UDP_ChangeName = 1 Then UDP_ChangeName = 0 WriteByte( UDP_ServerStream, UDP_NameMsg ) WriteInt( UDP_ServerStream, UDP_PlayerID ) WriteString( UDP_ServerStream, UDP_NewName$ ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) EndIf For tmpCmd.UDP_Cmd = Each UDP_Cmd tmpDel = 0 If tmpCmd\typ = 4 If MilliSecs()-tmpCmd\sendms => 20000 Then tmpDel = 1 EndIf If tmpCmd\typ = 1 Then WriteByte( UDP_ServerStream, UDP_CmdMsg ) WriteByte( UDP_ServerStream, 0 ) WriteInt( UDP_ServerStream, UDP_PlayerID ) WriteInt( UDP_ServerStream, tmpCmd\ID ) WriteInt( UDP_ServerStream, tmpCmd\toID ) For i = 0 To tmpCmd\MaxParameter Select tmpCmd\info\parameter[i] Case 0 : WriteInt( UDP_ServerStream, tmpCmd\parameter[i] ) Case 1 : WriteFloat( UDP_ServerStream, tmpCmd\parameter[i] ) Case 2 : WriteString( UDP_ServerStream, tmpCmd\parameter[i] ) Case 3 : WriteByte( UDP_ServerStream, tmpCmd\parameter[i] ) Case 4 : WriteShort( UDP_ServerStream, tmpCmd\parameter[i] ) Case 5 tmpBankSize = BankSize( tmpCmd\parameter[ i ] ) WriteInt( UDP_ServerStream, tmpBankSize ) For j = 0 To tmpBankSize-1 WriteByte( UDP_ServerStream, PeekByte( tmpCmd\Parameter[ i ], j ) ) Next End Select Next SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) tmpDel = 1 EndIf If tmpCmd\typ = 3 Then If tmpCmd\del = 0 Then WriteByte( UDP_ServerStream, UDP_CmdMsg ) WriteByte( UDP_ServerStream, 1 ) WriteInt( UDP_ServerStream, UDP_PlayerID ) WriteInt( UDP_ServerStream, tmpCmd\ID ) WriteInt( UDP_ServerStream, tmpCmd\info\ID ) WriteInt( UDP_ServerStream, tmpCmd\toID ) For i = 0 To tmpCmd\MaxParameter Select tmpCmd\info\parameter[i] Case 0 : WriteInt( UDP_ServerStream, tmpCmd\parameter[i] ) Case 1 : WriteFloat( UDP_ServerStream, tmpCmd\parameter[i] ) Case 2 : WriteString( UDP_ServerStream, tmpCmd\parameter[i] ) Case 3 : WriteByte( UDP_ServerStream, tmpCmd\parameter[i] ) Case 4 : WriteShort( UDP_ServerStream, tmpCmd\parameter[i] ) Case 5 tmpBankSize = BankSize( tmpCmd\parameter[ i ] ) WriteInt( UDP_ServerStream, tmpBankSize ) For j = 0 To tmpBankSize-1 WriteByte( UDP_ServerStream, PeekByte( tmpCmd\Parameter[ i ], j ) ) Next End Select Next SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) tmpCmd\del = 1 tmpCmd\sendms = MilliSecs() Else tmpPing = 512 If UDP_ServerClient <> Null Then tmpPing = UDP_ServerClient\Ping * 4 If tmpPing < 64 tmpPing = 64 EndIf If MilliSecs()-tmpCmd\sendms > tmpPing Then tmpCmd\del = 0 tmpCmd\send = tmpCmd\send + 1 If tmpCmd\send > 3 Then tmpDel = 1 EndIf EndIf EndIf If tmpDel = 1 Then Delete tmpCmd Next EndIf EndIf End Function Function UDP_AddCmd( tmpParameterList$ ) tmpID = 1 For tmpCmdAll.UDP_Cmd = Each UDP_Cmd If tmpCmdAll\typ = 0 And tmpCmdAll\ID => tmpID Then tmpID = tmpCmdAll\ID + 1 Next tmpCmd.UDP_Cmd = New UDP_Cmd tmpCmd\ID = tmpID tmpCmd\typ = 0 ;String Parsen If Not ( Mid( tmpParameterList$, Len( tmpParameterList$ ), 1 ) = ",") Then tmpParameterList$ = tmpParameterList$ + "," tmpParameterList$ = Replace( Trim( Lower( tmpParameterList$ ) ), " ", "" ) tmpCount = -1 Repeat tmpKomma = Instr( tmpParameterList$, "," ) If tmpKomma <> 0 tmpParameter$ = Mid( tmpParameterList$, 1, tmpKomma-1 ) tmpCount = tmpCount + 1 Select tmpParameter$ Case "int" : tmpCmd\parameter[ tmpCount ] = 0 Case "float" : tmpCmd\parameter[ tmpCount ] = 1 Case "string" : tmpCmd\parameter[ tmpCount ] = 2 Case "byte" : tmpCmd\parameter[ tmpCount ] = 3 Case "short" : tmpCmd\parameter[ tmpCount ] = 4 Case "bank" : tmpCmd\parameter[ tmpCount ] = 5 End Select tmpParameterList$ = Mid( tmpParameterList$, tmpKomma+1, Len( tmpParameterList ) ) EndIf Until tmpKomma = 0 Or tmpCount = UDP_MaxParameter tmpCmd\MaxParameter = tmpCount Return Handle( tmpCmd ) End Function Function UDP_SendCmd( tmpCmdHandle, tmpParameterList$, tmpSafety=0, tmpToID=-1 ) Local tmpCmdOb.UDP_Cmd = Object.UDP_Cmd( tmpCmdHandle ) Local tmpKomma = 0, tmpKomma2 = 0 Local tmpCmd.UDP_Cmd = Null If tmpCmdOb\MaxParameter > 0 Then If Not ( Mid( tmpParameterList$, Len( tmpParameterList$ ), 1 ) = ",") Then tmpParameterList$ = tmpParameterList$ + "," For i = 0 To tmpCmdOb\MaxParameter tmpPlus = 0 If tmpCmdOb\Parameter[ i ] <> 2 Then tmpKomma2 = Instr( tmpParameterList$, ",", tmpKomma+1 ) Else tmp34_1 = Instr( tmpParameterList$, Chr(34), tmpKomma+1 ) tmp34_2 = Instr( tmpParameterList$, Chr(34), tmp34_1+1 ) If tmp34_1 <> 0 And tmp34_2 <> 0 Then tmpKomma = tmp34_1 tmpKomma2 = tmp34_2 tmpPlus = 1 Else tmpKomma2 = Instr( tmpParameterList$, ",", tmpKomma+1 ) EndIf EndIf tmpParameter$ = Mid( tmpParameterList$, tmpKomma+1 , tmpKomma2 - tmpKomma - 1 ) tmpKomma = tmpKomma2 + tmpPlus UDP_tmpParameter$( i ) = tmpParameter Next Else UDP_tmpParameter$( 0 ) = tmpParameterList$ EndIf If tmpSafety = 0 Then tmpCmd.UDP_Cmd = New UDP_Cmd tmpCmd\info = tmpCmdOb tmpCmd\typ = 1 tmpCmd\ID = tmpCmdOb\ID tmpCmd\FromID = UDP_PlayerID tmpCmd\ToID = tmpToID If tmpCmd\toID > 0 And tmpCmd\toID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpCmd\toID ) = Null Or tmpCmd\toID = UDP_PlayerID Then tmpCmd\toID = -1 ElseIf tmpCmd\toID < 0 Or tmpCmd\toID > UDP_MaxPlayers tmpCmd\toID = -1 EndIf ;String übergeben For i = 0 To tmpCmd\info\MaxParameter tmpCmd\Parameter[ i ] = UDP_TmpParameter$( i ) Next tmpCmd\MaxParameter = tmpCmd\info\MaxParameter Else If UDP_Host = 1 For tmpClient.UDP_Client = Each UDP_Client If ( ( tmpToID > 0 And tmpToID <= UDP_MaxPlayers ) And tmpClient\ID = tmpToID ) Or ( ( tmpToID <= 0 Or tmpToID > UDP_MaxPlayers ) And tmpClient <> UDP_Player ) Then tmpCmd.UDP_Cmd = New UDP_Cmd tmpCmd\info = tmpCmdOb tmpCmd\typ = 3 tmpCmd\ID = UDP_MsgEntID UDP_MsgEntID =( UDP_MsgEntID + 1 ) Mod 2147483647 tmpCmd\FromID = UDP_PlayerID tmpCmd\ToID = tmpClient\ID If tmpCmd\toID > 0 And tmpCmd\toID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpCmd\toID ) = Null Or tmpCmd\toID = UDP_PlayerID Then tmpCmd\toID = -1 ElseIf tmpCmd\toID < 0 Or tmpCmd\toID > UDP_MaxPlayers tmpCmd\toID = -1 EndIf ;String übergeben For i = 0 To tmpCmd\info\MaxParameter tmpCmd\Parameter[ i ] = UDP_TmpParameter$( i ) Next tmpCmd\MaxParameter = tmpCmd\info\MaxParameter EndIf Next Else tmpCmdOb.UDP_Cmd = Object.UDP_Cmd( tmpCmdHandle ) tmpCmd.UDP_Cmd = New UDP_Cmd tmpCmd\info = tmpCmdOb tmpCmd\typ = 3 tmpCmd\ID = UDP_MsgEntID UDP_MsgEntID =( UDP_MsgEntID + 1 ) Mod 2147483647 tmpCmd\FromID = UDP_PlayerID tmpCmd\ToID = tmpToID If tmpCmd\toID > 0 And tmpCmd\toID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpCmd\toID ) = Null Or tmpCmd\toID = UDP_PlayerID Then tmpCmd\toID = -1 ElseIf tmpCmd\toID < 0 Or tmpCmd\toID > UDP_MaxPlayers tmpCmd\toID = -1 EndIf ;String übergeben For i = 0 To tmpCmd\info\MaxParameter tmpCmd\Parameter[ i ] = UDP_TmpParameter$( i ) Next tmpCmd\MaxParameter = tmpCmd\info\MaxParameter EndIf EndIf End Function Function UDP_RecvCmd( ) For tmpCmd.UDP_Cmd = Each UDP_Cmd If tmpCmd\typ = 2 Then tmpCmdOb.UDP_Cmd = Object.UDP_Cmd( UDP_CmdID ) For i = 0 To tmpCmd\MaxParameter If tmpCmdOb <> Null Then If tmpCmdOb\Parameter[ i ] = 5 Then FreeBank( UDP_CmdParameter( i ) ) UDP_CmdParameter( i ) = 0 EndIf EndIf UDP_CmdParameter( i ) = tmpCmd\Parameter[ i ] Next UDP_CmdID = Handle( tmpCmd\info ) UDP_CmdMaxParameter = tmpCmd\MaxParameter UDP_CmdFromID = tmpCmd\FromID Delete tmpCmd Return 1 EndIf Next Return 0 End Function Function UDP_End( ) If UDP_Host = 1 Then If UDP_Connected = 1 For tmpClient.UDP_Client = Each UDP_Client If tmpClient <> UDP_Player Then WriteByte( tmpClient\Stream, UDP_EndMsg ) WriteInt( tmpClient\Stream, 0 ) SendUDPMsg( tmpClient\Stream, tmpClient\IP, tmpClient\Port ) If tmpClient\stream <> UDP_Stream Then CloseUDPStream( tmpClient\stream ) Delete tmpClient.UDP_Client EndIf Next CloseUDPStream( UDP_Stream ) EndIf Else If UDP_Connected = 1 If UDP_ServerPing < 64 Then UDP_ServerPing = 64 For i = 1 To 5 WriteByte( UDP_ServerStream, UDP_EndMsg ) WriteInt( UDP_ServerStream, UDP_PlayerID ) SendUDPMsg( UDP_ServerStream, UDP_ServerIP, UDP_ServerPort ) ms = MilliSecs() tmpGet = 0 Repeat If RecvUDPMsg( UDP_Stream ) Then byte = ReadByte( UDP_Stream ) If byte = UDP_End Then tmpID = ReadInt( UDP_Stream ) If tmpID = UDP_PlayerID Then tmpGet = 1 : Exit EndIf EndIf Until ms <= MilliSecs() - UDP_ServerPing If tmpGet = 1 Then Exit Next If UDP_ServerStream <> UDP_Stream Then CloseUDPStream( UDP_ServerStream ) CloseUDPStream( UDP_Stream ) Delete Each UDP_Client EndIf EndIf End Function Function UDP_GetEvent( ) tmpEvent.UDP_Event = First UDP_Event If tmpEvent = Null Then Return 0 UDP_EventID = tmpEvent\Event UDP_EventData = tmpEvent\EventData$ UDP_EventMsg = tmpEvent\EventMsg$ UDP_EventMsg2$ = tmpEvent\EventMsg2$ Delete tmpEvent Return 1 End Function Function UDP_KickPlayer( tmpPlayerID$, tmpReason$="" ) If UDP_Host = 0 Return tmpID = 0 If Int( tmpPlayerID ) = tmpPlayerID Then tmpGet = 0 For tmpClient.UDP_Client = Each UDP_Client If Int( tmpPlayerID ) = tmpClient\ID Then tmpID = tmpClient\ID : Exit If Int( tmpPlayerID ) = tmpClient\IP Then UDP_KickPlayer( tmpClient\ID, tmpReason$ ) tmpGet = 1 EndIf Next If tmpGet = 1 Then Return Else For tmpClient.UDP_Client = Each UDP_Client If tmpClient\IP = UDP_IntIP( tmpPlayerID ) Then UDP_KickPlayer( tmpClient\ID, tmpReason$ ) EndIf Next Return EndIf If tmpID = 0 Return For tmpClient.UDP_Client = Each UDP_Client If tmpClient <> UDP_Player Then WriteByte( tmpClient\stream, UDP_KickMsg ) WriteInt( tmpClient\stream, tmpID ) WriteString( tmpClient\stream, tmpReason ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) EndIf Next If UDP_ClientInfo( tmpID ) <> Null UDP_ClientInfo( tmpID )\kick = 1 EndIf tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = UDP_EventPlayerKicked tmpEvent\EventData$ = tmpID tmpEvent\EventMsg$ = tmpReason End Function Function UDP_BannPlayer( tmpPlayerID$, tmpTime=0, tmpReason$="" ) If UDP_Host = 0 Return If Int( tmpPlayerID ) = tmpPlayerID Then tmpIP = 0 tmpID = 0 For tmpClient.UDP_Client = Each UDP_Client If Int( tmpPlayerID ) = tmpClient\ID Then tmpIP = tmpClient\IP tmpID = tmpClient\ID Exit EndIf If Int( tmpPlayerID ) = tmpClient\IP Then UDP_BannPlayer( tmpClient\ID, tmpTime, tmpReason$ ) EndIf Next If tmpIP = 0 Return tmpGetBann = 0 For tmpBanCheck.UDP_Ban = Each UDP_Ban If tmpBanCheck\IP = tmpIP Then tmpBanCheck\time = tmpTime tmpBanCheck\ms = MilliSecs() tmpGetBann = 1 EndIf Next If tmpGetBann = 0 tmpBan.UDP_ban = New UDP_Ban tmpBan\IP = tmpIP tmpBan\time = tmpTime If tmpBan\Time < 0 Then tmpBan\time = 0 : Else : tmpBan\ms = MilliSecs() tmpBan\reason = tmpReason EndIf If UDP_ClientInfo( tmpID ) <> Null UDP_ClientInfo( tmpID )\kick = 1 EndIf For tmpClient.UDP_Client = Each UDP_Client If tmpClient <> UDP_Player Then WriteByte( tmpClient\stream, UDP_BannMsg ) WriteInt( tmpClient\stream, tmpID ) WriteInt( tmpClient\stream, tmpTime ) WriteString( tmpClient\stream, tmpReason$ ) SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) EndIf Next tmpEvent.UDP_Event = New UDP_Event tmpEvent\Event = Event_PlayerBanned tmpEvent\EventData = tmpID tmpEvent\EventMsg$ = tmpReason tmpEvent\EventMsg2$ = tmpTime Else tmpBan.UDP_ban = New UDP_Ban tmpBan\IP = UDP_IntIP( tmpPlayerID ) tmpBan\time = tmpTime If tmpBan\Time < 0 Then tmpBan\time = 0 : Else : tmpBan\ms = MilliSecs() tmpBan\reason = tmpReason For tmpClient.UDP_Client = Each UDP_Client If tmpClient\IP = UDP_IntIP( tmpPlayerID ) Then UDP_BannPlayer( tmpClient\ID, tmpTime, tmpReason$ ) EndIf Next EndIf End Function Function UDP_ChangeName$( tmpNewName$ ) If UDP_Host = 1 Then If UDP_ServerClient = Null Then Return UDP_ServerClient\changename = 1 UDP_ServerClient\newname$ = tmpNewName$ Else UDP_ChangeName = 1 UDP_NewName$ = tmpNewName$ EndIf End Function Function UDP_ChangeHost( tmpNewHostID, tmpCmdHandle=-1, tmpParameterList$="" ) If UDP_Host = 0 Or UDP_Dediziert = 1 Then Return If tmpNewHostID > 0 And tmpNewHostID <= UDP_MaxPlayers Then If UDP_ClientInfo( tmpNewHostID ) <> Null Then tmpClient.UDP_Client = UDP_ClientInfo( tmpNewHostID ) WriteByte( tmpClient\stream, UDP_ChangeHostMsg ) WriteByte( tmpClient\stream, 1 ) WriteByte( tmpClient\stream, UDP_NetMode ) If tmpCmdHandle > -1 Then WriteByte( tmpClient\stream, 1 ) Local tmpCmdOb.UDP_Cmd = Object.UDP_Cmd( tmpCmdHandle ) Local tmpKomma = 0, tmpKomma2 = 0 Local tmpCmd.UDP_Cmd = Null If tmpCmdOb\MaxParameter > 0 Then If Not ( Mid( tmpParameterList$, Len( tmpParameterList$ ), 1 ) = ",") Then tmpParameterList$ = tmpParameterList$ + "," For i = 0 To tmpCmdOb\MaxParameter tmpPlus = 0 If tmpCmdOb\Parameter[ i ] <> 2 Then tmpKomma2 = Instr( tmpParameterList$, ",", tmpKomma+1 ) Else tmp34_1 = Instr( tmpParameterList$, Chr(34), tmpKomma+1 ) tmp34_2 = Instr( tmpParameterList$, Chr(34), tmp34_1+1 ) If tmp34_1 <> 0 And tmp34_2 <> 0 Then tmpKomma = tmp34_1 tmpKomma2 = tmp34_2 tmpPlus = 1 Else tmpKomma2 = Instr( tmpParameterList$, ",", tmpKomma+1 ) EndIf EndIf tmpParameter$ = Mid( tmpParameterList$, tmpKomma+1 , tmpKomma2 - tmpKomma - 1 ) tmpKomma = tmpKomma2 + tmpPlus UDP_tmpParameter$( i ) = tmpParameter Next Else UDP_tmpParameter$( 0 ) = tmpParameterList$ EndIf WriteInt( tmpClient\stream, tmpCmdOb\ID ) For i = 0 To tmpCmdOb\MaxParameter Select tmpCmdOb\parameter[i] Case 0 : WriteInt( tmpClient\stream, UDP_tmpParameter( i ) ) Case 1 : WriteFloat( tmpClient\stream, UDP_tmpParameter( i ) ) Case 2 : WriteString( tmpClient\stream, UDP_tmpParameter( i ) ) Case 3 : WriteByte( tmpClient\stream, UDP_tmpParameter( i ) ) Case 4 : WriteShort( tmpClient\stream, UDP_tmpParameter( i ) ) Case 5 tmpBankSize = BankSize( UDP_tmpParameter( i ) ) WriteInt( tmpClient\stream, tmpBankSize ) For j = 0 To tmpBankSize-1 WriteByte( tmpClient\stream, PeekByte( UDP_tmpParameter( i ), j ) ) Next End Select Next Else WriteByte( tmpClient\stream, 0 ) EndIf SendUDPMsg( tmpClient\stream, tmpClient\IP, tmpClient\Port ) For tmpClientAll.UDP_Client = Each UDP_Client If tmpClientAll\stream <> 0 Then If tmpClientAll <> tmpClient Then WriteByte( tmpClientAll\stream, UDP_ChangeHostMsg ) WriteByte( tmpClientAll\stream, 0 ) WriteInt( tmpClientAll\stream, tmpClient\ID ) SendUDPMsg( tmpClientAll\stream, tmpClientAll\IP, tmpClientAll\Port ) EndIf If tmpClientAll\stream <> UDP_Stream Then CloseUDPStream( tmpClientAll\stream ) EndIf tmpClientAll\waitping = 0 Next tmpClient\host = 1 UDP_Player\host = 0 UDP_ServerPort = tmpClient\port UDP_ServerIP = tmpClient\IP UDP_ServerClient = tmpClient UDP_Host = 0 UDP_Connect = 1 UDP_Connected = 0 UDP_ServerID = tmpClient\ID UDP_ChangeHostConnect = 1 UDP_ServerStream = UDP_Stream If UDP_NetMode = UDP_LanGame Then UDP_ServerStream = CreateUDPStream( ) EndIf EndIf End Function Function UDP_CountServer( tmpNetMode = UDP_LanGame, tmpServerPort = 8000 ) UDP_Stream = CreateUDPStream( ) UDP_Connect = 2 UDP_ServerIP = UDP_IntIP( UDP_BroadcastIP$() ) UDP_ServerPort = tmpServerPort WriteByte( UDP_Stream, UDP_GetInformationMsg ) SendUDPMsg( UDP_Stream, UDP_ServerIP, tmpServerPort ) UDP_ServerGlobalPing = MilliSecs() End Function Function UDP_AddServerFile( tmpFileName$ ) If UDP_Host = 1 Then tmpFileTyp = FileType( tmpFileName$ ) If tmpFileTyp = 1 Then If FileSize( tmpFileName$ ) < 2147483647 Then UDP_ServerFileID = ( UDP_ServerFileID + 1 ) tmpFile.UDP_ServerFile = New UDP_ServerFile tmpFile\filename$ = tmpFileName$ tmpFile\size = FileSize( tmpFile\filename$ ) tmpFile\ID = UDP_ServerFileID tmpFile\transfer = 0 UDP_SendServerFiles = 1 EndIf ElseIf tmpFileTyp = 2 Then tmpDir = ReadDir( tmpFileName$ ) If Right( tmpFilename$, 1 ) = "\" Then tmpFilename = Mid( tmpFilename$, 1, Len( tmpFilename$ ) - 1 ) NextFile( tmpDir ) : NextFile( tmpDir ) file$ = NextFile( tmpDir ) While file$ <> "" UDP_AddServerFile( tmpFilename$ + "\" + file$ ) file$ = NextFile( tmpDir ) Wend EndIf EndIf End Function Function UDP_CreateFile( tmpPath$, tmpDir$ = "" ) tmpPath$ = Replace( tmpPath$, "/", "\" ) If Instr( tmpPath$, "\" ) > 0 Then tmp_Dir$ = Mid( tmpPath$, 1, Instr( tmpPath$, "\" )-1 ) tmpNewDir$ = CurrentDir() + tmpDir$ + tmp_Dir$ ;DebugLog tmpNewDir$ If FileType( tmpNewDir ) = 0 Then CreateDir( tmpNewDir$ ) EndIf tmpNewPath$ = Mid( tmpPath$, Instr( tmpPath$, "\" )+1, Len( tmpPath$ ) ) If tmpDir$ <> "" Then If Right(tmpDir, 1) = "\" Then tmpDir = Mid(tmpDir, 1, Len(tmpDir) - 1 ) If Right(tmp_Dir, 1) = "\" Then tmp_Dir = Mid(tmp_Dir, 1, Len(tmp_Dir) - 1 ) tmpOldPath$ = tmpdir$ + "\" + tmp_Dir$ + "\" Else tmpOldPath$ = tmp_Dir$ + "\" EndIf tmpDat = UDP_CreateFile( tmpNewPath$, tmpOldPath$ ) Return tmpDat Else tmpDat = WriteFile( tmpDir$ + tmpPath$ ) Return tmpDat EndIf End Function Function UDP_ReConnect( ) If UDP_Host = 1 Then For tmpClient.UDP_Client = Each UDP_Client tmpClient\recon = 1 tmpClient\reconms = 0 Next Else UDP_End() UDP_Stream = CreateUDPStream( ) UDP_Connected = 0 UDP_Connect = 1 EndIf End Function Function UDP_BroadcastIP$() CountHostIPs("") Local IP$ = DottedIP(HostIP(1)) Local Subnetmask$ = "255.255.255.0" Local IPDigits[3], SubnetDigits[3] Local pos, i For i = 0 To 3 pos = Instr( IP$, "." ) If pos > 0 Then IPDigits[i] = Left( IP$, pos -1 ) IP$ = Mid( IP$, pos +1 ) Else IPDigits[i] = IP$ EndIf Next For i = 0 To 3 pos = Instr( Subnetmask$, "." ) If pos > 0 Then SubnetDigits[i] = Left( Subnetmask$, pos -1 ) Xor $FF Subnetmask$ = Mid( Subnetmask$, pos +1 ) Else SubnetDigits[i] = Subnetmask$ Xor $FF EndIf Next For i = 0 To 3 IPDigits[i] = IPDigits[i] Or SubnetDigits[i] Next Return IPDigits[0] +"." +IPDigits[1] +"." +IPDigits[2] +"." +IPDigits[3] End Function Function UDP_IntIP( IP$ ) If Instr( IP$, "." )<>0 Then a1 = Int( Left( IP$, Instr( IP$, "." )-1 ) ) : IP$ = Right( IP$, Len( IP$ ) - Instr( IP$, "." ) ) If Instr( IP$, "." )<>0 Then a2 = Int( Left( IP$, Instr( IP$, "." )-1 ) ) : IP$ = Right( IP$, Len( IP$ ) - Instr( IP$, "." ) ) If Instr( IP$, "." )<>0 Then a3 = Int( Left( IP$, Instr( IP$, "." )-1 ) ) : IP$ = Right( IP$, Len( IP$ ) - Instr( IP$, "." ) ) a4 = Int( IP$ ) Return ( a1 Shl 24 ) + ( a2 Shl 16 ) + ( a3 Shl 8 ) + a4 End Function |
Comments
| ||
Link is dead :( |
| ||
Check here for info: http://www.blitzforum.de/forum/viewtopic.php?p=410348#410348 And then go down a few post for the download of SimpleUDP 3.0 including the Masterserver(or click on the same link here): http://www.blitzforum.de/upload/file.php?id=12554 (If German is not in your skill set then use Google Translate for the Readme.txt file..) |
Code Archives Forum