diff --git a/JGE/include/JNetwork.h b/JGE/include/JNetwork.h index 7f360b705..40de28ee2 100644 --- a/JGE/include/JNetwork.h +++ b/JGE/include/JNetwork.h @@ -1,10 +1,7 @@ #ifndef _JNETWORK_H_ #define _JNETWORK_H_ -#ifdef WIN32 -#elif defined (LINUX) -#else -#endif + #include "JGE.h" #include @@ -14,7 +11,9 @@ class JNetwork{ private: static JNetwork * mInstance; static int connected_to_ap; + public: + static string error; JNetwork(); static JNetwork * GetInstance(); static void EndInstance(); @@ -28,7 +27,6 @@ public: #elif defined (LINUX) static void* net_thread(void* param); #else - static int net_thread(SceSize args, void *argp); static int connect_to_apctl(int config); #endif @@ -39,9 +37,15 @@ private: #elif defined (LINUX) static pthread_t netthread; #else - static int netthread; + static int netthread; #endif }; +#if defined (WIN32) +#elif defined (LINUX) +#else + static int net_thread(SceSize args, void *argp); +#endif + #endif diff --git a/JGE/src/JNetwork.cpp b/JGE/src/JNetwork.cpp index 2d7ef005f..9a03ecf06 100644 --- a/JGE/src/JNetwork.cpp +++ b/JGE/src/JNetwork.cpp @@ -4,6 +4,7 @@ */ + #if defined (WIN32) || defined (LINUX) #else #include @@ -12,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -22,11 +24,13 @@ #include #endif + #include "../include/JNetwork.h" #include "../include/JSocket.h" JNetwork* JNetwork::mInstance = NULL; string JNetwork::serverIP = ""; +string JNetwork::error = ""; JNetwork * JNetwork::GetInstance(){ if (!mInstance) mInstance = new JNetwork(); @@ -157,9 +161,17 @@ int net_thread(SceSize args, void *argp) int JNetwork::connect(string serverIP){ int err; + char buffer[4096]; if(netthread) return 0; + + + sceUtilityLoadNetModule(1); +sceUtilityLoadNetModule(3); + if((err = pspSdkInetInit())){ - printf("JGE Error, could not initialise the network %08X\n", err); + sprintf(buffer, "JGE Error, could not initialise the network %08X", err); + printf(buffer); printf("\n"); + error = buffer; return err; } @@ -187,28 +199,37 @@ int JNetwork::connect_to_apctl(int config) { int err; int stateLast = -1; + char buffer[4096]; /* Connect using the first profile */ err = sceNetApctlConnect(config); if (err != 0) { - printf("JGE: sceNetApctlConnect returns %08X\n", err); + sprintf(buffer, "JGE: sceNetApctlConnect returns %08X", err); + printf(buffer);printf("\n"); + error = buffer; return 0; } - printf("JGE: Connecting...\n"); + sprintf(buffer,"JGE: Connecting..."); + printf(buffer);printf("\n"); + error = buffer; while (1) { int state; err = sceNetApctlGetState(&state); if (err != 0) { - printf("JGE: sceNetApctlGetState returns $%x\n", err); + sprintf(buffer,"JGE: sceNetApctlGetState returns $%x", err); + printf(buffer);printf("\n"); + error = buffer; break; } if (state > stateLast) { - printf(" connection state %d of 4\n", state); + sprintf(buffer, " connection state %d of 4", state); + printf(buffer);printf("\n"); + error = buffer; stateLast = state; } if (state == 4){ diff --git a/JGE/src/JSocket.cpp b/JGE/src/JSocket.cpp index 960ed3a12..5b5cbdffc 100644 --- a/JGE/src/JSocket.cpp +++ b/JGE/src/JSocket.cpp @@ -22,6 +22,8 @@ JSocket * JSocket::mInstance = NULL; #define SERVER_PORT 20666 +int JSocket::connected = 0; + void JSocket::init(){ sceUtilityLoadNetModule(1); sceUtilityLoadNetModule(3); @@ -119,6 +121,8 @@ int JSocket::start_client(const char *szIpAddr){ return err; } + connected = 1; + while(1){ readWrite(sock); } diff --git a/JGE/src/main.cpp b/JGE/src/main.cpp index bfa810582..b3f4690ee 100644 --- a/JGE/src/main.cpp +++ b/JGE/src/main.cpp @@ -29,7 +29,7 @@ #ifdef DEVHOOK PSP_MODULE_INFO(JGEApp_Title, 0, 1, 1); PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER); - PSP_HEAP_SIZE_KB(-256); + PSP_HEAP_SIZE_KB(-2048); #else diff --git a/JGE/src/win/JSocket_Win.cpp b/JGE/src/win/JSocket_Win.cpp index ce5cd8c8e..52749e8bb 100644 --- a/JGE/src/win/JSocket_Win.cpp +++ b/JGE/src/win/JSocket_Win.cpp @@ -1,230 +1,230 @@ -#pragma comment(lib,"WSOCK32.LIB") -#include -#include -#include -#include -#include - +#pragma comment(lib,"WSOCK32.LIB") +#include +#include +#include +#include +#include + #include "../../include/JSocket.h" -JSocket * JSocket::mInstance = NULL; - -#define SERVER_PORT 20666 -unsigned char ADRESSE_IP_SERVEUR [4] = {127,0,0,1}; - - -int JSocket::connected = 0; - -void JSocket::init(){ - //TODO ? -} - -JSocket::JSocket(){ - init(); -} - -JSocket::~JSocket(){ - //TODO ? -} - - -void JSocket::readWrite(int val){ - char data[1024]; - - fd_set set; - FD_ZERO(&set); - FD_SET(val, &set); - struct timeval tv; - int result = select(0, &set, NULL, NULL, &tv); - if( result< 0) - { - printf("Socket %d closed\n", val); - closesocket(val); - connected= 0; - printf("select error\n"); - return; - } - - if (result > 0){ - OutputDebugString("Receiving!\n"); - int readbytes = recv(val, data, sizeof(data),0); - if(readbytes < 0) - { - int error = WSAGetLastError(); - if (error != WSAEWOULDBLOCK){ - printf("Socket %d closed\n", val); - closesocket(val); - connected= 0; - } - } - else - { - OutputDebugString("received Data!!!\n"); - for (int i = 0; i < readbytes; i++){ - received_data.push(data[i]); - OutputDebugString("getting byte\n"); - } - } - } - - //Write - int size = 0; - while(!tosend_data.empty()){ - size++; - if (size > sizeof(data)){ - send(val,data,sizeof(data),0); - size = 0; - } - data[size-1] = tosend_data.front(); - tosend_data.pop(); - } - if (size) { - send(val,data,size-1,0); - OutputDebugString("sending Data\n"); - } -} - -/* Start a client */ -int JSocket::start_client(const char *szIpAddr){ - SOCKET Desc_Socket_Cliente; - SOCKADDR_IN Adresse_Socket_Serveur; - WORD wVersionRequested; - WSADATA wsaData; - - struct hostent *hostentptr; - - wVersionRequested=MAKEWORD(1,1); - WSAStartup(wVersionRequested,&wsaData); - - Desc_Socket_Cliente=socket(AF_INET,SOCK_STREAM,0); - unsigned int addr_dest = inet_addr(szIpAddr); - hostentptr=gethostbyaddr((char*) &addr_dest,4,AF_INET); - - ZeroMemory(&Adresse_Socket_Serveur,sizeof(Adresse_Socket_Serveur)); - - Adresse_Socket_Serveur.sin_family=(*hostentptr).h_addrtype; - Adresse_Socket_Serveur.sin_port=htons(SERVER_PORT); - Adresse_Socket_Serveur.sin_addr=*((struct in_addr*)(*hostentptr).h_addr); - - int result = connect( - Desc_Socket_Cliente, - (const struct sockaddr*)&Adresse_Socket_Serveur, - sizeof(Adresse_Socket_Serveur)); - -OutputDebugString("client state 0\n"); - - if (result != 0){ - connected = 0; - return 0; - } - -OutputDebugString("client state 1\n"); - - - connected = 1; - -while(1){ - readWrite(Desc_Socket_Cliente); -/* Nb_Caracteres_Recus=recv(Desc_Socket_Cliente,Message_Recu,sizeof(Message_Recu),0); - if(Nb_Caracteres_Recus<=0){ - //continuer=FALSE; - }else{ - strcpy(message,Message_Recu); - len=strlen(message); - } - */ -} -# -closesocket(Desc_Socket_Cliente); -WSACleanup(); -return 0; -} - -/* Start a server */ -int JSocket::start_server(const char *szIpAddr){ - OutputDebugString("server state 0\n"); - connected= 0; - int Code_Retour; - SOCKET Desc_Socket_Connection; - SOCKADDR_IN Adresse_Socket_Connection; - WORD wVersionRequested; - WSADATA wsaData; - - wVersionRequested=MAKEWORD(1,1); - - Code_Retour=WSAStartup(wVersionRequested,&wsaData); - - if(Code_Retour!=0){ - perror("WSAStartup\t"); - _getch(); - WSACleanup(); - return Code_Retour; - } - OutputDebugString("server state 1\n"); -/* printf("la version supportee est : %d.%d\n", -LOBYTE(wsaData.wHighVersion), -HIBYTE(wsaData.wHighVersion) -);*/ - - Desc_Socket_Connection=socket( AF_INET, SOCK_STREAM,0); - -//printf("valeur de la socket = %d\n",Desc_Socket_Connection); - - ZeroMemory(&Adresse_Socket_Connection,sizeof(Adresse_Socket_Connection)); - Adresse_Socket_Connection.sin_family=AF_INET; - Adresse_Socket_Connection.sin_port=htons(SERVER_PORT); - - Code_Retour=bind(Desc_Socket_Connection, - (struct sockaddr*)&Adresse_Socket_Connection, - sizeof(Adresse_Socket_Connection)); - - - - if(Code_Retour!=0){ - perror("bind\t"); - _getch(); - closesocket(Desc_Socket_Connection); - WSACleanup(); - return Code_Retour; - } - OutputDebugString("server state 3\n"); - - Code_Retour=listen(Desc_Socket_Connection,1); - if(Code_Retour!=0){ - perror("listen\n"); - WSACleanup(); - return Code_Retour; - } - OutputDebugString("server state 4\n"); - printf("serveur en attente d'une connection\n\n"); - printf("***************arret du serveur par**************\n\n"); - connected = 1; - while(1){ - SOCKET * pt_Nouveau_Socket_Serveur; - SOCKADDR_IN Adresse_Socket_Cliente; - int Longueur_Adresse; - - pt_Nouveau_Socket_Serveur = new SOCKET; - - Longueur_Adresse = sizeof(Adresse_Socket_Cliente); - - int val=accept( - Desc_Socket_Connection, - (struct sockaddr*)&Adresse_Socket_Cliente, - &Longueur_Adresse); - printf("connection accepte depuis le port client %d\n", ntohs(Adresse_Socket_Cliente.sin_port)); - OutputDebugString("connection accepte depuis le port client\n"); - - - while(1) - { - readWrite(val); - } - closesocket(*pt_Nouveau_Socket_Serveur); - return 0; - } -} - - - +JSocket * JSocket::mInstance = NULL; + +#define SERVER_PORT 20666 +unsigned char ADRESSE_IP_SERVEUR [4] = {127,0,0,1}; + + +int JSocket::connected = 0; + +void JSocket::init(){ + //TODO ? +} + +JSocket::JSocket(){ + init(); +} + +JSocket::~JSocket(){ + //TODO ? +} + + +void JSocket::readWrite(int val){ + char data[1024]; + + fd_set set; + FD_ZERO(&set); + FD_SET(val, &set); + struct timeval tv; + int result = select(0, &set, NULL, NULL, &tv); + if( result< 0) + { + printf("Socket %d closed\n", val); + closesocket(val); + connected= 0; + printf("select error\n"); + return; + } + + if (result > 0){ + OutputDebugString("Receiving!\n"); + int readbytes = recv(val, data, sizeof(data),0); + if(readbytes < 0) + { + int error = WSAGetLastError(); + if (error != WSAEWOULDBLOCK){ + printf("Socket %d closed\n", val); + closesocket(val); + connected= 0; + } + } + else + { + OutputDebugString("received Data!!!\n"); + for (int i = 0; i < readbytes; i++){ + received_data.push(data[i]); + OutputDebugString("getting byte\n"); + } + } + } + + //Write + int size = 0; + while(!tosend_data.empty()){ + size++; + if (size > sizeof(data)){ + send(val,data,sizeof(data),0); + size = 0; + } + data[size-1] = tosend_data.front(); + tosend_data.pop(); + } + if (size) { + send(val,data,size-1,0); + OutputDebugString("sending Data\n"); + } +} + +/* Start a client */ +int JSocket::start_client(const char *szIpAddr){ + SOCKET Desc_Socket_Cliente; + SOCKADDR_IN Adresse_Socket_Serveur; + WORD wVersionRequested; + WSADATA wsaData; + + struct hostent *hostentptr; + + wVersionRequested=MAKEWORD(1,1); + WSAStartup(wVersionRequested,&wsaData); + + Desc_Socket_Cliente=socket(AF_INET,SOCK_STREAM,0); + unsigned int addr_dest = inet_addr(szIpAddr); + hostentptr=gethostbyaddr((char*) &addr_dest,4,AF_INET); + + ZeroMemory(&Adresse_Socket_Serveur,sizeof(Adresse_Socket_Serveur)); + + Adresse_Socket_Serveur.sin_family=(*hostentptr).h_addrtype; + Adresse_Socket_Serveur.sin_port=htons(SERVER_PORT); + Adresse_Socket_Serveur.sin_addr=*((struct in_addr*)(*hostentptr).h_addr); + + int result = connect( + Desc_Socket_Cliente, + (const struct sockaddr*)&Adresse_Socket_Serveur, + sizeof(Adresse_Socket_Serveur)); + +OutputDebugString("client state 0\n"); + + if (result != 0){ + connected = 0; + return 0; + } + +OutputDebugString("client state 1\n"); + + + connected = 1; + +while(1){ + readWrite(Desc_Socket_Cliente); +/* Nb_Caracteres_Recus=recv(Desc_Socket_Cliente,Message_Recu,sizeof(Message_Recu),0); + if(Nb_Caracteres_Recus<=0){ + //continuer=FALSE; + }else{ + strcpy(message,Message_Recu); + len=strlen(message); + } + */ +} +# +closesocket(Desc_Socket_Cliente); +WSACleanup(); +return 0; +} + +/* Start a server */ +int JSocket::start_server(const char *szIpAddr){ + OutputDebugString("server state 0\n"); + connected= 0; + int Code_Retour; + SOCKET Desc_Socket_Connection; + SOCKADDR_IN Adresse_Socket_Connection; + WORD wVersionRequested; + WSADATA wsaData; + + wVersionRequested=MAKEWORD(1,1); + + Code_Retour=WSAStartup(wVersionRequested,&wsaData); + + if(Code_Retour!=0){ + perror("WSAStartup\t"); + _getch(); + WSACleanup(); + return Code_Retour; + } + OutputDebugString("server state 1\n"); +/* printf("la version supportee est : %d.%d\n", +LOBYTE(wsaData.wHighVersion), +HIBYTE(wsaData.wHighVersion) +);*/ + + Desc_Socket_Connection=socket( AF_INET, SOCK_STREAM,0); + +//printf("valeur de la socket = %d\n",Desc_Socket_Connection); + + ZeroMemory(&Adresse_Socket_Connection,sizeof(Adresse_Socket_Connection)); + Adresse_Socket_Connection.sin_family=AF_INET; + Adresse_Socket_Connection.sin_port=htons(SERVER_PORT); + + Code_Retour=bind(Desc_Socket_Connection, + (struct sockaddr*)&Adresse_Socket_Connection, + sizeof(Adresse_Socket_Connection)); + + + + if(Code_Retour!=0){ + perror("bind\t"); + _getch(); + closesocket(Desc_Socket_Connection); + WSACleanup(); + return Code_Retour; + } + OutputDebugString("server state 3\n"); + + Code_Retour=listen(Desc_Socket_Connection,1); + if(Code_Retour!=0){ + perror("listen\n"); + WSACleanup(); + return Code_Retour; + } + OutputDebugString("server state 4\n"); + printf("serveur en attente d'une connection\n\n"); + printf("***************arret du serveur par**************\n\n"); + connected = 1; + while(1){ + SOCKET * pt_Nouveau_Socket_Serveur; + SOCKADDR_IN Adresse_Socket_Cliente; + int Longueur_Adresse; + + pt_Nouveau_Socket_Serveur = new SOCKET; + + Longueur_Adresse = sizeof(Adresse_Socket_Cliente); + + int val=accept( + Desc_Socket_Connection, + (struct sockaddr*)&Adresse_Socket_Cliente, + &Longueur_Adresse); + printf("connection accepte depuis le port client %d\n", ntohs(Adresse_Socket_Cliente.sin_port)); + OutputDebugString("connection accepte depuis le port client\n"); + + + while(1) + { + readWrite(val); + } + closesocket(*pt_Nouveau_Socket_Serveur); + return 0; + } +} + + +