00001
00002
00003
00004
00005
00006
00007
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