Ja bloss reagiere ich doch wenn jemand disconnected.
Revieve_all() wird in der Hauptschleife aufgerufen.
Code: Alles auswählen
Procedure recieve_all()
*Buffer = AllocateMemory(3072)
Global SEvent = NetworkServerEvent()
ExamineIPAddresses()
If SEvent
Global ClientID = EventClient()
Select SEvent
Case 1
AddElement(PlayerS())
PlayerS()\PlayerID = ClientID
PlayerS()\Index = ListIndex(PlayerS())
PlayerS()\PlayerName = acc_name
PlayerS()\PlayerOnline = 1
Global CountList = CountList(PlayerS()) -1
AddGadgetItem(#ConsoleEditorGadged,a,"Neuer Client Connectet! " +Str(PlayerS()\PlayerID) +Chr(13))
AddGadgetItem(#ConsoleEditorGadged,a,"PlayerIndex " +Str(PlayerS()\Index) +Chr(13))
AddGadgetItem(#ConsoleEditorGadged,a,"PlayerCountList " +Str(CountList) +Chr(13))
;AddGadgetItem(#ConsoleEditorGadged,a,"ListenID: " +Str(ListCount)+ Chr(10))
Case 2
ReceiveNetworkData(PlayerS()\PlayerID, *Buffer, 3072)
neuText.s = PeekS(*Buffer)
Global username.s = StringField(neuText.s, 1, ";")
Global password.s = StringField(neuText.s, 2, ";")
SQL_Login(username.s,password.s,ClientID)
Case 3
SetGadgetText(#ConsoleEditorGadged,"Client " +Str(PlayerS()\PlayerID)+ " versucht Datei zu schicken!"+ Chr(10))
Case 4
AddGadgetItem(#ConsoleEditorGadged,a,"Client " +Str(PlayerS()\PlayerID)+ " verlässt den Server"+ Chr(10))
AddGadgetItem(#ConsoleEditorGadged,a,"ListenID_out: " +Str(count)+ Chr(10))
AddGadgetItem(#ConsoleEditorGadged,a,"PlayerName: " +acc_name+ Chr(10))
AddGadgetItem(#ConsoleEditorGadged,a,"PlayerIndex_out: " +Str(PlayerS()\Index)+ Chr(10))
count.l = CountGadgetItems(#ListPlayer) - 1
ForEach PlayerS()
For i = 0 To count
If Str(PlayerS()\PlayerID) = StringField(GetGadgetItemText(#ListPlayer, i, 0),2,";")
RemoveGadgetItem(#ListPlayer, i)
; DeleteElement(PlayerS())
count - 1
Break 2
EndIf
Next i
; AddGadgetItem(#ListPlayer,-1,PlayerS()\PlayerName+";"+Str(PlayerS()\PlayerID))
Next
If ListCount_out = 0
AddGadgetItem(#ConsoleEditorGadged,a,"Es ist niemand Online"+ Chr(10))
Else
AddGadgetItem(#ConsoleEditorGadged,a,"Es sind noch "+Str(ListCount_out)+" Player in der Liste"+ Chr(10))
EndIf
EndSelect
EndIf
FreeMemory(*Buffer)
EndProcedure
Case 1 wenn jemand connected
Case 4 wenn jemand disconnected
Procedure SQL_login prüft ob die Zugansdaten stimmen.
Stimmen die Daten dann wird ein neues Item in die Liste gesetzt mit dem Namen und der ClientID
Code: Alles auswählen
Procedure SQL_Login(username.s,password.s,ClientID)
If OpenDatabase(1, "xxx", "xxx", "xxx")
If DatabaseQuery(1,"SELECT * FROM accounts WHERE acc_name LIKE '"+username+"'")
Global COUNTcols = DatabaseColumns(1)
While NextDatabaseRow(1)
Global sql_id.l = GetDatabaseLong (1, 3)
Global acc_name.s = GetDatabaseString(1, 1)
Protected acc_pwd.s = GetDatabaseString(1, 2)
Wend
If username = acc_name And password = acc_pwd
SendNetworkString(ClientID, "Lo1")
Global PlayerList = AddGadgetItem(#ListPlayer,PlayerS()\Index,acc_name+";"+Str(ClientID))
Else
SendNetworkString(ClientID, "Lo2")
CloseDatabase(1)
EndIf
Else
MessageRequester("QUERY","Tabelle nicht gefunden")
CloseDatabase(1)
EndIf
Else
MessageRequester("DB","Datenbank geschlossen")
CloseDatabase(1)
EndIf
EndProcedure
Jetzt weiss ich nicht wie ich deinen Code benutzen könnte.
Sitze an dem Problem schon 3 Tage.
mfg
Cofter