Seite 1 von 1

problem mit NetworkServerEvent() [glaube ich]

Verfasst: 15.10.2005 18:43
von IcedCoffee
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

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

Verfasst: 15.10.2005 19:26
von AND51
Sorry, dass ich dir net helfe kann, aberich wollte nur auch die Rehctshcriebfhler hinweisen. Das weißt du doch, oder?

You are close the server.
Würde bestenfalls heißen: "Du bist nah am Server dran."
Du meinst "You have closed the server." (Du hast den Server geschlossen.)
Tipp: Mach es erstmal auf deutsch, wenn du willst, helfe ich dir dann beim englischem Teil...

Verfasst: 15.10.2005 20:22
von IcedCoffee
oh lol
thx mach ich

ps: aber nich heute ''muss' jetzt feiern gehen :D

Verfasst: 15.10.2005 20:30
von HeX0R
1.) Öhm... is das tatsächlich dein Coding-Stil ? Das is ja ein völliges Durcheinander. Musste erst mal a weng "aufräumen", bevor ich überhaupt mal sehen konnte was da abgehen sollte. Aber schliesslich musst du ja damit klar kommen ;)
2.)

Code: Alles auswählen

WndThreadID = CreateThread(@WindProc(),0)
anstatt

Code: Alles auswählen

WndThreadID = CreateThread(WindProc(),"")
3.) Deine Schleife ganz unten rennt sich's Hirn ein, wenn du die nicht verlangsamst:

Code: Alles auswählen

Repeat
  If Server = 1
    Select NetworkServerEvent()
    	Case 0 : 	Delay(10)
      Case 1 : 	NewClient(NetworkClientID()) : Debug "test"
      ;Case 4 : ClientLeft(NetworkClientID())
    EndSelect
  EndIf
 
  If Client = 1
    Select NetworkClientEvent(ConnectionID)
    	Case 0 : Delay(10)
      Case 2 : GetNetworkData()
    EndSelect
  EndIf
 
  If Client = 0 And Server = 0
    Delay(10)
  EndIf
ForEver

Verfasst: 16.10.2005 10:43
von IcedCoffee
achso oh
ich habe das @ vor WindProc() vergessen
jetzt geht es
edit: thx