BirdChat : son nouveau server en lib!

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

BirdChat : son nouveau server en lib!

Message par cederavic »

Voilas, avec Heis on a pensé qu'il serais bien de restructuré BirdChat, donc je me suis penché sur le sujet et j'ai décidé de faire une lib qui gere un server et plusieur connection de façon "structurée". Cette lib sera accessible à tous, mais en priorité dévellopée POUR BirdChat.
Je n'ai pas totalement fini la partie serveur de la lib, mais je peut vous donné un avant gout des fonctions qui seront dispo ainsi qu'un petit example de code. Je voudrais juste avoir votre avis sur mon initiative (faire un lib spéciale birdchat accessible a tous (je sais c'est tordu lol)) et sur le nom des fonctions.
Voilas la liste des fonctions :

Code : Tout sélectionner

; Fonctions "utilisables"
PBNInit()
PBNCreateServer(*ServerCallBack, Port)
PBNRestartServer()
PBNPauseServer(Status.b)
PBNCloseServer()
PBNRegisterIDT(IDT, Priority)
PBNUnregisterIDT(IDT)

PBNSetServerCallBack(*ServerCallBack)
PBNSetTimeOut(TimeOut)
PBNSetMsgDelimiter(chr.s)
PBNSetIDTDelimiter(chr.s)

PBNGetMsgDelimiter()
PBNGetIDTDelimiter()
PBNGetClientIP(ClID)
PBNGetTimeOut()
PBNGetClientConnectionDate(ClID)
PBNGetServerCallback()
PBNGetServerRunningTime()
PBNGetServerStartedDate()
PBNGetServerMaxConnection()
PBNGetServerConnectionNB()
PBNGetServerReceivedBytes()
PBNGetServerSentBytes()
PBNGetServerStatus()

; Fonctions "inutilisables" (je les donnes juste pour "infos")
PBNServerCore(Value)
PBNServerProcessQueue()
PBNServerSendMessage(ClID, IDT, Msg.s)
PBNServerSortMsgQueue(SortType)
PBNCountClientList()
PBNSetClientIP(ClID)
et voici un example d'utilisation :

Code : Tout sélectionner

Declare ServerCB(ClID, IDT, Msg.s)
IncludeFile "PBN2.pb"

If PBNInit() = #False
  MessageRequester("PBN", "PBNInit() failled!", 0)
  End
Else
  PBNSetIDTDelimiter(Chr(254))
  PBNSetMsgDelimiter(Chr(255))
  PBNSetTimeOut(1200)
  PBNRegisterIDT(500, 1)
EndIf

OpenWindow(0, 0, 0, 800, 600, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "PBN Server")
  
  CreateGadgetList(WindowID())
    EditorGadget(0, 0, 0, 800, 500)
    ButtonGadget(1, 5, 505, 50, 20, "Start", #PB_Button_Toggle)
    ButtonGadget(2, 60, 505, 50, 20, "Restart")
      DisableGadget(2, 1)
    ButtonGadget(3, 115, 505, 50, 20, "Pause", #PB_Button_Toggle)
      DisableGadget(3, 1)
    
  CreateStatusBar(0, WindowID())
    AddStatusBarField(150)
      StatusBarText(0, 0, "Server status : Stopped")
    AddStatusBarField(100)
      StatusBarText(0, 1, "Nb of client : 0")
    AddStatusBarField(150)
      StatusBarText(0, 2, "RunningTime : 0 s")
    AddStatusBarField(150)
      StatusBarText(0, 3, "Received bytes : 0")
    AddStatusBarField(150)
      StatusBarText(0, 3, "Sent bytes : 0")

Timer = GetTickCount_()

Repeat

  If GetTickCount_() - Timer >= 1000
    Timer = GetTickCount_()
    If PBNGetServerStatus() = 0
      StatusBarText(0, 0, "Server status : Stopped", #PB_StatusBar_Raised)
    ElseIf PBNGetServerStatus() = 1
      StatusBarText(0, 0, "Server status : Started", #PB_StatusBar_Raised)
    ElseIf PBNGetServerStatus() = 2
      StatusBarText(0, 0, "Server status : Paused", #PB_StatusBar_Raised)
    EndIf
    If PBNGetServerStatus() <> 0
      StatusBarText(0, 1, "Nb of client : " + Str(PBNGetServerConnectionNB()))
      StatusBarText(0, 2, "RunningTime : " + Str(PBNGetServerRunningTime()) + " s")
      StatusBarText(0, 3, "Received bytes : " + Str(PBNGetServerReceivedBytes()))
      StatusBarText(0, 4, "Sent bytes : " + Str(PBNGetServerSentBytes()))
    EndIf
  EndIf
 
  Select WindowEvent()
    Case #WM_Close
      Quit = #True
      
    Case #PB_Event_Gadget
      Select EventGadgetID()
        Case 1
          If GetGadgetState(1) = 1
            SetGadgetText(1, "Stop")
            If PBNCreateServer(@ServerCB(), 4003)
              DisableGadget(2, 0)
              DisableGadget(3, 0)
              StatusBarText(0, 0, "Server status : Started", #PB_StatusBar_Raised)

              AddGadgetItem(0, -1, "Server started")
              AddGadgetItem(0, -1, "  Port : 4003")
              AddGadgetItem(0, -1, "  Starting date : " + FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", PBNGetServerStartedDate()))
            Else
              AddGadgetItem(0, -1, "Unable to create server")
            EndIf
          Else
            DisableGadget(2, 1)
            DisableGadget(3, 1)
            SetGadgetText(1, "Start")
            AddGadgetItem(0, -1, "Server stopped")
            PBNCloseServer()
          EndIf
          
        Case 2
          AddGadgetItem(0, -1, "Restarting server...")
          If PBNRestartServer()
            AddGadgetItem(0, -1, "Server restarted")
          Else
            AddGadgetItem(0, -1, "Unable to restart server")
          EndIf
          
        Case 3
          PBNPauseServer(GetGadgetState(3))
          If GetGadgetState(3) = 1
            AddGadgetItem(0, -1, "Server paused")
          Else
            AddGadgetItem(0, -1, "Server running")
          EndIf
       
      EndSelect
  EndSelect
  
  Delay(1) ; obligatoire
Until Quit = #True
PBNCloseServer()

Procedure ServerCB(ClID, IDT, Msg.s)
  
  Select IDT
    Case #PBN_IDT_ClientConnection
      AddGadgetItem(0, -1, "Connexion du client : " + Str(ClID))
      AddGadgetItem(0, -1, "  Client ip : " + PBNGetClientIP(ClID))
      AddGadgetItem(0, -1, "  Client connection date : " + FormatDate("%dd/%mm/%yyyy %hh:%ii:%ss", PBNGetClientConnectionDate(ClID)))
      AddGadgetItem(0, -1, "")
      SendMessage_(GadgetID(0), #EM_SCROLL, #SB_PAGEDOWN, #False)
      ProcedureReturn #PBN_DeleteMsg
      
    Case #PBN_IDT_ClientDisconnection
      AddGadgetItem(0, -1, "Deconnexion du client : " + Str(ClID))
      AddGadgetItem(0, -1, "")
      SendMessage_(GadgetID(0), #EM_SCROLL, #SB_PAGEDOWN, #False)
      ProcedureReturn #PBN_DeleteMsg
      
    Case 500
     AddGadgetItem(0, -1, ">> " + PBNGetClientIP(ClID))
     AddGadgetItem(0, -1, Msg)
     AddGadgetItem(0, -1, "")
     SendMessage_(GadgetID(0), #EM_SCROLL, #SB_PAGEDOWN, #False)
     PBNServerSendMessage(-1, 500, ">>Cl" + Str(ClID))
     ProcedureReturn #PBN_DeleteMsg
       
  EndSelect
  
  ProcedureReturn #PBN_IgnoreMsg

EndProcedure
Bon je sais que vous ne pouvez pas tester, mais j'aimerais savoir si ça pourais interresser du monde car dans le cas contraire je la ferais seulement pour birdchat.

Merci :)
Oliv
Messages : 2117
Inscription : mer. 21/janv./2004 18:39

Message par Oliv »

Bonne idée :D
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Salut

C'est quoi BirdChat ?
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Comment ????? :evil: Tu ne connais pas ce génialissime logiciel ??? :twisted:

Bird Chat, c'est le logiciel que j'ai commencé à développer seul, puis d'autre développeurs dont Oliv et ced, m'ont rejoins dans ma quête déspérée de la bétise :lol:. Plus sérieusement, heureusement, car sinon BC ne serait pas ce qu'il est maintenant.
http://birdchat.sourceforge.net ;)
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Sympa comme soft

Mais fais une recherche sur les forum Français / US et tu verra que pour trouver BirdChat c'est dur --> Fais une annonce sur le Forum US ?

Je n'ai pour l'instant pas de projets qui necessite cette Lib.
Mais quand elle sera prête, et documentés, j'en trouverais peut-être un usage.

a+
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Droopy a écrit :Salut

C'est quoi BirdChat ?
Un Zoiseau... :D
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Droopy a écrit :Mais fais une recherche sur les forum Français / US et tu verra que pour trouver BirdChat c'est dur --> Fais une annonce sur le Forum US ?
Tiens : http://purebasic.hmt-forum.com/viewtopic.php?t=586
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Oué, ça m'a l'air vraimant bien comme lib... une fois prête et documentée, je la prendrais. :-D
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

Oki, je vais la tourné lib utilisateur alors
Merci :)
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

cederavic a écrit :Oki, je vais la tourné lib utilisateur alors
Merci :)
Merci à toi. :-D
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

Une premiere version de la partie server est finie, comptant 28 fonctions. Je fais l'aide et je vous poste ça :)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Merci !
Répondre