problem mit NetworkServerEvent() [glaube ich]
Verfasst: 15.10.2005 18:43
MOin
ich bin gerade dabei einen ''kleinen'' Lan Chat zu proggen
aber bekomme probleme mit NetworkServerEvent() weil wenn ein neuer Client kommt bekomme ich keine nachicht angezeigt aber eigentlich müste er mir eine nachicht anzeigen
"> New Client (IP: "+Clients()\IP+" ID:"+Str(Clients()\ClientID)+")"
^^das ist es was ich sehen will aber nix
so den NetworkServerEvent() befehl habe ich in zeile 258
ich bin gerade dabei einen ''kleinen'' Lan Chat zu proggen
aber bekomme probleme mit NetworkServerEvent() weil wenn ein neuer Client kommt bekomme ich keine nachicht angezeigt aber eigentlich müste er mir eine nachicht anzeigen
"> New Client (IP: "+Clients()\IP+" ID:"+Str(Clients()\ClientID)+")"
^^das ist es was ich sehen will aber nix
so den NetworkServerEvent() befehl habe ich in zeile 258
Code: Alles auswählen
Declare Open_Main_Window()
Declare WindProc()
Declare WindProcEnd()
Declare Init()
Declare OpenConnection()
Declare CreateServer()
Declare SendAll(Text.s)
Declare.s GetMyIP()
Declare.s GetIPbyClientID(ClienID)
Structure Clients
ClientID.l
IP.s
Nick.s
EndStructure
WndThreadID.l
Global ConnectionID.b
Global OpenServer.b
Global Client.b
Global Server.b
NewList Clients.Clients()
Procedure.s GetMyIP()
Structure IPINFO
dwAddr.l
dwIndex.l
dwBCastAddr.l
dwReasmSize.l
unused1.l
unused2.l
EndStructure
Structure MIB_IPADDRTABLE
dwEntries.l
mIPInfo.IPINFO[2]
EndStructure
Ret.l
GetIpAddrTable_(0 , @Ret, 0)
GetIpAddrTable_(@IpTable.MIB_IPADDRTABLE , @Ret, 1)
ProcedureReturn IPString(IpTable\mIPInfo[1]\dwAddr)
EndProcedure
Procedure.s GetIPbyClientID(ClientID)
Structure IPType
Reserved.w
Port.w
StructureUnion
IPLong.l
IP.b[4]
EndStructureUnion
Zeros.l[2]
EndStructure
remotip.s
s = SizeOf(IPType)
res = getpeername_(ClientID, @IP.IPType, @s)
If res = 0
remotip = StrU(IP\IP[0], #Byte)+"."+StrU(IP\IP[1], #Byte)+"."+StrU(IP\IP[2], #Byte)+"."+StrU(IP\IP[3], #Byte)
Else
remotip = ""
EndIf
ProcedureReturn remotip
EndProcedure
Enumeration
#Main_Window
EndEnumeration
Enumeration
#To_IP
#IPAddress
#with_the_Port_Con
#Port_Con
#Conect
#or
#Create_Server
#with_the_Port_Ser
#Port_Ser
#Join
#the_Chat_with_the_nick_mame
#Nick
#Chat
#Text
#Send
#Klappe
EndEnumeration
Procedure Open_Main_Window()
If OpenWindow(#Main_Window, 390, 256, 525, 454, #PB_Window_SystemMenu | #PB_Window_TitleBar , "NLALC - (c) by IcedCoffee")
If CreateGadgetList(WindowID())
TextGadget(#To_IP, 60, 10, 30, 15, "to IP :")
IPAddressGadget(#IPAddress, 90, 5, 115, 20)
TextGadget(#with_the_Port_Con, 210, 10, 65, 15, "with the Port :")
StringGadget(#Port_Con, 275, 5, 40, 20, "", #PB_String_Numeric)
SetGadgetText(#Port_Con,"6499")
SendMessage_(GadgetID(#Port_Con), #EM_LIMITTEXT, 5, 0)
ButtonGadget(#Conect, 5, 5, 50, 20, "Conect")
TextGadget(#or, 320, 10, 15, 15, "or")
ButtonGadget(#Create_Server, 335, 5, 75, 20, "Create Server")
TextGadget(#with_the_Port_Ser, 415, 10, 65, 15, "with the Port :")
StringGadget(#Port_Ser, 480, 5, 40, 20, "", #PB_String_Numeric)
SetGadgetText(#Port_Ser,"6499")
SendMessage_(GadgetID(#Port_Ser), #EM_LIMITTEXT, 5, 0)
ButtonGadget(#Join, 5, 25, 35, 20, "Join")
TextGadget(#the_Chat_with_the_nick_mame, 45, 30, 140, 15, "the Chat with the nick mame :")
StringGadget(#Nick, 190, 25, 95, 20, "", #PB_String_ReadOnly)
SendMessage_(GadgetID(#Nick), #EM_LIMITTEXT, 12, 0)
ListViewGadget(#Chat, 5, 45, 515, 385)
StringGadget(#Text, 5, 430, 420, 20, "")
ButtonGadget(#Send, 425, 430, 75, 20, "Send")
ButtonGadget(#Klappe, 500, 430, 20, 20, "\/")
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
EndProcedure
Procedure WindProc()
Init()
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadgetID()
Case #Conect : OpenConnection()
Case #Create_Server : CreateServer()
; Case #Send : SendText()
EndSelect
Case #PB_Event_CloseWindow : WindProcEnd()
EndSelect
ForEver
EndProcedure
Procedure WindProcEnd()
If OpenServer = 1
CloseNetworkConnection(OpenServer) : OpenServer = 0
ClearGadgetItemList(#Chat)
MessageRequester("NLALC - Message", "You are close the server")
EndIf
If ConnectionID > 0
CloseNetworkConnection(ConnectionID)
EndIf
CloseWindow(#Main_Window)
End
EndProcedure
Procedure Init()
If InitNetwork() = 0
MessageRequester("NLALC - Error", "Cann't InitNetwork()")
End
EndIf
If Open_Main_Window() = 0
MessageRequester("NLALC - Error", "Cann't Open_Main_Window()")
End
EndIf
EndProcedure
WndThreadID = CreateThread(WindProc(),"")
Procedure OpenConnection()
If ConnectionID <> 0
If MessageRequester("NLALC - Message","You would to left the server?",#PB_MessageRequester_YesNo) = 6
CloseNetworkConnection(ConnectionID) : ConnectionID = 0
ClearGadgetItemList(#Chat)
MessageRequester("NLALC - Message", "You are left the server")
EndIf
EndIf
If OpenServer <> 0
If MessageRequester("NLALC - Message","You would to close the server?",#PB_MessageRequester_YesNo) = 6
CloseNetworkServer() : OpenServer = 0
ClearGadgetItemList(#Chat)
MessageRequester("NLALC - Message", "You are close the server")
EndIf
EndIf
If ConnectionID = 0 And OpenServer = 0
ConnectionID = OpenNetworkConnection(GetGadgetText(#IPAddress), Val(GetGadgetText(#Port_Con)))
If ConnectionID <> 0
MessageRequester("NLALC - Message", "You are connect to the server"+Chr(10)+Chr(10)+GetGadgetText(#IPAddress)+":"+GetGadgetText(#Port_Con))
Client = 1
Else
MessageRequester("NLALC - Error", "Cann't OpenNetworkConnection()")
EndIf
EndIf
EndProcedure
Procedure CreateServer()
If ConnectionID <> 0
If MessageRequester("NLALC - Message","You would to left the server?",#PB_MessageRequester_YesNo) = 6
CloseNetworkConnection(ConnectionID) : ConnectionID = 0
ClearGadgetItemList(#Chat)
MessageRequester("NLALC - Message", "You are left the server")
EndIf
EndIf
If OpenServer <> 0
If MessageRequester("NLALC - Message","You would to close the server?",#PB_MessageRequester_YesNo) = 6
CloseNetworkServer() : OpenServer = 0
ClearGadgetItemList(#Chat)
MessageRequester("NLALC - Message", "You are close the server")
EndIf
EndIf
If ConnectionID = 0 And OpenServer = 0
Port_Ser = Val(GetGadgetText(#Port_Ser))
If Port_Ser = 0
SetGadgetText(#Port_Ser, "6499")
Port_Ser = 6499
EndIf
If CreateNetworkServer(Port_Ser)
OpenServer = 1
Server = 1
MessageRequester("NLALC - Message", "You have create a Network Server")
AddGadgetItem(#Chat, -1, " ---------------------------------------------------------------")
AddGadgetItem(#Chat, -1, "|||| The "+Chr($93)+"Nearly Like A Lan Chat"+Chr($94)+" Server ||||")
AddGadgetItem(#Chat, -1, " ---------------------------------------------------------------")
AddGadgetItem(#Chat, -1, "|||| Version: 0.1b ||||")
AddGadgetItem(#Chat, -1, " ---------------------------------------------------------------")
AddGadgetItem(#Chat, -1, "|||| Copyright © 2005 by IcedCoffee ||||")
AddGadgetItem(#Chat, -1, " ---------------------------------------------------------------")
AddGadgetItem(#Chat, -1, " The Server IP: "+GetMyIP())
AddGadgetItem(#Chat, -1, " The Server Port: "+Str(Port_Ser))
AddGadgetItem(#Chat, -1, " The Time is "+FormatDate("%hh:%ii:%ss", Date()))
AddGadgetItem(#Chat, -1, "")
Else
MessageRequester("NLALC - Error", "Cann't CreateNetworkServer("+Str(Port_Ser)+")")
EndIf
EndIf
EndProcedure
Procedure NewClient(ClientID)
AddElement(Clients())
Clients()\ClientID = ClientID
Clients()\IP = GetIPbyClientID(ClientID)
AddGadgetItem(#Chat, -1, "> New Client (IP: "+Clients()\IP+" ID:"+Str(Clients()\ClientID)+")")
SendAll("> New Client (IP: "+Clients()\IP+" ID:"+Str(Clients()\ClientID)+")")
EndProcedure
Procedure SendAll(Text.s)
ResetList(Clients())
While NextElement(Clients())
SendNetworkString(Clients()\ClientID, Text)
Wend
EndProcedure
Procedure GetNetworkData()
Text.s = Space(10)
ganzertext.s = ""
Repeat
lenge = ReceiveNetworkData(ConnectionID, Text, 10)
If lenge <> 10
ganzertext = ganzertext+Text
Break
Else
ganzertext = ganzertext+Text
EndIf
ForEver
AddGadgetItem(#Chat, -1, ganzertext)
EndProcedure
Repeat
If Server = 1
Select NetworkServerEvent()
Case 1 : NewClient(NetworkClientID()) : Debug "test"
;Case 4 : ClientLeft(NetworkClientID())
EndSelect
EndIf
If Client = 1
Select NetworkClientEvent(ConnectionID)
Case 2 : GetNetworkData()
EndSelect
EndIf
If Client = 0 And Server = 0
Delay(10)
EndIf
ForEver