Ma premiere application: Vos conseils, vos critiques

Programmation d'applications complexes
yoman64
Messages : 14
Inscription : jeu. 18/oct./2007 20:15

Ma premiere application: Vos conseils, vos critiques

Message par yoman64 »

Bonjour a tous,
Un ami m'a fait découvrir purebasic et cette après midi j'ai commencer a programmer en purebasic.

Alors voila c'est simplement un programme qui se connecte a un serveur Counter Strike en UDP et qui récupère les informations du serveur (joueurs,nom,etc)
Il se met a jours a toute les deux secondes grace a un timer

J'aimerais avoir tout vos commentaires, améliorations et critiques :)



Code : Tout sélectionner


Global i,ip.s,port,*Buffer,String$,CRLF.s,ConnectionID

Declare Populate()
Declare ForceRefresh()

*Buffer = AllocateMemory(10000)

CRLF.s = Chr(13)+Chr(10)

ip.s = "e3b.org" 
 ip.s = "69.9.47.28"
port = 27015

  
If InitNetwork() = 0
  MessageRequester("Erreur!!", "Impossible d'initialisé la couche réseau!", 0) : End
EndIf



If OpenWindow(0, 300, 300, 420, 160, "PureCSS",#PB_Window_MinimizeGadget)
  AddSysTrayIcon(0, WindowID(0), LoadImage(0, "aa.ico"))
  StickyWindow(0,1)
  SysTrayIconToolTip(0,"Counter Strike: Source Monitor")
EndIf 

CreateGadgetList(WindowID(0))
  TextGadget(1, 10, 8, 100, 140, "Serveur non connecté")
  TextGadget(2, 120, 8, 400, 140, "Serveur non connecté")
  SetTimer_(WindowID(0), 0, 2000, @ForceRefresh())
  ConnectionID=OpenNetworkConnection(ip.s, port, #PB_Network_UDP)

ForceRefresh()
  
Repeat

  WEvent = WindowEvent()
  CEvent = NetworkClientEvent(ConnectionID)
    
  If CEvent=2
    Populate()
  Else
    Delay(20)
  EndIf
 
 If WEvent=#PB_Event_SysTray 
  SetWindowState(0,#PB_Window_Normal)
  HideWindow(0,0)
 ElseIf WindowY(0)<0
  HideWindow(0,1)
 ElseIf WEvent=256 And (GetAsyncKeyState_(#VK_ESCAPE) & 32768)
  HideWindow(0,1)
 EndIf
 
Until WEvent = #PB_Event_CloseWindow
CloseNetworkConnection(ConnectionID)
End 


Procedure NextString()
  While ((PeekB(*Buffer+i)<>0))  
  i=i+1
  Wend
  String$=PeekS(*Buffer+i+1,300)
  i=i+1
EndProcedure

Procedure Populate()

          length=ReceiveNetworkData(ConnectionID,*Buffer,2000)
          String$=PeekS(*Buffer,length)
          i=0
          If (Mid(String$,0,4)=Chr(255)+Chr(255)+Chr(255)+Chr(255))
          
            NomServeur.s=Mid(String$,7,Len(String$)) ;Nom serveur
            NextString()
            NomMap.s=String$                          ;La map
            NextString()
            Repertoire.s=String$                      ;repertoire
            NextString()
            NomJeu.s=String$                          ;Nom du jeu
            NextString()
            
 ;          SkipShort:
            i=i+2                                     ;On saute le appID pas besoin
                                                      
            NumPlayer=PeekB(*Buffer+i)                ;Nombre de joueurs
            i=i+1
            MaxPlayer=PeekB(*Buffer+i)                ;Nombre de joueurs maximum
            i=i+1
            NumBot=PeekB(*Buffer+i)                   ;Nombre de bots
            i=i+1
            
            Select Chr(PeekB(*Buffer+i))              ;Type de serveur 
            Case "l"
              ServerType.s="Listen"
            Case "d"
              ServerType.s="Dédié"
            Case "p"
              ServerType.s="SourceTV"
            EndSelect
            i=i+1

            Select Chr(PeekB(*Buffer+i))               ;Systeme d'exploitation du serveur
            Case "w"
              ServerOS.s="Windows"
            Case "l"
              ServerOS.s="Linux"
            EndSelect
            i=i+1                   

            text$ = text$ + "Nom du serveur:   " + CRLF + "Nom de la Carte:  " + CRLF
            text$ = text$ + "Repertoire:       " + CRLF + "Nom du jeu:       " + CRLF
            text$ = text$ + "Joueurs:          " + CRLF + "Bots: " + CRLF
            text$ = text$+"Type: " + CRLF + "Systeme: " + CRLF
            SetGadgetText(1,text$ + CRLF + "Timer: " + CRLF)
            
            
            text$ = NomServeur+CRLF + NomMap+CRLF
            text$ = text$ + Repertoire+CRLF + NomJeu+CRLF
            text$ = text$ + Str(NumPlayer)+"/"+Str(MaxPlayer)+CRLF
            text$ = text$ + Str(NumBot)+CRLF+ServerType.s+CRLF+ServerOS.s+CRLF
            SetGadgetText(2,text$ + CRLF+ Str(ElapsedMilliseconds()))
            
          EndIf
    
   EndProcedure



Procedure ForceRefresh()
  If ConnectionID
      PokeL(*Buffer, -1)
      PokeS(*Buffer+4,"TSource Engine Query" ,20)
      SendNetworkData(ConnectionID,*Buffer,24)
  EndIf
EndProcedure

Dernière modification par yoman64 le sam. 20/oct./2007 2:07, modifié 1 fois.
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

et bien moi je le trouve pas mal se qui serais bien si c'est possible. sa serai de pouvoir crée une liste de serveur favoris pour pouvoir regarder directement avec des onglets ou dans le style la si non et bien pas grand chose a dire.
apart peut etre un peut de couleur pour rendre un peut plus beau,

et rajouté aussi la possibilité de reduire la fenetre pour evité de relancer le programme a chaque verification :wink: .

Code : Tout sélectionner

OpenWindow(0, 300, 300, 420, 160, "PureCSS", #PB_Window_MinimizeGadget)
voila pour moi



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
yoman64
Messages : 14
Inscription : jeu. 18/oct./2007 20:15

Message par yoman64 »

venom a écrit :et bien moi je le trouve pas mal se qui serais bien si c'est possible. sa serai de pouvoir crée une liste de serveur favoris pour pouvoir regarder directement avec des onglets ou dans le style la si non et bien pas grand chose a dire.
apart peut etre un peut de couleur pour rendre un peut plus beau,

et rajouté aussi la possibilité de reduire la fenetre pour evité de relancer le programme a chaque verification :wink: .

Code : Tout sélectionner

OpenWindow(0, 300, 300, 420, 160, "PureCSS", #PB_Window_MinimizeGadget)
voila pour moi



@++



Salut merci pour ton commentaire, j'ai pris ton idée et puis j'ai aussi ajouté une icone dans le Systray lorsque l'on appui sur Echappe ou qu'on réduit l'applis elle va dans le systray :)

Pour les couleurs je sais pas encore comment faire je vais chercher dans le doc :P
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

ouai c'est deja mieu comme sa :wink: .

si tu souhaite faire simple pour la décoration tu a la fonction

Code : Tout sélectionner

SetWindowColor(#Window_0, RGB(100,50,255))
qui change la couleur du fond de la fenetre.
et

Code : Tout sélectionner

SetGadgetColor(#Gadget, TypeCouleur, Couleur)
pour les gadgets :wink: .

apres tu peut aussi voir du coté des datas qui eux te permetterons d'afficher une image en arriere plan.

ou alors le must sa se passe par ici :D

http://www.purebasic.fr/french/viewtopic.php?t=7074.
voila pour te donner un peut d'aide :wink: .

un exemple de se que sa peut donner :

telechargement



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Bravo yoman64, c'est du grand frag heu... du grand art ;)
Avatar de l’utilisateur
Le psychopathe
Messages : 764
Inscription : jeu. 03/mars/2005 19:23

Message par Le psychopathe »

bernard13 a écrit :Counter Strike ça existe encore?
sans commentaire...
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

Counter Strike ça existe encore?
biensur meme autant qu'avant. :wink:



@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Répondre