Page principale | Liste alphabétique | Structures de données | Liste des fichiers | Champs de donnée | Portée globale | Pages associées

NetClientConnect.cpp

Aller à la documentation de ce fichier.
00001 //##############################################################################
00002 //#                                                                            #
00003 //# fichier : ClientConnect.cpp                         version : V1.0         #
00004 //# projet  : GestionAsso                               date :  15/01/2005     #
00005 //# par     : aerith                                                           #
00006 //#                                                                            #
00007 //# Methodes de la classe ClientConnect                                        #
00008 //#                                                                            #
00009 //##############################################################################
00010 
00011 #include    "ClientConnect.h"
00012 #include    "../src/Tools.h"
00013 
00014 ClientConnect::ClientConnect(int iNoInfo)
00015 {
00016     NoInfo  = iNoInfo;
00017     Sock    = 0;
00018     strcpy(Ip, "localhost");
00019     Port    = 2000;
00020     strcpy(Pass, "");
00021     Running = 0;
00022     memset(Buffer, 0, TAILLE_BUFFER);
00023 }
00024 
00025 ClientConnect::~ClientConnect()
00026 {
00027     if(Running == 1)
00028         Stop();
00029 }
00030 
00031 int     ClientConnect::LoadParameter(char *NomFichier)
00032 {
00033     FILE *      Fichier;
00034     char        BufferTemp[TAILLE_BUFFER];
00035     int         ErrorCode = 0;
00036 
00037     Fichier = fopen(NomFichier, "r");
00038     if(Fichier)
00039     {
00040         while(!feof(Fichier))
00041         {
00042             if(fgets(BufferTemp, TAILLE_BUFFER, Fichier) != NULL)
00043             {
00044                 if(strcmp(gettok2(BufferTemp, 0, "=\n"), "IP") == 0)
00045                     strcpy(Ip, gettok2(BufferTemp, 1, "=\n"));
00046                 if(strcmp(gettok2(BufferTemp, 0, "=\n"), "PORT") == 0)
00047                     Port = AtoD(gettok2(BufferTemp, 1, "=\n"));
00048                 if(strcmp(gettok2(BufferTemp, 0, "=\n"), "PASS") == 0)
00049                     strcpy(Pass, gettok2(BufferTemp, 1, "=\n"));
00050             }
00051         }
00052     }
00053     else
00054         ErrorCode = 2;
00055 
00056     fclose(Fichier);
00057 
00058     if(ErrorCode)
00059         ToWindow(GetError(ErrorCode));
00060 
00061     return ErrorCode;
00062 }
00063 
00064 int     ClientConnect::Start(char *NomFichier)
00065 {
00066     struct      hostent *hostentptr;
00067     char        BufferTemp[TAILLE_BUFFER];
00068     int         ErrorCode = 0;
00069     SocketLoad();
00070 
00071     if(Running == 0)
00072     {
00073         Running = 1;
00074         *BufferTemp = 0;
00075 
00076         ErrorCode = LoadParameter(NomFichier);
00077         if(!ErrorCode)
00078         {
00079             if((Sock = socket(AF_INET,SOCK_STREAM,0)) != -1)
00080             {
00081                 if((hostentptr = gethostbyname(Ip)) != NULL)
00082                 {
00083                     ZeroMemory(&AdrSock, sizeof(AdrSock));
00084                     AdrSock.sin_family = (*hostentptr).h_addrtype;
00085                     AdrSock.sin_port = Port;
00086                     AdrSock.sin_addr = *((struct in_addr *)(*hostentptr).h_addr);
00087 
00088                     if(!NoInfo)
00089                     {
00090                         sprintf(BufferTemp, "Connexion a %s:%d ...", Ip, Port);
00091                         ToWindow(BufferTemp, 1000);
00092                     }
00093 
00094                     if(!connect(Sock, (const struct sockaddr *) &AdrSock, sizeof(AdrSock)))
00095                     {
00096                         ErrorCode = Identifie();
00097                         if(!ErrorCode && !NoInfo)
00098                             ToWindow("Connection etablie", 1000);
00099                     }
00100                     else
00101                         ErrorCode = 11;
00102                 }
00103                 else
00104                     ErrorCode = 10;
00105             }
00106             else
00107                 ErrorCode = 3;
00108         }
00109     }
00110     else
00111         ErrorCode = 15;
00112 
00113     if(ErrorCode)
00114         Stop();
00115 
00116     return ErrorCode;
00117 }
00118 
00119 int     ClientConnect::Identifie()
00120 {
00121     int     ErrorCode = 0;
00122 
00123     if(!NoInfo)
00124         ToWindow("Autentification ...", 1000);
00125 
00126     sprintf(Buffer, "%d %s\n", IDENTIFIE, Pass);
00127     BufferSize = strlen(Buffer);
00128 
00129     ErrorCode = Send();
00130 
00131     if(!ErrorCode)
00132         ErrorCode = Receive();
00133 
00134     if(!ErrorCode)
00135     {
00136         switch (AtoD(Buffer))
00137         {
00138             case    IDENTIFIER  :
00139                 break;
00140             case    ERR_PASS    :
00141                 ErrorCode = 12;
00142                 break;
00143             default :
00144                 ErrorCode = 13;
00145                 break;
00146         }
00147     }
00148 
00149     return ErrorCode;
00150 }
00151 
00152 int ClientConnect::Stop()
00153 {
00154     int     ErrorCode = 0;
00155 
00156     if(Running == 1)
00157     {
00158         Running = 0;
00159 
00160         if(Sock)
00161             SocketClose(Sock);
00162         SocketUnLoad();
00163     }
00164     else
00165         ErrorCode = 16;
00166 
00167     return ErrorCode;
00168 }
00169 
00170 int     ClientConnect::ToWindow(char *Text, int Delai)
00171 {
00172     #ifndef nogtk
00173         GtkWidget   *pWindow;
00174         GtkWidget   *pLabel;
00175 
00176         pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00177         gtk_window_set_title(GTK_WINDOW(pWindow), "Etat connection");
00178         gtk_window_set_default_size(GTK_WINDOW(pWindow), 300, 50);
00179         gtk_window_set_position(GTK_WINDOW(pWindow), GTK_WIN_POS_CENTER);
00180 
00181         pLabel = gtk_label_new(_(Text));
00182         gtk_container_add(GTK_CONTAINER(pWindow), pLabel);
00183 
00184         gtk_widget_show_all(pWindow);
00185 
00186         g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
00187 
00188         if(Delai)
00189             g_timeout_add(Delai, (GSourceFunc)KillWindow, NULL);
00190 
00191         gtk_main();
00192 
00193         if(GTK_IS_WIDGET(pWindow))
00194             gtk_widget_destroy(pWindow);
00195     #else
00196         printf("%s\n", Text);
00197 
00198         if(Delai)
00199             Sleep(Delai);
00200     #endif
00201 
00202     return 0;
00203 }
00204 
00205 int     KillWindow()
00206 {
00207     #ifndef nogtk
00208         gtk_main_quit();
00209     #endif
00210 
00211     return FALSE;
00212 }
00213 

Généré le Wed May 4 00:06:03 2005 pour Ressource par  doxygen 1.3.9.1