aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Net/je_socket.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-10-19 08:36:44 +0800
committerchai <chaifix@163.com>2018-10-19 08:36:44 +0800
commit7d5f055547e70fa93ee9ac944e62f8d657b9dc55 (patch)
tree081782a1541854db4b8eb69c4b43081f52711286 /src/libjin/Net/je_socket.cpp
parent02dd1f38008594048f0e28bad01e7c6d18844198 (diff)
*修改文件名
Diffstat (limited to 'src/libjin/Net/je_socket.cpp')
-rw-r--r--src/libjin/Net/je_socket.cpp190
1 files changed, 190 insertions, 0 deletions
diff --git a/src/libjin/Net/je_socket.cpp b/src/libjin/Net/je_socket.cpp
new file mode 100644
index 0000000..3a8be7f
--- /dev/null
+++ b/src/libjin/Net/je_socket.cpp
@@ -0,0 +1,190 @@
+#include "je_socket.h"
+
+namespace jin
+{
+ namespace net
+ {
+ Socket::Socket(const Socket& socket)
+ : handle(socket.handle)
+ , type(socket.type)
+ {
+ }
+
+ Socket::Socket(const SocketInformation& info)
+ : type(info.type)
+ {
+ if (type == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ ip.host = info.address;
+ ip.port = info.port;
+ handle.tcpHandle = tk_tcp_open(ip);
+ }
+ else if (type == SocketType::UDP)
+ {
+ handle.udpHandle = tk_udp_open(info.port);
+ }
+ }
+
+ Socket::Socket(SocketType type, const char* address, unsigned short port)
+ {
+ this->type = type;
+ if (type == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ #if LIBJIN_NET_TEKCOS
+ ip.host = tk_strtohl(address);
+ ip.port = port;
+ handle.tcpHandle = tk_tcp_open(ip);
+ #endif
+ }
+ else if (type == SocketType::UDP)
+ {
+ handle.udpHandle = tk_udp_open(port);
+ }
+ }
+
+ Socket::Socket(SocketType type, unsigned int address, unsigned short port)
+ {
+ this->type = type;
+ if (type == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ ip.host = address;
+ ip.port = port;
+ handle.tcpHandle = tk_tcp_open(ip);
+ }
+ else if (type == SocketType::UDP)
+ {
+ handle.udpHandle = tk_udp_open(port);
+ }
+ }
+
+ Socket::Socket(SocketType type, unsigned short port)
+ {
+ this->type = type;
+ if (type == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ ip.host = 0;
+ ip.port = port;
+ handle.tcpHandle = tk_tcp_open(ip);
+ }
+ else if (type == SocketType::UDP)
+ {
+ handle.udpHandle = tk_udp_open(port);
+ }
+ }
+
+ #if LIBJIN_NET_TEKCOS
+
+ Socket::Socket(const tk_TCPsocket& tcphandle)
+ {
+ handle.tcpHandle = tcphandle;
+ }
+
+ Socket::Socket(const tk_UDPsocket& udphandle)
+ {
+ handle.udpHandle = udphandle;
+ }
+
+ #endif // LIBJIN_NET_TEKCOS
+
+ Socket::~Socket()
+ {
+ }
+
+ void Socket::configureBlocking(bool blocking)
+ {
+ if (type != SocketType::TCP)
+ return;
+ #if LIBJIN_NET_TEKCOS
+ if (blocking)
+ tk_tcp_blocking(&handle.tcpHandle);
+ else
+ tk_tcp_nonblocking(&handle.tcpHandle);
+ #endif
+ }
+
+ Socket* Socket::accept()
+ {
+ if (type != SocketType::TCP)
+ return nullptr;
+ Socket* client;
+ #if LIBJIN_NET_TEKCOS
+ tk_TCPsocket socket = tk_tcp_accept(&handle.tcpHandle);
+ client = new Socket(socket);
+ #endif
+ return client;
+ }
+
+ int Socket::receive(char* buffer, int size)
+ {
+ if (type != SocketType::TCP)
+ return 0;
+ #if LIBJIN_NET_TEKCOS
+ int len;
+ tk_tcp_recv(&handle.tcpHandle, buffer, size, &len);
+ return len;
+ #endif
+ }
+
+ int Socket::send(char* buffer, int size)
+ {
+ if (type != SocketType::TCP)
+ return 0;
+ #if LIBJIN_NET_TEKCOS
+ int len;
+ tk_tcp_send(&handle.tcpHandle, buffer, size, &len);
+ return len;
+ #endif
+ }
+
+ void Socket::sendTo(char* buffer, int size, unsigned int address, unsigned int port)
+ {
+ if (type != SocketType::UDP)
+ return;
+ #if LIBJIN_NET_TEKCOS
+ tk_UDPpack pack;
+ pack.data = buffer;
+ pack.len = size;
+ pack.ip.host = address;
+ pack.ip.port = port;
+ tk_udp_sendto(&handle.udpHandle, &pack);
+ #endif
+ }
+
+ int Socket::receiveFrom(char* buffer, int size, unsigned int address, unsigned int port)
+ {
+ if (type != SocketType::UDP)
+ return 0;
+ int len;
+ #if LIBJIN_NET_TEKCOS
+ tk_UDPpack pack;
+ pack.data = buffer;
+ pack.len = size;
+ pack.ip.host = address;
+ pack.ip.port = port;
+ tk_udp_recvfrom(&handle.udpHandle, &pack);
+ return pack.len;
+ #endif
+ }
+
+ void Socket::close()
+ {
+ if (type == SocketType::TCP)
+ {
+ #if LIBJIN_NET_TEKCOS
+ tk_tcp_close(&handle.tcpHandle);
+ #endif
+ }
+ else if (type == SocketType::UDP)
+ {
+ #if LIBJIN_NET_TEKCOS
+ tk_udp_close(&handle.udpHandle);
+ #endif
+ }
+ }
+
+ } // namespace net
+} // namespace jin \ No newline at end of file