SimpleUDP - NetzwerkLib 1.25
Übersicht

![]() |
ToeBBetreff: SimpleUDP - NetzwerkLib 1.25 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich habe schonmal eine Version von meiner Netztwerklib, die Alle Grundfunctionen beinhaltet, die man für Netzwerkspiele Braucht. Also Hosten,Joinen,Update,NAchrichten senden, Server Suchen, SPieler Kicken.
Die Beschreibung und ein Tutorial ist in der ReadMe.txt (Bitte lesen !) Hier die Lib : Code: [AUSKLAPPEN] Const UDP_ServerPort = 8000 Const UDP_PingTime = 1000 Const UDP_Msg_nom = 1 Const UDP_Msg_new = 2 Const UDP_Msg_not = 3 Const UDP_Msg_pg1 = 4 Const UDP_Msg_pg2 = 5 Const UDP_Msg_kik = 6 Const UDP_Msg_end = 7 Const UDP_Msg_ask = 8 Const UDP_Msg_att = 9 Const UDP_Msg_at2 = 10 Const UDP_Msg_nam = 11 Const UDP_Msg_snc = 12 Const UDP_Msg_ban = 13 Const UDP_CommandSign$ = "§" Const UDP_EnCodeNumber = 4 Global UDP_Server,UDP_ServerStream,UDP_ServerName$ Global UDP_ServerMsg$ Global UDP_ServerPass$ Global UDP_PingMS Global UDP_PlayerNumber,UDP_PlayerID Global UDP_CommandLine$ = "" Global UDP_Command$,UDP_ParameterNumber Global UDP_SendNewMsg = 0,UDP_RecvMsg = 0 Global UDP_MsgID Global UDP_EventID,UDP_EventMsg$ Global UDP_Player_ChangeName Global UDP_BanTime Global UDP_PingTimeOut = 10000 Dim UDP_Player_Online(0),UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0),UDP_Player_Name$(0) Dim UDP_Player_local(0) Dim UDP_Player_TMsg.UDP_Msg(0),UDP_Player_SendNewMsg(0),UDP_Player_RecvMsg(0) Dim UDP_Player_Ping(0),UDP_Player_PingMs(0) Dim UDP_Player_Event(0) Dim UDP_Parameter$(0) Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg$(0) Dim UDP_Servertmp_pass(0) Dim UDP_Server_name$(0) Dim UDP_Server_ip$(0) Dim UDP_Server_port(0) Dim UDP_Server_pl1(0) Dim UDP_Server_pl2(0) Dim UDP_Server_msg$(0) Dim UDP_Server_pass(0) Type UDP_Msg Field msg$ Field ms Field ID Field From Field it End Type Type UDP_RecvMsg Field msg$ Field From Field att End Type Type UDP_Event Field typ Field ID Field msg$ End Type Type UDP_Ban Field IP$ Field time,ms End Type ;---------- Function UDP_HostGame(GameName$,PlayerName$,PlayerNumber=1) UDP_Server = 1 UDP_ServerStream = CreateUDPStream(UDP_ServerPort) UDP_NewPlayerNumber(PlayerNumber) UDP_PlayerID = 0 UDP_ServerName = GameName UDP_Player_Online(0) = 1 If PlayerName <> "" Then UDP_Player_Name$(0) = PlayerName$ Else UDP_Player_Name$(0) = "unnamed" EndIf dat = ReadFile("Banlist.ban") If dat <> 0 While Not Eof(dat) newban.UDP_ban = New UDP_ban newban\IP$ = ReadLine(dat) DebugLog newban\IP$ Wend EndIf Return (UDP_ServerStream <> 0) End Function Function UDP_JoinGame(GameIP$,PlayerName$,ServerPass$="",WaitTime=100) UDP_Server = 0 If Instr(GameIp,":") > 0 Then GameIp = Mid(GameIP,1,Instr(GameIP,":")-1) If Instr(GameIp,".") > 0 Then GameIP = UDP_IntIP(GameIP) UDP_ServerStream = CreateUDPStream() If UDP_ServerStream = 0 Then Return 0 If PlayerNAme$ = "" Then PlayerName$ = "unnamed" WriteByte(UDP_ServerStream,UDP_Msg_new) WriteString(UDP_ServerStream,PlayerName$) WriteString(UDP_ServerStream,UDP_Encode(ServerPass)) SendUDPMsg(UDP_ServerStream,GameIP,UDP_ServerPort) Connection = 0 WaitMs = MilliSecs() + WaitTime While WaitMs > MilliSecs() If RecvUDPMsg(UDP_ServerStream) Then byte = ReadByte(UDP_ServerStream) If byte = UDP_Msg_new Then If UDPMsgIP(UDP_ServerStream) = GameIP Then UDP_PlayerID = ReadInt(UDP_ServerStream) UDP_PlayerNumber = ReadInt(UDP_ServerStream) UDP_NewPlayerNumber(UDP_PlayerNumber) UDP_Player_Port(0) = UDP_ServerPort UDP_Player_IP(0) = GameIP UDP_ServerMsg$ = ReadString(UDP_ServerStream) While Not Eof(UDP_ServerStream) TmpPlayerID = ReadInt(UDP_ServerStream) UDP_Player_Online(tmpPlayerID) = 1 UDP_Player_Name$(tmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = ReadByte(UDP_ServerStream) tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = tmpPlayerID Wend UDP_Player_Online(UDP_PlayerID) = 1 UDP_Player_Name$(UDP_PlayerID) = PlayerName$ Connection = 1 Exit EndIf EndIf If byte = UDP_Msg_ban Then Connection = UDP_Msg_ban UDP_BanTime = ReadInt(UDP_ServerStream) EndIf EndIf Wend If Connection Then UDP_Player_Stream(0) = CreateUDPStream() If UDP_Player_Stream(0) = 0 Then Return 0 Return Connection End Function Function UDP_Update(LoginBlock=0) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then If UDP_Player_SendNewMsg(i) = 1 Then get = 0 tmp.UDP_Msg = Null For tmp_.UDP_Msg = Each UDP_Msg If tmp_\ID = i Then tmp = tmp_ : Exit Next If tmp <> Null Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(i) = 0 UDP_Player_TMsg(i) = tmp UDP_Player_RecvMsg(i) = 1 Else UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf EndIf If UDP_Player_RecvMsg(i) = 1 Then tmp.UDP_Msg = UDP_Player_TMsg(i) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Then Delete tmp UDP_Player_SendNewMsg(i) = 1 UDP_Player_RecvMsg(i) = 0 EndIf EndIf EndIf Else For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then Delete tmp Next UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf Next For ban.UDP_Ban = Each UDP_ban If ban\time > 0 Then If MilliSecs()-ban\ms => ban\time Then Delete ban EndIf EndIf Next If UDP_PingMs <= MilliSecs() Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_PingMs(i) = 0 And UDP_Player_Local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_pg1) For j = 1 To UDP_PlayerNumber If UDP_Player_Online(j) = 1 Then WriteInt(UDP_Player_Stream(i),j) WriteInt(UDP_Player_Stream(i),UDP_PLayer_Ping(j)) EndIf Next SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) UDP_Player_PingMs(i) = MilliSecs() EndIf Next UDP_PingMs = MilliSecs() + UDP_PingTime EndIf For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then If i > 0 Then If UDP_Player_PingMs(i) > 0 Then If (MilliSecs()-UDP_Player_PingMs(i)) > UDP_PingTimeOut Then UDP_KickPlayer(i) EndIf EndIf EndIf EndIf Next While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) ToID = ReadInt(UDP_serverStream) If ToID = -1 Or ToID = 0 Then tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 If toID = -1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> TmpID Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),TmpID) WriteString(UDP_Player_stream(i),tmpr\msg) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf Else WriteByte(UDP_Player_Stream(ToID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ToID),TmpID) WriteString(UDP_Player_stream(ToID),tmpr\msg) SendUDPMsg(UDP_Player_stream(toID),UDP_Player_IP(ToID),UDP_player_Port(toID)) EndIf Case UDP_Msg_new place = UDP_GetFreePlace() New_Name$ = ReadString(UDP_ServerStream) New_Pass$ = ReadString(UDP_ServerStream) New_Port% = UDPMsgPort(UDP_ServerStream) New_IP% = UDPMsgIP(UDP_ServerStream) New_Pass = UDP_DeCode(New_Pass) If LoginBlock = 0 And New_Pass = UDP_ServerPass Then If place > 0 Then banned.UDP_ban = Null For ban.UDP_ban = Each UDP_ban If ban\IP$ = DottedIP(New_IP) Then banned = ban : Exit Next If banned = Null player_accept = UDP_CreateNewPlayer(place,New_Name$,New_IP,New_Port) If player_accept > 0 Then WriteByte(UDP_Player_Stream(place),UDP_Msg_new) WriteInt(UDP_Player_Stream(place),place) WriteInt(UDP_Player_Stream(place),UDP_PlayerNumber) WriteString(UDP_Player_Stream(place),UDP_ServerMsg$) For i = 0 To UDP_PlayerNumber If place <> i Then If UDP_Player_Online(i) = 1 Then WriteInt(UDP_Player_Stream(place),i) WriteString(UDP_Player_Stream(place),UDP_Player_Name(i)) WriteByte(UDP_Player_Stream(place),UDP_Player_Local(i)) EndIf EndIf Next SendUDPMsg(UDP_Player_Stream(place),UDP_Player_IP(place),UDP_Player_Port(place)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place Then WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),0) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = place UDP_CheckNames() EndIf Else If banned\time > 0 Then MS = banned\time - (MilliSecs()-banned\ms) Else MS = 0 EndIf WriteByte(UDP_ServerStream,UDP_Msg_ban) WriteInt(UDP_ServerStream,MS) SendUDPMsg(UDP_ServerStream,New_IP,New_Port) EndIf EndIf EndIf Case UDP_Msg_pg1 TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 Then UDP_Player_Ping(TmpID) = MilliSecs() - UDP_Player_PingMs(TmpID) UDP_Player_PingMs(TmpID) = 0 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_pg2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_PLayer_Port(TmpID)) EndIf Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 Then UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID CloseUDPStream(UDP_Player_Stream(TmpID)) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),TmpID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next EndIf Case UDP_Msg_ask IP = UDPMsgIP(UDP_ServerStream) Port = UDPMsgPort(UDP_ServerStream) count = UDP_CountPlayers() WriteByte(UDP_ServerStream,UDP_Msg_ask) WriteString(UDP_ServerStream,UDP_ServerName$) WriteInt(UDP_ServerStream,count) WriteInt(UDP_ServerStream,UDP_PlayerNumber) WriteString(UDP_ServerStream,UDP_ServerMsg) WriteByte(UDP_ServerStream,(UDP_ServerPass<>"")) SendUDPMsg(UDP_ServerStream,Ip,Port) Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) toID = ReadInt(UDP_ServerStream) ;UDP_Player_Msg(TmpID) = ReadString(UDP_ServerStream) If toID = -1 Or ToID = 0 Then tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_ServerStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" And toID = -1 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And tmpID <> i Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = TmpID If c = 0 Then UDP_Player_SendNewMsg(i) = 1 UDP_Player_TMsg(i) = tmp EndIf Next EndIf Else If tmpr\msg <> "" Then WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = toID Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = toID tmp\From = TmpID If c = 0 Then UDP_Player_SendNewMsg(toID) = 1 UDP_Player_TMsg(toID) = tmp EndIf EndIf Case UDP_Msg_at2 TmpID = ReadInt(UDP_ServerStream) Delete UDP_Player_TMsg(tmpID) UDP_Player_SendNewMsg(TmpID) = 1 UDP_Player_RecvMsg(TmpID) = 0 Case UDP_Msg_nam tmpPlayerID = ReadInt(UDP_ServerStream) oldNam$ = UDP_Player_Name(tmpPlayerID) UDP_Player_Name(tmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_ChangeName = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 And i <> tmpPlayerID Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nam) WriteInt(UDP_Player_Stream(i),tmpPlayerID) WriteString(UDP_Player_Stream(i),UDP_Player_Name(tmpPlayerID)) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_nam tmpe\ID = tmpPlayerID tmpe\msg = oldNam$ UDP_CheckNames() End Select Wend ElseIf UDP_Server = 0 If UDP_Player_SendNewMsg(0) = 1 Then tmp.UDP_Msg = First UDP_Msg If tmp <> Null Then WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(0) = 0 UDP_Player_TMsg(0) = tmp UDP_Player_RecvMsg(0) = 1 Else UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf If UDP_Player_RecvMsg(0) = 1 Then tmp.UDP_Msg = UDP_Player_TMsg(0) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Then Delete tmp UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf EndIf While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 Case UDP_Msg_new TmpPlayerID = ReadInt(UDP_ServerStream) LocalPlayer = ReadByte(UDP_serverStream) UDP_Player_Online(TmpPlayerID) = 1 UDP_Player_Name$(TmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = LocalPlayer tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = tmpPlayerID Case UDP_Msg_pg1 While Not Eof(UDP_ServerStream) TmpID = ReadInt(UDP_ServerStream) UDP_Player_Ping(TmpID) = ReadInt(UDP_ServerStream) Wend WriteByte(UDP_Player_Stream(0),UDP_Msg_pg1) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) UDP_Player_pingms(0) = MilliSecs() Case UDP_Msg_pg2 UDP_Player_ping(0) = MilliSecs() - UDP_Player_pingms(0) Case UDP_Msg_kik TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_kik tmpe\ID = tmpID Case UDP_Msg_ban TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_ban tmpe\ID = tmpID tmpe\msg = ReadInt(UDP_ServerStream) Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" Then WriteByte(UDP_Player_Stream(0),UDP_Msg_at2) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf Case UDP_Msg_at2 Delete UDP_Player_TMsg(0) UDP_Player_SendNewMsg(0) = 1 UDP_Player_RecvMsg(0) = 0 Case UDP_Msg_Nam,UDP_Msg_snc tmpPlayerID = ReadInt(UDP_ServerStream) oldNam$ = UDP_Player_Name(tmpPlayerID) UDP_Player_Name(tmpPlayerID) = ReadString(UDP_ServerStream) tmpe.UDP_Event = New UDP_Event tmpe\typ = byte tmpe\ID = tmpPlayerID tmpe\msg = oldNam$ End Select Wend EndIf End Function Function UDP_SendMsg(Msg$,ID=-1) If UDP_Server = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),0) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next Else WriteByte(UDP_Player_Stream(ID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ID),0) WriteString(UDP_Player_stream(ID),Msg$) SendUDPMsg(UDP_Player_stream(ID),UDP_Player_IP(ID),UDP_player_Port(ID)) EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),-1) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) Else WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),ID) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf EndIf EndIf End Function Function UDP_SendMsg_Att(msg$,ID=-1) If UDP_Server = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = 0 If c = 0 Then UDP_Player_SendNewMsg(i) = 1 EndIf Next Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = ID Then c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = 0 If c = 0 Then UDP_Player_SendNewMsg(ID) = 1 EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 Then If ID < 0 Or ID > UDP_PlayerNumber Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = -1 tmp\From = UDP_PlayerID If c = 0 Then UDP_Player_SendNewMsg(0) = 1 Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 Then c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = UDP_PlayerID If c = 0 Then UDP_Player_SendNewMsg(ID) = 1 EndIf EndIf EndIf End Function Function UDP_SendLocalMsg(msg$,LocalID) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),LocalID) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf End Function Function UDP_SendLocalMsg_att(msg$,LocalID) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 Then c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = LocalID If c = 0 Then UDP_Player_SendNewMsg(i) = 1 EndIf Next EndIf End Function Function UDP_GetMsg$() tmp.UDP_RecvMsg = First UDP_RecvMsg If tmp <> Null Then UDP_MsgID= tmp\From tmpMsg$ = tmp\msg Delete tmp Return tmpmsg$ EndIf Return "" End Function Function UDP_KickPlayer(ID) If UDP_Server = 1 Then For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Kik) WriteInt(UDP_Player_Stream(i),ID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next UDP_Player_Online(ID) = 0 UDP_Player_Port(ID) = 0 UDP_Player_IP(ID) = 0 UDP_Player_PingMs(ID) = 0 CloseUDPStream(UDP_Player_Stream(ID)) tmp.UDP_Event = New UDP_Event tmp\typ = UDP_Msg_kik tmp\ID = ID EndIf End Function Function UDP_BanPlayer(flag$,ms=0) If UDP_Server <> 1 Then Return Local banIP$ = "" Local banID = 0 If DottedIP(UDP_IntIP(flag$)) = flag$ Then For i = 1 To Len(flag$) B$ = Mid(Flag$,i,1) count = count + 1 If B$ = "." Then count = 0 If count => 4 Exit banIP$ = banIP$ + B$ Next ElseIf Int(flag$) = Flag$ If flag$ => 1 And Flag$ <= UDP_PlayerNumber Then BanIP$ = DottedIP(UDP_Player_IP(Int(flag))) BanID = Int(Flag) EndIf Else For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then If Lower(UDP_Player_Name(i)) = Lower(flag$) Then BanIP$ = DottedIP(UDP_Player_IP(i)) BanID = Int(flag) Exit EndIf EndIf Next EndIf If BanIP$ = "" Then Return newban.UDP_ban = New UDP_ban newban\IP$ = BanIP$ If ms > 0 Then newban\time = ms newban\ms = MilliSecs() Else dat = WriteFile("Banlist.ban") SeekFile(dat,FileSize("Banlist.ban")) WriteLine(dat,BanIP$) EndIf If BanID > 0 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_ban) WriteInt(UDP_Player_Stream(i),BanID) WriteInt(UDP_Player_Stream(i),ms) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next UDP_Player_Online(banID) = 0 UDP_Player_Port(banID) = 0 UDP_Player_IP(banID) = 0 UDP_Player_PingMs(banID) = 0 CloseUDPStream(UDP_Player_Stream(BanID)) tmp.UDP_Event = New UDP_Event tmp\typ = UDP_Msg_ban tmp\ID = BanID tmp\msg = ms EndIf End Function Function UDP_End() If UDP_Server = 1 Then For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),0) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next Delay 50 If UDP_ServerStream <> 0 CloseUDPStream(UDP_ServerStream) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 Then CloseUDPStream(UDP_Player_Stream(i)) EndIf Next Else If UDP_ServerStream <> 0 And UDP_Player_Stream(0) <> 0 Then WriteByte(UDP_Player_Stream(0),UDP_Msg_End) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) Delay 50 CloseUDPStream(UDP_Player_Stream(0)) CloseUDPStream(UDP_ServerStream) EndIf EndIf End Function Function UDP_GetEvent() tmp.UDP_Event = First UDP_Event If tmp <> Null Then UDP_EventID = tmp\ID UDP_EventMsg$ = tmp\msg$ typ = tmp\typ Delete tmp Return typ EndIf Return 0 End Function Function UDP_ChangeName(Name$,ID=0) If UDP_Server = 1 Then oldNam$ = UDP_Player_Name(ID) UDP_Player_Name$(ID) = Name$ UDP_CheckNames() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_nam) WriteInt(UDP_Player_Stream(i),ID) WriteString(UDP_Player_Stream(i),Name$) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_nam tmpe\ID = ID tmpe\msg = oldNam$ Else oldNam$ = UDP_Player_Name(UDP_PlayerID) UDP_Player_Name$(UDP_PlayerID) = Name$ WriteByte(UDP_ServerStream,UDP_Msg_nam) WriteInt(UDP_ServerStream,UDP_PlayerID) WriteString(UDP_ServerStream,Name$) SendUDPMsg(UDP_ServerStream,UDP_Player_IP(0),UDP_ServerPort) tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_nam tmpe\ID = UDP_PlayerID tmpe\msg = oldNam$ EndIf End Function Function UDP_AddCommand$(Name$) UDP_CommandLine = UDP_CommandLine$+Name$+UDP_CommandSign$ End Function Function UDP_GetCommand$() txt$ = Mid(UDP_CommandLine,1,Instr(UDP_CommandLine,UDP_CommandSign)-1) lentxt = Len(txt) UDP_Command = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Mid(txt$,Len(UDP_Command)+2,Len(txt$)) count = 0 oldPos = 1 intr = Instr(txt$,",") While intr > 0 count = count + 1 oldpos = intr + 1 intr = Instr(txt$,",",oldpos) Wend Dim UDP_Parameter(count) komma = 0 While Instr(txt$,",") > 0 UDP_Parameter(komma) = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Right(txt$,Len(txt$)-Len(UDP_Parameter(komma))-1) komma = komma + 1 Wend UDP_Parameter(komma) = txt$ UDP_ParameterNumber = count UDP_CommandLine = Mid(UDP_CommandLine,Instr(UDP_CommandLine,UDP_CommandSign)+1,Len(UDP_CommandLine)) End Function Function UDP_CreateLocalPlayer(Name$) If UDP_Server = 1 Then place = UDP_GetFreePlace() If place = 0 Return 0 UDP_CreateNewPlayer(place,Name$,0,0,1) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place And UDP_Player_local(i) = 0 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),1) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next Return place EndIf Return -1 End Function Function UDP_SetServerMsg(ServerMsg$) If UDP_Server = 1 Then UDP_ServerMsg$ = ServerMsg$ EndIf End Function Function UDP_SetServerPass(ServerPass$) If UDP_Server = 1 Then UDP_ServerPass = ServerPass EndIf End Function Function UDP_CountServers(MaxServer=100,WaitTime=500) Dim UDP_Servertmp_name$(MaxServer) Dim UDP_Servertmp_ip$(MaxServer) Dim UDP_Servertmp_port(MaxServer) Dim UDP_Servertmp_pl1(MaxServer) Dim UDP_Servertmp_pl2(MaxServer) Dim UDP_Servertmp_msg(MaxServer) Dim UDP_Servertmp_pass(MaxServer) IP = UDP_IntIP(UDP_BroadcastIP()) UDP_ServerStream = CreateUDPStream() WriteByte(UDP_ServerStream,UDP_Msg_ask) SendUDPMsg(UDP_ServerStream,IP,UDP_ServerPort) ms = MilliSecs() serv = 0 Repeat If RecvUDPMsg(UDP_ServerStream) Then If ReadByte(UDP_ServerStream) = UDP_Msg_ask Then UDP_Servertmp_name$(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_ip(serv) = DottedIP(UDPMsgIP(UDP_ServerStream)) UDP_Servertmp_port(serv) = UDPMsgPort(UDP_ServerStream) UDP_Servertmp_pl1(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_pl2(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_msg(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_pass(serv) = ReadByte(UDP_ServerStream) serv = serv + 1 If serv > MaxServer Then Exit EndIf EndIf Until ms <= MilliSecs() - WaitTime MaxServer = serv-1 Dim UDP_Server_name$(MaxServer) Dim UDP_Server_ip$(MaxServer) Dim UDP_Server_port(MaxServer) Dim UDP_Server_pl1(MaxServer) Dim UDP_Server_pl2(MaxServer) Dim UDP_Server_msg(MaxServer) Dim UDP_Server_pass(MaxServer) For i = 0 To MaxServer UDP_Server_name$(i) = UDP_Servertmp_name(i) UDP_Server_ip$(i) = UDP_Servertmp_ip(i) UDP_Server_port(i) = UDP_Servertmp_port(i) UDP_Server_pl1(i) = UDP_Servertmp_pl1(i) UDP_Server_pl2(i) = UDP_Servertmp_pl2(i) UDP_Server_msg(i) = UDP_Servertmp_msg(i) UDP_Server_pass(i) = UDP_Servertmp_pass(i) Next Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg(0) Dim UDP_Servertmp_pass(0) CloseUDPStream(UDP_ServerStream) Return MaxServer+1 End Function Function UDP_GetServerName$(ID) Return UDP_Server_name$(ID-1) End Function Function UDP_GetServerIP$(ID) Return UDP_Server_IP$(ID-1)+":"+UDP_Server_Port(ID-1) End Function Function UDP_GetServerPlayerNumber$(ID) Return UDP_Server_pl1(ID-1)+"/"+UDP_Server_pl2(ID-1) End Function Function UDP_GetServerMsg$(ID) Return UDP_Server_msg$(ID-1) End Function Function UDP_GetServerPass(ID) Return UDP_Server_pass(ID-1) End Function Function UDP_CountPlayers() count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 Next Return count End Function Function UDP_GetPlayerName$(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 If count = ID Then Return UDP_Player_Name(i) Next Return "" End Function Function UDP_GetPlayerPing(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 If count = ID Then Return UDP_Player_Ping(i) Next Return 0 End Function Function UDP_GetPlayerID(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 Then count = count + 1 If count = ID Then Return i Next Return "" 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 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_EnCode$(txt$) Local ntxt$ For i = 1 To Len(txt) num = Asc(Mid(txt,i,1)) + UDP_EnCodeNumber ntxt$ = ntxt$ + Chr(num) Next Return ntxt End Function Function UDP_DeCode$(txt$) Local ntxt$ For i = 1 To Len(txt$) num = Asc(Mid(txt$,i,1)) - UDP_EnCodeNumber ntxt$ = ntxt$ + Chr(num) Next Return ntxt$ End Function ;---------- Function UDP_CreateNewPlayer(place,Name$,IP,Port,LocalPlayer=0) If loacalPlayer = 0 Then UDP_Player_Stream(place) = CreateUDPStream() If UDP_Player_Stream(place) = 0 Then Return 0 UDP_Player_Online(place) = 1 UDP_Player_Name$(place) = Name$ UDP_Player_Port(place) = Port UDP_Player_IP(place) = IP UDP_Player_Local(place) = localplayer Return 1 End Function Function UDP_GetFreePlace() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 0 Then Return i Next Return 0 End Function Function UDP_NewPlayerNumber(Anzahl) UDP_PlayerNumber = Anzahl Dim UDP_Player_Online(Anzahl),UDP_Player_Stream(Anzahl),UDP_Player_IP(Anzahl),UDP_Player_Port(Anzahl),UDP_Player_Name$(Anzahl) Dim UDP_Player_Local(Anzahl) Dim UDP_Player_TMsg.UDP_Msg(Anzahl),UDP_Player_SendNewMsg(Anzahl),UDP_Player_RecvMsg(Anzahl) Dim UDP_Player_Event(Anzahl) Dim UDP_Player_Ping(Anzahl),UDP_Player_PingMs(Anzahl) End Function Function UDP_CheckNames() For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 Then count = 1 If Instr(UDP_Player_Name(i),"(") And Instr(UDP_Player_Name(i),")") Then txt2$ = Left(UDP_Player_Name(i),Instr(UDP_Player_Name(i),"(")-1) Else txt2$ = UDP_Player_Name(i) EndIf For j = i To UDP_PlayerNumber If UDP_Player_Online(j) = 1 And UDP_Player_Local(j) = 0 And i <> j Then If Instr(UDP_Player_Name(j),"(") And Instr(UDP_Player_Name(j),")") Then txt$ = Left(UDP_Player_Name(j),Instr(UDP_Player_Name(j),"(")-1) Else txt$ = UDP_Player_Name(j) EndIf If txt = txt2 Then count2 = Int(Mid(UDP_Player_Name(j),Instr(UDP_Player_Name(j),"(")+1,Instr(UDP_Player_Name(j),")")-1)) If count2 > count Then count = count2 If UDP_Player_Name(j) <> txt+"("+count+")" Then oldNam$ = UDP_Player_Name(j) UDP_Player_Name(j) = txt+"("+count+")" UDP_Player_ChangeName = 1 For k = 1 To UDP_PlayerNumber If UDP_Player_Online(k) = 1 And UDP_Player_Local(k) = 0 Then WriteByte(UDP_Player_Stream(k),UDP_Msg_snc) WriteInt(UDP_Player_Stream(k),j) WriteString(UDP_Player_Stream(k),UDP_Player_Name(j)) SendUDPMsg(UDP_Player_Stream(k),UDP_Player_IP(k),UDP_Player_Port(k)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_snc tmpe\ID = j tmpe\msg = oldNam$ EndIf count = count + 1 EndIf EndIf Next EndIf Next End Function ;---------- Beispiele + Lib könnt ihr hier Downloaden : Edit : Version 1.50 SimpleUDP(*.rar, ~3,5Mb) Viel spaß und schreibt bitte was ! mfg ToeB |
||
- Zuletzt bearbeitet von ToeB am Do, März 25, 2010 16:37, insgesamt 8-mal bearbeitet
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm weis nicht recht wo anfangen
ich habs mir kurz mal angesehn und muss sagen, gar ned schlecht, kann dem einen oder anderen sehr viel stress und zeit sparen! Die Befehlnamen sind gut gewählt und das Tut ist ganz nett werde den code eventuell für zukünftige Progs einsetzen ^^ mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Endlich:D
Nu brauch ich mich nichtmehr mit meiner eigenen udp lib rumqüalen^^ testen tu ich heute auch noch aber nicht jetzt^^ |
||
Warbseite |
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, nette Sache.
Ich werde das zwar nicht brauchen, da ich mehr oder weniger meine eigene Lib hab, aber ich denke einen paar Anfängern könnte es die Netzwerksache sehr leicht machen. Sieht auch gut aus. Aber ist das ganze auch Internetfähig, mit Firewall, ect ? |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ![]() @Tankbuster : Ja im prinzip kann man das ja auch übers Internet machen, nur must du die entsprecheneden dinge einstellen wie firewall deaktivieren oder portforwarding (das übliche wie bei allen UDP sachen ![]() Aber finde ich gut das sie so gut ankommt ![]() ICh werde sie noch weiter schreiben, also so dass man seine Server auch im Internet hochladen kann für Internetgames usw.. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: ICh werde sie noch weiter schreiben, also so dass man seine Server auch im Internet hochladen kann für Internetgames usw..
Meinst du damit eien Serverliste? |
||
Warbseite |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jap... Ich hab mir das so vorgestellt das jeder, der so eine Liste haben möchte für sein spiel, einfach einen freien account bei bplaced erstellt und dort kann man dann mit meinen Functionen (Dann nicht mehr UDP sondern TCP) die Listen Hochladen, auch nach dem Schema der Abrafgen der Server im Netztwerk (Also NAme, Spieler und Ip+Port). Somit soll es für jeder mann einfach gemacht werden, auch Internet Spiele zu machen (Natürlich nach dem entsprechenden Portforwarding)
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und lieferst du den php Teil dafür auch mit? ![]() Mittlerweile hab ich ja halbwegs Übung mit einfachen mySQl-Abfragen und dem nötigen php dazu, aber beim ersten Mal hab ich mir irrsinnig schwer getan und möcht auch heute nicht sagen dass ich n Profi dabei wär. mfG, Christoph. PS: Ich bevorzuge auch bplaced, aber du solltest vielleicht jeden Hoster zulassen, der php und mysql unterstützt. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok^^
wirst du es in php schreiben? wenn, dann kann ich dir dabei helfen, bzw dir den source meiner derzeitigen serverliste geben. Ist noch nicht komplett, da die website fehlt;) hier mal den source fürs opengn... die "ogn test.bb" ist noch fürn lokalen gebrauch bei mir^^ https://www.blitzforum.de/upload/file.php?id=6424 Edit: und webspace hatte ich mir auch schon reserviert(100gb traffic/month)^^ http://opengn.hostoi.com/ istn freehoster. Plante eigentlich mal wenn die website fertig ist auf First-Level-Domain umzusteigen. |
||
Warbseite |
- Zuletzt bearbeitet von Xaymar am Sa, Aug 08, 2009 12:53, insgesamt 2-mal bearbeitet
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey danke Cgamer ! Werd mal gucken ob ichs gebrauchen kann ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Praktisch, kommt mir gerade Recht. Vielen Dank! | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
ToeB, wenn du möchtest kann ich dir eine version schicken wo das webinterface fertig ist. Dauert allerdings noch 1-2 tage^^ | ||
Warbseite |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jau das wär super.. Dann kannste je gleich den ganzen teil übernehmen (also Serverlisten hochladen usw.) und in meine Lib schreiben ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das WebInterface steht jetzt. Gibt leider wieder propbleme mit dem Blitz beispiel. Kann also etwas dauern
Ach nennen wirs einfach Serverliste(nicht sehr schön, aber erfüllt seinen zweck) Edit: Nun ist auch das Problem damit beseitigt und die halbwegs getestete Version steht zum download: Serverliste + SimpleUDP Edit: in der OpenGN.bb müsst ihr bei dem ersten writeline befehl jeder funktion das /OpenGN wegmachen. Arbeite derzeit an einer neuen version. |
||
Warbseite |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Version 1.1
So ihr könnt jetzt die version 1.1 oben runterladen ![]() Was hat sich geändert ? ![]() - der Server das Spiel beendet - der Server einen zu hohen Ping hat (Als Client) und deshalb vom Client aus gekickt wird - der Server den Client Kickt - der Server einen anderen Client Kickt - ein Client beendet - ein Client gekickt wurde ![]() ![]() Code: [AUSKLAPPEN] count = UDP_CountPlayers()
For i = 1 to count name$ = UDP_GetPlayerName(i) Ping = UDP_GetPlayerPing(i) Msg$ = UDP_GetPlayerMsg(i) ID = UDP_GetPlayerID(i) Next (wer das alles ausprobieren möchte, im Beispiel "SimpleUDP, Chat" kann man es, zum kicken einfach nur auf den Spieler klicken (in der Ping liste).) Also viel spaß und bitte schreibt was dazu ! ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
hast du das ganze auch mal mit HAMASHI getestet? Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein sry tft aber das habe ich noch nicht ...
Aber Danke für den Hinweis, werde es bei gelegenheit tun und euch berichten (aber es sollte eigl. klappen ![]() mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Milgo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab jetzt mal den entsprechenden Port freigeschaltet und versucht über Internet auf mein eigenes Programm zu connecten. Ich führe also auf meinem PC einfach den Client und einmal den Host aus - beim Client kommt dann allerdings die Meldung, dass der Port schon genutzt werde.
Liegts einfach daran, dass ich das auf einem Pc mache oder wirds per Inet nicht funzen? |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja also UDP_Joingame gibt einen wert zurück. Der kann 1 oder 0 sein.Bei 0 konnte keine verbindung aufgebaut werden, kein stream erstellt werdenóder der Servere voll sein.
Mit dem Port freischalten ist das hier so ne Sache, da jeder Client nicht nur eine Verbindung zum server aufbaut sondern 2. Eine zum senden und eine zum Empfangen. Das heißt du müsstest nicht nur den Port 8000 freischalten, sondern auch den sende Port der Clients. Der wird aber immer selber ausgesucht. Du könntest, aber dann kannst du keinen localentest mehr durchführen, folgende Function benutzen, bei der man den Port für den Clienten angeben muss : Code: [AUSKLAPPEN] Function UDP_JoinGame(GameIP$,PlayerName$,Port=0,WaitTime=100)
UDP_Server = 0 If Instr(GameIp,".") > 0 GameIP = UDP_IntIP(GameIP) UDP_ServerStream = CreateUDPStream(Port) If UDP_ServerStream = 0 Return 0 WriteByte(UDP_ServerStream,UDP_Msg_new) WriteString(UDP_ServerStream,PlayerName$) SendUDPMsg(UDP_ServerStream,GameIP,UDP_ServerPort) Connection = 0 WaitMs = MilliSecs() + WaitTime While WaitMs > MilliSecs() If RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) If byte = UDP_Msg_new If UDPMsgIP(UDP_ServerStream) = GameIP UDP_PlayerID = ReadInt(UDP_ServerStream) UDP_PlayerNumber = ReadInt(UDP_ServerStream) UDP_NewPlayerNumber(UDP_PlayerNumber) UDP_Player_Port(0) = UDP_ServerPort UDP_Player_IP(0) = GameIP While Not Eof(UDP_ServerStream) TmpPlayerID = ReadInt(UDP_ServerStream) UDP_Player_Online(tmpPlayerID) = 1 UDP_Player_Name$(tmpPlayerID) = ReadString(UDP_ServerStream) Wend UDP_Player_Online(UDP_PlayerID) = 1 UDP_Player_Name$(UDP_PlayerID) = PlayerName$ Connection = 1 Exit EndIf ElseIf byte = UDP_Msg_not Connection = 0 EndIf EndIf Wend If Connection UDP_Player_Stream(0) = CreateUDPStream() If UDP_Player_Stream(0) = 0 Return 0 Return Connection End Function Falls das auch nicht hilft, weiß ich auch net weiter.... mfgToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
So es gibt jetzt wieder eine Neue version ! Leider habe ich dafür noch keine Beispiele geschrieben, kommt aber noch ![]() Folgendes wurde verändert/hinzugefügt : ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Hier Probierts aus : Code: [AUSKLAPPEN] Const UDP_ServerPort = 8000 Const UDP_PingTime = 1000 Const UDP_Msg_nom = 1 Const UDP_Msg_new = 2 Const UDP_Msg_not = 3 Const UDP_Msg_pg1 = 4 Const UDP_Msg_pg2 = 5 Const UDP_Msg_kik = 6 Const UDP_Msg_end = 7 Const UDP_Msg_ask = 8 Const UDP_Msg_att = 9 Const UDP_Msg_at2 = 10 Const UDP_CommandSign$ = "§" Global UDP_Server,UDP_ServerStream,UDP_ServerName$ Global UDP_ServerMsg$ Global UDP_ServerPass$ Global UDP_PingMS Global UDP_PlayerNumber,UDP_PlayerID Global UDP_CommandLine$ = "" Global UDP_Command$,UDP_ParameterNumber Global UDP_SendNewMsg = 0,UDP_RecvMsg = 0 Global UDP_MsgID Global UDP_EventID Global UDP_PingTimeOut = 10000 Dim UDP_Player_Online(0),UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0),UDP_Player_Name$(0) Dim UDP_Player_local(0) Dim UDP_Player_TMsg.UDP_Msg(0),UDP_Player_SendNewMsg(0),UDP_Player_RecvMsg(0) Dim UDP_Player_Ping(0),UDP_Player_PingMs(0) Dim UDP_Player_Event(0) Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg$(0) Dim UDP_Servertmp_pass(0) Dim UDP_Server_name$(0) Dim UDP_Server_ip$(0) Dim UDP_Server_port(0) Dim UDP_Server_pl1(0) Dim UDP_Server_pl2(0) Dim UDP_Server_msg$(0) Dim UDP_Server_pass(0) Type UDP_Msg Field msg$ Field ms Field ID Field From Field it End Type Type UDP_RecvMsg Field msg$ Field From Field att End Type Type UDP_Event Field typ Field ID End Type Dim UDP_Parameter$(0) ;---------- Function UDP_HostGame(GameName$,PlayerName$,PlayerNumber=1) UDP_Server = 1 UDP_ServerStream = CreateUDPStream(UDP_ServerPort) UDP_NewPlayerNumber(PlayerNumber) UDP_PlayerID = 0 UDP_ServerName = GameName UDP_Player_Online(0) = 1 UDP_Player_Name$(0) = PlayerName$ Return (UDP_ServerStream <> 0) End Function Function UDP_JoinGame(GameIP$,PlayerName$,ServerPass$="",WaitTime=100) UDP_Server = 0 If Instr(GameIp,":") > 0 GameIp = Mid(GameIP,1,Instr(GameIP,":")-1) If Instr(GameIp,".") > 0 GameIP = UDP_IntIP(GameIP) UDP_ServerStream = CreateUDPStream() If UDP_ServerStream = 0 Return 0 WriteByte(UDP_ServerStream,UDP_Msg_new) WriteString(UDP_ServerStream,PlayerName$) WriteString(UDP_ServerStream,ServerPass) SendUDPMsg(UDP_ServerStream,GameIP,UDP_ServerPort) Connection = 0 WaitMs = MilliSecs() + WaitTime While WaitMs > MilliSecs() If RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) If byte = UDP_Msg_new If UDPMsgIP(UDP_ServerStream) = GameIP UDP_PlayerID = ReadInt(UDP_ServerStream) UDP_PlayerNumber = ReadInt(UDP_ServerStream) UDP_NewPlayerNumber(UDP_PlayerNumber) UDP_Player_Port(0) = UDP_ServerPort UDP_Player_IP(0) = GameIP While Not Eof(UDP_ServerStream) TmpPlayerID = ReadInt(UDP_ServerStream) UDP_Player_Online(tmpPlayerID) = 1 UDP_Player_Name$(tmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = ReadByte(UDP_ServerStream) Wend UDP_Player_Online(UDP_PlayerID) = 1 UDP_Player_Name$(UDP_PlayerID) = PlayerName$ Connection = 1 Exit EndIf EndIf EndIf Wend If Connection UDP_Player_Stream(0) = CreateUDPStream() If UDP_Player_Stream(0) = 0 Return 0 Return Connection End Function Function UDP_SetServerMsg(ServerMsg$) If UDP_Server = 1 UDP_ServerMsg$ = ServerMsg$ EndIf End Function Function UDP_SetServerPass(ServerPass$) If UDP_Server = 1 UDP_ServerPass = ServerPass EndIf End Function Function UDP_SendMsg(Msg$,ID=-1) If UDP_Server = 1 If ID < 0 Or ID > UDP_PlayerNumber For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),0) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next Else WriteByte(UDP_Player_Stream(ID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ID),0) WriteString(UDP_Player_stream(ID),Msg$) SendUDPMsg(UDP_Player_stream(ID),UDP_Player_IP(ID),UDP_player_Port(ID)) EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 If ID < 0 Or ID > UDP_PlayerNumber WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),-1) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) Else WriteByte(UDP_Player_Stream(0),UDP_Msg_nom) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) WriteInt(UDP_Player_Stream(0),ID) WriteString(UDP_Player_stream(0),Msg$) SendUDPMsg(UDP_Player_stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf EndIf EndIf End Function Function UDP_SendMsg_Att(msg$,ID=-1) If UDP_Server = 1 If ID < 0 Or ID > UDP_PlayerNumber For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_Local(i) = 0 c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = 0 If c = 0 UDP_Player_SendNewMsg(i) = 1 EndIf Next Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = ID c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = 0 If c = 0 UDP_Player_SendNewMsg(ID) = 1 EndIf Else If UDP_Player_Online(UDP_PlayerID) = 1 And UDP_Player_Online(0) = 1 If ID < 0 Or ID > UDP_PlayerNumber c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = -1 tmp\From = UDP_PlayerID If c = 0 UDP_Player_SendNewMsg(0) = 1 Else c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = 0 c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = ID tmp\From = UDP_PlayerID If c = 0 UDP_Player_SendNewMsg(ID) = 1 EndIf EndIf EndIf End Function Function UDP_SendLocalMsg(msg$,LocalID) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),LocalID) WriteString(UDP_Player_stream(i),Msg$) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf End Function Function UDP_SendLocalMsg_att(msg$,LocalID) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_local(i) = 0 c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i c = 1:Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = LocalID If c = 0 UDP_Player_SendNewMsg(i) = 1 EndIf Next EndIf End Function Function UDP_Update(LoginBlock=0) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 If UDP_Player_SendNewMsg(i) = 1 get = 0 tmp.UDP_Msg = Null For tmp_.UDP_Msg = Each UDP_Msg If tmp_\ID = i tmp = tmp_ : Exit Next If tmp <> Null WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(i) = 0 UDP_Player_TMsg(i) = tmp UDP_Player_RecvMsg(i) = 1 Else UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf EndIf If UDP_Player_RecvMsg(i) = 1 tmp.UDP_Msg = UDP_Player_TMsg(i) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(i),UDP_Msg_Att) WriteInt(UDP_Player_Stream(i),tmp\From) WriteString(UDP_Player_Stream(i),tmp\msg) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Delete tmp UDP_Player_SendNewMsg(i) = 1 UDP_Player_RecvMsg(i) = 0 EndIf EndIf EndIf Else For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i Then Delete tmp Next UDP_Player_SendNewMsg(i) = 0 UDP_Player_RecvMsg(i) = 0 EndIf Next If UDP_PingMs <= MilliSecs() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And UDP_Player_PingMs(i) = 0 And UDP_Player_Local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_pg1) For j = 1 To UDP_PlayerNumber If UDP_Player_Online(j) = 1 WriteInt(UDP_Player_Stream(i),j) WriteInt(UDP_Player_Stream(i),UDP_PLayer_Ping(j)) EndIf Next SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) UDP_Player_PingMs(i) = MilliSecs() EndIf Next UDP_PingMs = MilliSecs() + UDP_PingTime EndIf For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i > 0 And UDP_Player_Local(i) = 0 If UDP_Player_PingMs(i) > 0 If (MilliSecs()-UDP_Player_PingMs(i)) > UDP_PingTimeOut Then UDP_KickPlayer(i) EndIf EndIf EndIf Next While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) ToID = ReadInt(UDP_serverStream) If ToID = -1 Or ToID = 0 tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 If toID = -1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> TmpID WriteByte(UDP_Player_Stream(i),UDP_Msg_nom) WriteInt(UDP_Player_Stream(i),TmpID) WriteString(UDP_Player_stream(i),tmpr\msg) SendUDPMsg(UDP_Player_stream(i),UDP_Player_IP(i),UDP_player_Port(i)) EndIf Next EndIf Else WriteByte(UDP_Player_Stream(ToID),UDP_Msg_nom) WriteInt(UDP_Player_Stream(ToID),TmpID) WriteString(UDP_Player_stream(ToID),tmpr\msg) SendUDPMsg(UDP_Player_stream(toID),UDP_Player_IP(ToID),UDP_player_Port(toID)) EndIf Case UDP_Msg_new place = UDP_GetFreePlace() New_Name$ = ReadString(UDP_ServerStream) New_Pass$ = ReadString(UDP_ServerStream) New_Port% = UDPMsgPort(UDP_ServerStream) New_IP% = UDPMsgIP(UDP_ServerStream) If LoginBlock = 0 And New_Pass = UDP_ServerPass Then If place > 0 player_accept = UDP_CreateNewPlayer(place,New_Name$,New_IP,New_Port) If player_accept > 0 WriteByte(UDP_Player_Stream(place),UDP_Msg_new) WriteInt(UDP_Player_Stream(place),place) WriteInt(UDP_Player_Stream(place),UDP_PlayerNumber) For i = 0 To UDP_PlayerNumber If place <> i If UDP_Player_Online(i) = 1 WriteInt(UDP_Player_Stream(place),i) WriteString(UDP_Player_Stream(place),UDP_Player_Name(i)) WriteByte(UDP_Player_Stream(place),UDP_Player_Local(i)) EndIf EndIf Next SendUDPMsg(UDP_Player_Stream(place),UDP_Player_IP(place),UDP_Player_Port(place)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),0) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = place EndIf EndIf EndIf Case UDP_Msg_pg1 TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 UDP_Player_Ping(TmpID) = MilliSecs() - UDP_Player_PingMs(TmpID) UDP_Player_PingMs(TmpID) = 0 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_pg2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_PLayer_Port(TmpID)) EndIf Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) If UDP_Player_Online(TmpID) = 1 UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID CloseUDPStream(UDP_Player_Stream(TmpID)) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),TmpID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next EndIf Case UDP_Msg_ask IP = UDPMsgIP(UDP_ServerStream) Port = UDPMsgPort(UDP_ServerStream) count = UDP_CountPlayers() WriteByte(UDP_ServerStream,UDP_Msg_ask) WriteString(UDP_ServerStream,UDP_ServerName$) WriteInt(UDP_ServerStream,count) WriteInt(UDP_ServerStream,UDP_PlayerNumber) WriteString(UDP_ServerStream,UDP_ServerMsg) WriteByte(UDP_ServerStream,(UDP_ServerPass<>"")) SendUDPMsg(UDP_ServerStream,Ip,Port) Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) toID = ReadInt(UDP_ServerStream) ;UDP_Player_Msg(TmpID) = ReadString(UDP_ServerStream) If toID = -1 Or ToID = 0 tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_ServerStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" And toID = -1 WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And tmpID <> i c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = i c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = i tmp\From = TmpID If c = 0 UDP_Player_SendNewMsg(i) = 1 UDP_Player_TMsg(i) = tmp EndIf Next EndIf Else If tmpr\msg <> "" WriteByte(UDP_Player_Stream(TmpID),UDP_Msg_at2) SendUDPMsg(UDP_Player_Stream(TmpID),UDP_Player_IP(TmpID),UDP_Player_Port(TmpID)) c = 0 For tmp.UDP_Msg = Each UDP_Msg If tmp\ID = toID c = 1 : Exit Next tmp.UDP_msg = New UDP_Msg tmp\msg$ = tmpr\msg$ tmp\ms = MilliSecs() tmp\ID = toID tmp\From = TmpID If c = 0 UDP_Player_SendNewMsg(toID) = 1 UDP_Player_TMsg(toID) = tmp EndIf EndIf Case UDP_Msg_at2 TmpID = ReadInt(UDP_ServerStream) Delete UDP_Player_TMsg(tmpID) UDP_Player_SendNewMsg(TmpID) = 1 UDP_Player_RecvMsg(TmpID) = 0 End Select Wend ElseIf UDP_Server = 0 If UDP_Player_SendNewMsg(0) = 1 tmp.UDP_Msg = First UDP_Msg If tmp <> Null WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\ms = MilliSecs() UDP_Player_SendNewMsg(0) = 0 UDP_Player_TMsg(0) = tmp UDP_Player_RecvMsg(0) = 1 Else UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf If UDP_Player_RecvMsg(0) = 1 tmp.UDP_Msg = UDP_Player_TMsg(0) If tmp\ms <= MilliSecs() - 64 Then WriteByte(UDP_Player_Stream(0),UDP_Msg_Att) WriteInt(UDP_Player_Stream(0),tmp\From) WriteInt(UDP_Player_Stream(i),tmp\ID) WriteString(UDP_Player_Stream(0),tmp\msg) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) tmp\it = tmp\it + 1 tmp\ms = MilliSecs() If tmp\it => 16 Delete tmp UDP_Player_SendNewMsg(0) = 0 UDP_Player_RecvMsg(0) = 0 EndIf EndIf EndIf While RecvUDPMsg(UDP_ServerStream) byte = ReadByte(UDP_ServerStream) Select byte Case UDP_Msg_nom TmpID = ReadInt(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 0 Case UDP_Msg_new TmpPlayerID = ReadInt(UDP_ServerStream) LocalPlayer = ReadByte(UDP_serverStream) UDP_Player_Online(TmpPlayerID) = 1 UDP_Player_Name$(TmpPlayerID) = ReadString(UDP_ServerStream) UDP_Player_Local(tmpPlayerID) = LocalPlayer tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_New tmpe\ID = tmpPlayerID Case UDP_Msg_pg1 While Not Eof(UDP_ServerStream) TmpID = ReadInt(UDP_ServerStream) UDP_Player_Ping(TmpID) = ReadInt(UDP_ServerStream) Wend WriteByte(UDP_Player_Stream(0),UDP_Msg_pg1) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) UDP_Player_pingms(0) = MilliSecs() Case UDP_Msg_pg2 UDP_Player_ping(0) = MilliSecs() - UDP_Player_pingms(0) Case UDP_Msg_kik TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_kik tmpe\ID = tmpID Case UDP_Msg_end TmpID = ReadInt(UDP_ServerStream) UDP_Player_Online(TmpID) = 0 tmpe.UDP_Event = New UDP_Event tmpe\typ = UDP_Msg_end tmpe\ID = tmpID Case UDP_Msg_att TmpID = ReadInt(UDP_ServerStream) ;UDP_Player_Msg(TmpID) = ReadString(UDP_ServerStream) tmpr.UDP_RecvMsg = New UDP_RecvMsg tmpr\msg = ReadString(UDP_serverStream) tmpr\From = TmpID tmpr\att = 1 If tmpr\msg <> "" WriteByte(UDP_Player_Stream(0),UDP_Msg_at2) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_player_Port(0)) EndIf Case UDP_Msg_at2 Delete UDP_Player_TMsg(0) UDP_Player_SendNewMsg(0) = 1 UDP_Player_RecvMsg(0) = 0 End Select Wend EndIf End Function Function UDP_GetMsg$() tmp.UDP_RecvMsg = First UDP_RecvMsg If tmp <> Null UDP_MsgID= tmp\From tmpMsg$ = tmp\msg Delete tmp Return tmpmsg$ EndIf Return "" End Function Function UDP_KickPlayer(ID) If UDP_Server = 1 For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 WriteByte(UDP_Player_Stream(i),UDP_Msg_Kik) WriteInt(UDP_Player_Stream(i),ID) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next UDP_Player_Online(ID) = 0 UDP_Player_Port(ID) = 0 UDP_Player_IP(ID) = 0 UDP_Player_PingMs(ID) = 0 CloseUDPStream(UDP_Player_Stream(ID)) tmp.UDP_Event = New UDP_Event tmp\typ = UDP_Msg_kik tmp\ID = ID EndIf End Function Function UDP_End() If UDP_Server = 1 For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 WriteByte(UDP_Player_Stream(i),UDP_Msg_End) WriteInt(UDP_Player_Stream(i),0) SendUDPMsg(UDP_Player_Stream(i),UDP_Player_IP(i),UDP_Player_Port(i)) EndIf Next Delay 50 If UDP_ServerStream <> 0 CloseUDPStream(UDP_ServerStream) For i = 1 To UDP_PLayerNumber If UDP_PLayer_Online(i) = 1 CloseUDPStream(UDP_Player_Stream(i)) EndIf Next Else If UDP_ServerStream <> 0 And UDP_Player_Stream(0) <> 0 WriteByte(UDP_Player_Stream(0),UDP_Msg_End) WriteInt(UDP_Player_Stream(0),UDP_PlayerID) SendUDPMsg(UDP_Player_Stream(0),UDP_Player_IP(0),UDP_Player_Port(0)) Delay 50 CloseUDPStream(UDP_Player_Stream(0)) CloseUDPStream(UDP_ServerStream) EndIf EndIf End Function Function UDP_GetEvent() tmp.UDP_Event = First UDP_Event If tmp <> Null UDP_EventID = tmp\ID typ = tmp\typ Delete tmp Return typ EndIf Return 0 End Function Function UDP_CountServers(MaxServer=100,WaitTime=500) Dim UDP_Servertmp_name$(MaxServer) Dim UDP_Servertmp_ip$(MaxServer) Dim UDP_Servertmp_port(MaxServer) Dim UDP_Servertmp_pl1(MaxServer) Dim UDP_Servertmp_pl2(MaxServer) Dim UDP_Servertmp_msg(MaxServer) Dim UDP_Servertmp_pass(MaxServer) IP = UDP_IntIP(UDP_BroadcastIP()) UDP_ServerStream = CreateUDPStream() WriteByte(UDP_ServerStream,UDP_Msg_ask) SendUDPMsg(UDP_ServerStream,IP,UDP_ServerPort) ms = MilliSecs() serv = 0 Repeat If RecvUDPMsg(UDP_ServerStream) If ReadByte(UDP_ServerStream) = UDP_Msg_ask UDP_Servertmp_name$(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_ip(serv) = DottedIP(UDPMsgIP(UDP_ServerStream)) UDP_Servertmp_port(serv) = UDPMsgPort(UDP_ServerStream) UDP_Servertmp_pl1(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_pl2(serv) = ReadInt(UDP_ServerStream) UDP_Servertmp_msg(serv) = ReadString(UDP_ServerStream) UDP_Servertmp_pass(serv) = ReadByte(UDP_ServerStream) serv = serv + 1 If serv > MaxServer Exit EndIf EndIf Until ms <= MilliSecs() - WaitTime MaxServer = serv-1 Dim UDP_Server_name$(MaxServer) Dim UDP_Server_ip$(MaxServer) Dim UDP_Server_port(MaxServer) Dim UDP_Server_pl1(MaxServer) Dim UDP_Server_pl2(MaxServer) Dim UDP_Server_msg(MaxServer) Dim UDP_Server_pass(MaxServer) For i = 0 To MaxServer UDP_Server_name$(i) = UDP_Servertmp_name(i) UDP_Server_ip$(i) = UDP_Servertmp_ip(i) UDP_Server_port(i) = UDP_Servertmp_port(i) UDP_Server_pl1(i) = UDP_Servertmp_pl1(i) UDP_Server_pl2(i) = UDP_Servertmp_pl2(i) UDP_Server_msg(i) = UDP_Servertmp_msg(i) UDP_Server_pass(i) = UDP_Servertmp_pass(i) Next Dim UDP_Servertmp_name$(0) Dim UDP_Servertmp_ip$(0) Dim UDP_Servertmp_port(0) Dim UDP_Servertmp_pl1(0) Dim UDP_Servertmp_pl2(0) Dim UDP_Servertmp_msg(0) Dim UDP_Servertmp_pass(0) CloseUDPStream(UDP_ServerStream) Return MaxServer+1 End Function Function UDP_GetServerName$(ID) Return UDP_Server_name$(ID-1) End Function Function UDP_GetServerIP$(ID) Return UDP_Server_IP$(ID-1)+":"+UDP_Server_Port(ID-1) End Function Function UDP_GetServerPlayerNumber$(ID) Return UDP_Server_pl1(ID-1)+"/"+UDP_Server_pl2(ID-1) End Function Function UDP_GetServerMsg$(ID) Return UDP_Server_msg$(ID-1) End Function Function UDP_GetServerPass(ID) Return UDP_Server_pass(ID-1) End Function Function UDP_CountPlayers() count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 Next Return count End Function Function UDP_GetPlayerName$(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 If count = ID Return UDP_Player_Name(i) Next Return "" End Function Function UDP_GetPlayerPing(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 If count = ID Return UDP_Player_Ping(i) Next Return 0 End Function Function UDP_GetPlayerID(ID) count = 0 For i = 0 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 count = count + 1 If count = ID Return i Next Return "" End Function Function UDP_IntIP(IP$) If Instr(IP$,".") <> 0 a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) If Instr(IP$,".") <> 0 a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) If Instr(IP$,".") <> 0 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 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 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 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_AddCommand$(Name$) UDP_CommandLine = UDP_CommandLine$+Name$+UDP_CommandSign$ End Function Function UDP_GetCommand$() txt$ = Mid(UDP_CommandLine,1,Instr(UDP_CommandLine,UDP_CommandSign)-1) lentxt = Len(txt) UDP_Command = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Mid(txt$,Len(UDP_Command)+2,Len(txt$)) count = 0 oldPos = 1 intr = Instr(txt$,",") While intr > 0 count = count + 1 oldpos = intr + 1 intr = Instr(txt$,",",oldpos) Wend Dim UDP_Parameter(count) komma = 0 While Instr(txt$,",") > 0 UDP_Parameter(komma) = Mid(txt$,1,Instr(txt$,",")-1) txt$ = Right(txt$,Len(txt$)-Len(UDP_Parameter(komma))-1) komma = komma + 1 Wend UDP_Parameter(komma) = txt$ UDP_ParameterNumber = count UDP_CommandLine = Mid(UDP_CommandLine,Instr(UDP_CommandLine,UDP_CommandSign)+1,Len(UDP_CommandLine)) End Function Function UDP_CreateLocalPlayer(Name$) place = UDP_GetFreePlace() If place = 0 Return 0 UDP_CreateNewPlayer(place,Name$,0,0,1) For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 1 And i <> place And UDP_Player_local(i) = 0 WriteByte(UDP_Player_Stream(i),UDP_Msg_new) WriteInt(UDP_Player_Stream(i),place) WriteByte(UDP_Player_Stream(i),1) WriteString(UDP_Player_Stream(i),UDP_Player_Name$(place)) SendUDPMsg(UDP_Player_Stream(i),UDP_PLayer_IP(i),UDP_Player_Port(i)) EndIf Next Return place End Function ;---------- Function UDP_CreateNewPlayer(place,Name$,IP,Port,LocalPlayer=0) If loacalPlayer = 0 UDP_Player_Stream(place) = CreateUDPStream() If UDP_Player_Stream(place) = 0 Return 0 UDP_Player_Online(place) = 1 UDP_Player_Name$(place) = Name$ UDP_Player_Port(place) = Port UDP_Player_IP(place) = IP UDP_Player_Local(place) = localplayer Return 1 End Function Function UDP_GetFreePlace() For i = 1 To UDP_PlayerNumber If UDP_Player_Online(i) = 0 Return i Next Return 0 End Function Function UDP_NewPlayerNumber(Anzahl) UDP_PlayerNumber = Anzahl Dim UDP_Player_Online(Anzahl),UDP_Player_Stream(Anzahl),UDP_Player_IP(Anzahl),UDP_Player_Port(Anzahl),UDP_Player_Name$(Anzahl) Dim UDP_Player_Local(Anzahl) Dim UDP_Player_TMsg.UDP_Msg(Anzahl),UDP_Player_SendNewMsg(Anzahl),UDP_Player_RecvMsg(Anzahl) Dim UDP_Player_Event(Anzahl) Dim UDP_Player_Ping(Anzahl),UDP_Player_PingMs(Anzahl) End Function Viel Spaß !!! mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
- Zuletzt bearbeitet von ToeB am Di, Okt 13, 2009 18:48, insgesamt einmal bearbeitet
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group