diff --git a/doc/files/tcp_acceptsocket.txt b/doc/files/tcp_acceptsocket.txt index ce67aac..250726b 100644 --- a/doc/files/tcp_acceptsocket.txt +++ b/doc/files/tcp_acceptsocket.txt @@ -1,4 +1,4 @@ #title TCP_AcceptSocket [RCBasic Doc] -#header function TCP_AcceptSocket(server, client) +#header function TCP_AcceptSocket(server) -Attempts to accept a connection from a server socket. If successful it will open a client socket to communicate with the server and return true. If it fails it will return false. +Attempts to accept a connection from a server socket. If successful it will return a client socket id. If it fails it will return -1. diff --git a/rcbasic_build/intern_inc/switch_cases.h b/rcbasic_build/intern_inc/switch_cases.h index 0ee4806..8daf7b6 100644 --- a/rcbasic_build/intern_inc/switch_cases.h +++ b/rcbasic_build/intern_inc/switch_cases.h @@ -337,7 +337,7 @@ rc_net_tcp_remoteHost( TCP_REMOTEHOST_SOCKET ) rc_net_tcp_remotePort( TCP_REMOTEPORT_SOCKET ) rc_net_tcp_getData_str( TCP_GETDATA_SOCKET, TCP_GETDATA_NUMBYTES, &TCP_GETDATA_SDATA$ ) rc_net_tcp_sendData( TCP_SENDDATA_SOCKET, TCP_SENDDATA_SDATA$ ) -rc_net_tcp_acceptSocket( TCP_ACCEPTSOCKET_SERVER, TCP_ACCEPTSOCKET_CLIENT ) +rc_net_tcp_acceptSocket( TCP_ACCEPTSOCKET_SERVER ) rc_net_udp_openSocket( UDP_OPENSOCKET_PORT ) rc_net_udp_closeSocket( UDP_CLOSESOCKET_SOCKET ) rc_net_udp_readStream( UDP_GETDATA_SOCKET, &UDP_GETDATA_HOST$, &UDP_GETDATA_PORT, &UDP_GETDATA_SDATA$ ) diff --git a/rcbasic_build/intern_lib/network.bas b/rcbasic_build/intern_lib/network.bas index 44e8627..bfdc910 100644 --- a/rcbasic_build/intern_lib/network.bas +++ b/rcbasic_build/intern_lib/network.bas @@ -7,7 +7,7 @@ function TCP_RemoteHost(socket) function TCP_RemotePort(socket) function TCP_GetData(socket, numBytes, ByRef sData$) sub TCP_SendData(socket, sData$) -function TCP_AcceptSocket(server, client) +function TCP_AcceptSocket(server) function UDP_OpenSocket(port) sub UDP_CloseSocket(socket) function UDP_GetData(socket, byref host$, byref port, byref sData$) diff --git a/rcbasic_build/rc_builtin.h b/rcbasic_build/rc_builtin.h index 592e408..852036f 100755 --- a/rcbasic_build/rc_builtin.h +++ b/rcbasic_build/rc_builtin.h @@ -949,7 +949,6 @@ void init_embedded_functions() add_embedded_arg("sData$", ID_TYPE_STR); embed_function("TCP_AcceptSocket", ID_TYPE_FN_NUM); add_embedded_arg("server", ID_TYPE_NUM); - add_embedded_arg("client", ID_TYPE_NUM); embed_function("UDP_OpenSocket", ID_TYPE_FN_NUM); add_embedded_arg("port", ID_TYPE_NUM); embed_function("UDP_CloseSocket", ID_TYPE_SUB); diff --git a/rcbasic_build/rcbasic.dbgs b/rcbasic_build/rcbasic.dbgs index f5e9c7c..a2f3213 100644 --- a/rcbasic_build/rcbasic.dbgs +++ b/rcbasic_build/rcbasic.dbgs @@ -619,7 +619,6 @@ BS main.TCP_GetData sData$ 0 N main.TCP_SendData socket 0 S main.TCP_SendData sData$ 0 N main.TCP_AcceptSocket server 0 -N main.TCP_AcceptSocket client 1 N main.UDP_OpenSocket port 0 N main.UDP_CloseSocket socket 0 N main.UDP_GetData socket 0 diff --git a/rcbasic_build/rcbasic4_changes.ods b/rcbasic_build/rcbasic4_changes.ods index 3d69b24..c0149f0 100644 Binary files a/rcbasic_build/rcbasic4_changes.ods and b/rcbasic_build/rcbasic4_changes.ods differ diff --git a/rcbasic_build/rcbasic_dev.txt b/rcbasic_build/rcbasic_dev.txt index b3d9e1c..afc133a 100644 --- a/rcbasic_build/rcbasic_dev.txt +++ b/rcbasic_build/rcbasic_dev.txt @@ -943,7 +943,6 @@ add_embedded_arg("socket", ID_TYPE_NUM); add_embedded_arg("sData$", ID_TYPE_STR); embed_function("TCP_AcceptSocket", ID_TYPE_FN_NUM); add_embedded_arg("server", ID_TYPE_NUM); -add_embedded_arg("client", ID_TYPE_NUM); embed_function("UDP_OpenSocket", ID_TYPE_FN_NUM); add_embedded_arg("port", ID_TYPE_NUM); embed_function("UDP_CloseSocket", ID_TYPE_SUB); diff --git a/rcbasic_build/rcbasic_dev2.txt b/rcbasic_build/rcbasic_dev2.txt index 98dc6bb..c8fd6a6 100644 --- a/rcbasic_build/rcbasic_dev2.txt +++ b/rcbasic_build/rcbasic_dev2.txt @@ -943,7 +943,6 @@ #define TCP_SENDDATA_SDATA$ str_var[0].sref[0].value[ str_var[0].byref_offset ] #define FN_TCP_AcceptSocket 339 #define TCP_ACCEPTSOCKET_SERVER num_var[0].nref[0].value[ num_var[0].byref_offset ] -#define TCP_ACCEPTSOCKET_CLIENT num_var[1].nref[0].value[ num_var[1].byref_offset ] #define FN_UDP_OpenSocket 340 #define UDP_OPENSOCKET_PORT num_var[0].nref[0].value[ num_var[0].byref_offset ] #define FN_UDP_CloseSocket 341 diff --git a/rcbasic_build/rcbasic_dev3.txt b/rcbasic_build/rcbasic_dev3.txt index 1866c48..d268e45 100644 --- a/rcbasic_build/rcbasic_dev3.txt +++ b/rcbasic_build/rcbasic_dev3.txt @@ -1043,7 +1043,7 @@ case FN_TCP_SendData: //Sub Procedure rc_net_tcp_sendData( TCP_SENDDATA_SOCKET, TCP_SENDDATA_SDATA$ ); break; case FN_TCP_AcceptSocket: //Number Function - rc_push_num(rc_net_tcp_acceptSocket( TCP_ACCEPTSOCKET_SERVER, TCP_ACCEPTSOCKET_CLIENT )); + rc_push_num(rc_net_tcp_acceptSocket( TCP_ACCEPTSOCKET_SERVER )); break; case FN_UDP_OpenSocket: //Number Function rc_push_num(rc_net_udp_openSocket( UDP_OPENSOCKET_PORT )); diff --git a/rcbasic_runtime/rc_defines.h b/rcbasic_runtime/rc_defines.h index 9252ef3..f01ffa7 100755 --- a/rcbasic_runtime/rc_defines.h +++ b/rcbasic_runtime/rc_defines.h @@ -946,7 +946,6 @@ #define TCP_SENDDATA_SDATA$ str_var[0].sref[0].value[ str_var[0].byref_offset ] #define FN_TCP_AcceptSocket 339 #define TCP_ACCEPTSOCKET_SERVER num_var[0].nref[0].value[ num_var[0].byref_offset ] -#define TCP_ACCEPTSOCKET_CLIENT num_var[1].nref[0].value[ num_var[1].byref_offset ] #define FN_UDP_OpenSocket 340 #define UDP_OPENSOCKET_PORT num_var[0].nref[0].value[ num_var[0].byref_offset ] #define FN_UDP_CloseSocket 341 diff --git a/rcbasic_runtime/rc_func130_cases.h b/rcbasic_runtime/rc_func130_cases.h index ea8eadf..984f2d0 100644 --- a/rcbasic_runtime/rc_func130_cases.h +++ b/rcbasic_runtime/rc_func130_cases.h @@ -1043,7 +1043,7 @@ case FN_TCP_SendData: //Sub Procedure rc_net_tcp_sendData( TCP_SENDDATA_SOCKET, TCP_SENDDATA_SDATA$ ); break; case FN_TCP_AcceptSocket: //Number Function - rc_push_num(rc_net_tcp_acceptSocket( TCP_ACCEPTSOCKET_SERVER, TCP_ACCEPTSOCKET_CLIENT )); + rc_push_num(rc_net_tcp_acceptSocket( TCP_ACCEPTSOCKET_SERVER )); break; case FN_UDP_OpenSocket: //Number Function rc_push_num(rc_net_udp_openSocket( UDP_OPENSOCKET_PORT )); diff --git a/rcbasic_runtime/rc_net.h b/rcbasic_runtime/rc_net.h index 3e1afdf..7db851e 100644 --- a/rcbasic_runtime/rc_net.h +++ b/rcbasic_runtime/rc_net.h @@ -124,6 +124,7 @@ int rc_net_tcp_openSocket(std::string host, Uint16 port) if(id < 0) { rc_tcp_socket_obj obj; + id = rc_tcp_socket.size(); rc_tcp_socket.push_back(obj); } @@ -142,6 +143,8 @@ int rc_net_tcp_openSocket(std::string host, Uint16 port) if(!rc_tcp_socket[id].socket) return -1; + rc_tcp_socket[id].active = true; + //cout << "Add socket to socket_set" << endl; SDLNet_TCP_AddSocket(rc_socket_set, rc_tcp_socket[id].socket); return id; @@ -149,6 +152,9 @@ int rc_net_tcp_openSocket(std::string host, Uint16 port) void rc_net_tcp_closeSocket(int _socket) { + if(_socket < 0 || _socket >= rc_tcp_socket.size()) + return; + if(rc_tcp_socket[_socket].socket == NULL) { rc_tcp_socket[_socket].active = false; @@ -160,16 +166,28 @@ void rc_net_tcp_closeSocket(int _socket) rc_tcp_socket[_socket].active = false; } -Uint32 rc_net_tcp_remoteHost(int _socket) +double rc_net_tcp_remoteHost(int _socket) { + if(_socket < 0 || _socket >= rc_tcp_socket.size()) + return -1; + + if(rc_tcp_socket[_socket].socket == NULL) + return -1; + IPaddress * ip = SDLNet_TCP_GetPeerAddress(rc_tcp_socket[_socket].socket); - return ip->host; + return (double)ip->host; } -Uint32 rc_net_tcp_remotePort(int _socket) +double rc_net_tcp_remotePort(int _socket) { + if(_socket < 0 || _socket >= rc_tcp_socket.size()) + return -1; + + if(rc_tcp_socket[_socket].socket == NULL) + return -1; + IPaddress * ip = SDLNet_TCP_GetPeerAddress(rc_tcp_socket[_socket].socket); - return ip->port; + return (double)ip->port; } int rc_net_checkSockets(Uint32 m) @@ -179,6 +197,12 @@ int rc_net_checkSockets(Uint32 m) int rc_net_tcp_socketReady(int _socket) { + if(_socket < 0 || _socket >= rc_tcp_socket.size()) + return 0; + + if(rc_tcp_socket[_socket].socket == NULL) + return 0; + return SDLNet_SocketReady(rc_tcp_socket[_socket].socket); } @@ -214,19 +238,43 @@ void rc_net_tcp_sendData(int socket, std::string data) SDLNet_TCP_Send(rc_tcp_socket[socket].socket, data.c_str(), data.length()); } -bool rc_net_tcp_acceptSocket(int socket_server, int socket_client) +int rc_net_tcp_acceptSocket(int socket_server) { + int socket_client = -1; + + for(int i = 0; i < rc_tcp_socket.size(); i++) + { + if(!rc_tcp_socket[i].active) + { + socket_client = i; + break; + } + } + + if(socket_client < 0) + { + rc_tcp_socket_obj obj; + socket_client = rc_tcp_socket.size(); + rc_tcp_socket.push_back(obj); + } + //cout << "\n\nthis is a test\n\n"; if(rc_tcp_socket[socket_server].socket == NULL) { //cout << "no server" << endl; - return false; + return -1; } bool val = (rc_tcp_socket[socket_client].socket = SDLNet_TCP_Accept(rc_tcp_socket[socket_server].socket)); if(val) SDLNet_TCP_AddSocket(rc_socket_set, rc_tcp_socket[socket_client].socket); + else + { + rc_tcp_socket[socket_client].socket = NULL; + rc_tcp_socket[socket_client].active = false; + return -1; + } //cout << "cp1\n"; - return val; + return socket_client; } bool rc_net_udp_openSocket(Uint16 port) @@ -342,19 +390,40 @@ Uint32 rc_net_udp_maxlen() std::string rc_net_udp_getRemoteHost(int socket) { + if(socket < 0 || socket >= rc_udp_socket.size()) + return ""; + + if(!rc_udp_socket[socket].active) + return ""; + IPaddress * ip = SDLNet_UDP_GetPeerAddress(rc_udp_socket[socket].socket,0); // return SDLNet_ResolveIP(ip); } -Uint32 rc_net_udp_getRemotePort(int socket) +double rc_net_udp_getRemotePort(int socket) { + if(socket < 0 || socket >= rc_udp_socket.size()) + return -1; + + if(!rc_udp_socket[socket].active) + return -1; + IPaddress * ip = SDLNet_UDP_GetPeerAddress(rc_udp_socket[socket].socket,0); - return ip->port; + return (double)ip->port; } void rc_net_udp_closeSocket(int socket) { + if(socket < 0 || socket >= rc_udp_socket.size()) + return; + + if(!rc_udp_socket[socket].active) + { + rc_udp_socket[socket].socket = NULL; + return; + } + SDLNet_UDP_DelSocket(rc_socket_set, rc_udp_socket[socket].socket); SDLNet_UDP_Close(rc_udp_socket[socket].socket); rc_udp_socket[socket].socket = NULL; diff --git a/rcbasic_runtime/rcbasic_runtime.depend b/rcbasic_runtime/rcbasic_runtime.depend index 48c5d7b..9752657 100755 --- a/rcbasic_runtime/rcbasic_runtime.depend +++ b/rcbasic_runtime/rcbasic_runtime.depend @@ -2243,7 +2243,7 @@ -1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_net.h +1734288894 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_net.h "rc_os_defines.h" "SDL.h" @@ -2539,7 +2539,7 @@ 1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h -1733959687 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h +1734285254 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h 1608686973 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h "BulletCollision/CollisionShapes/btTriangleCallback.h"