Kleiner LAN-Chat

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Kleiner LAN-Chat

Beitrag 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
Zuletzt geändert von KeyKon am 02.11.2007 00:27, insgesamt 1-mal geändert.
(\/) (°,,,°) (\/)
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Beitrag 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.
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
julianhb89
Beiträge: 3
Registriert: 04.07.2013 18:40

Re: Kleiner LAN-Chat

Beitrag 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
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Kleiner LAN-Chat

Beitrag 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
(\/) (°,,,°) (\/)
julianhb89
Beiträge: 3
Registriert: 04.07.2013 18:40

Re: Kleiner LAN-Chat

Beitrag von julianhb89 »

Hey super, vielen Dank :praise:

Da bin ich mal gespannt :lurk:
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Kleiner LAN-Chat

Beitrag 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
(\/) (°,,,°) (\/)
julianhb89
Beiträge: 3
Registriert: 04.07.2013 18:40

Re: Kleiner LAN-Chat

Beitrag von julianhb89 »

:bounce: vielen Dank :praise:

Das hilft mir schon sehr viel weiter, top !
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Kleiner LAN-Chat

Beitrag von Moxl »

hi,

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

mfg Moxl
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Kleiner LAN-Chat

Beitrag von KeyKon »

Fixedsys wenn ich mich nicht täusche, die gute alte Schrift von Console und Notepad (bis WinXP)^^

LG KeyKon
(\/) (°,,,°) (\/)
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: Kleiner LAN-Chat

Beitrag von Moxl »

ahh danke :allright:
Antworten