Seite 1 von 1

Kleiner LAN-Chat

Verfasst: 01.11.2005 15:14
von KeyKon
Dies ist einfach nur ein kleiner LAN-Chat mit Server und Client (wer hätte es gedacht). Schauts euch mal an:
http://keykon.ke.ohost.de/daten/chat.zip Zip,33KB
Viel Spaß! Würde mich über Feedback freuen <)

KeyKon

Verfasst: 01.11.2005 16:49
von Blackskyliner
Nicht schlecht, des mit der Ausgabe ist nett gemacht :). Ich mache zurzeit auch einen Chat aber wird bisschen grösser ausgelegt sein ;)

Achja und mit der Farbe gibts da noch fehler... ich hatte z.B. fie Farbe Schwarz obwohl ich Grün ausgewählt hatte...

WinXP SP2 (Ich hasse dieses System...)
Hab beim FarbSelecter mit ENTER bestätigt.

Re: Kleiner LAN-Chat

Verfasst: 04.07.2013 18:49
von julianhb89
Tagchen,


Bin noch relativ neu was das Thema PB angeht und hab großes Interesse einen LAN Chat zu schreiben. Drum hole ich diese alte Kamelle hoch. Würdest du (Threadersteller) mir eventuell Einblicke in deinen Source Code gewähren? Das wäre super. Hoffe das du noch aktiv bist. :D

Re: Kleiner LAN-Chat

Verfasst: 05.07.2013 03:14
von KeyKon
Puh, also den 8 Jahre alten Code möchte ich dir ungern antun, da war ich noch ganz frisch beim Programmieren und das Ganze war ein ziemliches Gepfriemel, mal ganz davon abgesehen, dass es wohl im aktuellen PB nur mit seeehr vielen Änderungen wieder zum Leben erweckt werden kann.
Prinzipiell ist so ein Chat, wenn man absolut keinen Wert auf Komfort legt aber recht einfach zu machen, vor allem mit einem dedicated Server, wie in diesem Fall.
Ich gugg gerne mal in meinem Archiv ob ich was Kleines finde, ich hab mich nämlich durchaus viele Male mit solchen Netzwerk-Geschichten beschäftigt!

LG KeyKon

Re: Kleiner LAN-Chat

Verfasst: 06.07.2013 00:20
von julianhb89
Hey super, vielen Dank :praise:

Da bin ich mal gespannt :lurk:

Re: Kleiner LAN-Chat

Verfasst: 06.07.2013 11:03
von KeyKon
So, hier mal so ziemlich das Abgespeckteste was geht.
Ist aber im Prinzip sehr unschön, also seh es bitte nur als Grundlagenerklärung, wenn du was umfangreicheres machst solltest du auf einige Sachen achten:
  • -Frontend und Backend sollten durch Thread getrennt laufen
    -Es müssen beim Netzwerkverkehr, gerade wenn viel Aufkommen zu erwarten ist, saubere Packages geschnürt und verschickt werden, da mehrere im Buffer liegen könnten und getrennt werden müssen
    -Beim Fenster-Design sollte man Konstanten verwenden um den Überblick zu behalten

Server:

Code: Alles auswählen

EnableExplicit

InitNetwork()

#BUFFERSIZE = 1024

Define *receiveBuffer = AllocateMemory(#BUFFERSIZE)
Define receivedLen

NewList Users.i()

If Not CreateNetworkServer(0,12345)
  Debug "FailCreation"
  End
EndIf

OpenConsole()

PrintN("Server up and running!")

Repeat
  
  Select NetworkServerEvent()
    Case #PB_NetworkEvent_Connect
      PrintN("New User")
      AddElement(Users())
      Users() = EventClient()
      
    Case #PB_NetworkEvent_Disconnect
      PrintN("Lost User")
      ForEach Users()
        If Users() = EventClient()
          DeleteElement(Users())
          Break
        EndIf
      Next
      
    Case #PB_NetworkEvent_Data
      Print("Message - ")
      receivedLen = ReceiveNetworkData(EventClient(),*receiveBuffer,#BUFFERSIZE)
      
      If receivedLen > 0
        PrintN(PeekS(*receiveBuffer,receivedLen))
        
        ForEach Users()
          If Users() <> EventClient()
            SendNetworkData(Users(),*receiveBuffer,receivedLen)
          EndIf
        Next
        
      Else
        PrintN("Fail")
        
      EndIf
      
    Default
      Delay(5)
      
  EndSelect
  
ForEver
Client:

Code: Alles auswählen

EnableExplicit

#BUFFERSIZE = 1024

Define *receiveBuffer = AllocateMemory(1024)
Define *sendBuffer

Define cid
Define name.s = "KeyKon2"
Define sendText.s

InitNetwork()

OpenWindow(0,0,0,640,480,"MiniChat",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)

ListIconGadget(0,10,10,620,430,"Chat",619)
StringGadget(1,10,450,620,20,"")

AddKeyboardShortcut(0,#PB_Shortcut_Return,0)

cid = OpenNetworkConnection("127.0.0.1",12345)
If cid = 0
  Debug "FailConnection"
  End
EndIf

Repeat
  
  Select WaitWindowEvent(5)
    Case #PB_Event_CloseWindow
      CloseNetworkConnection(cid)
      End
      
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0
          If Len(GetGadgetText(1)) > 0 And Len(GetGadgetText(1))+Len(name)+2 < #BUFFERSIZE
            sendText = name+": "+GetGadgetText(1)
            
            *sendBuffer = AllocateMemory(Len(sendText))
            PokeS(*sendBuffer,sendText)
            
            If SendNetworkData(cid,*sendBuffer,MemorySize(*sendBuffer)) = MemorySize(*sendBuffer)
              AddGadgetItem(0,-1,sendText)
              SendMessage_(GadgetID(0),#EM_SCROLL,#SB_BOTTOM,0) ;Nach unten scrollen
              SetGadgetItemColor(0,CountGadgetItems(0)-1,#PB_Gadget_BackColor,RGB(192,192,192))
              SetGadgetText(1,"")
              sendText = ""
              
            EndIf
            
            FreeMemory(*sendBuffer)
            
          EndIf
      EndSelect
      
  EndSelect
  
  If NetworkClientEvent(cid) = #PB_NetworkEvent_Data
    If ReceiveNetworkData(cid,*receiveBuffer,#BUFFERSIZE) > -1
      AddGadgetItem(0,-1,PeekS(*receiveBuffer))
      SendMessage_(GadgetID(0),#EM_SCROLL,#SB_BOTTOM,0) ;Nach unten scrollen
      
    EndIf
  EndIf
  
ForEver
Bei Fragen immer her damit, vll bastel ich auch mal wieder etwas, was einem etwas höheren Standard genügt...

LG KeyKon

Re: Kleiner LAN-Chat

Verfasst: 06.07.2013 11:29
von julianhb89
:bounce: vielen Dank :praise:

Das hilft mir schon sehr viel weiter, top !

Re: Kleiner LAN-Chat

Verfasst: 08.10.2013 00:54
von Moxl
hi,

mal ne frage... wie genau heißt die schriftart die du in dem chatfenster verwendet hast?

mfg Moxl

Re: Kleiner LAN-Chat

Verfasst: 08.10.2013 01:42
von KeyKon
Fixedsys wenn ich mich nicht täusche, die gute alte Schrift von Console und Notepad (bis WinXP)^^

LG KeyKon

Re: Kleiner LAN-Chat

Verfasst: 08.10.2013 12:53
von Moxl
ahh danke :allright: