aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/net
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-11-18 23:31:17 +0800
committerchai <chaifix@163.com>2018-11-18 23:31:17 +0800
commitf0f340dec7821cee103ab9267ef941a917ef4dc4 (patch)
tree2f77f6ce6bdc9f63f002c13d4c261e1d6a9c1729 /src/libjin/net
parentfc7b4579e49aaeecc81919e247e03f68bd5abfd4 (diff)
*目录改为小写
Diffstat (limited to 'src/libjin/net')
-rw-r--r--src/libjin/net/je_net_manager.cpp24
-rw-r--r--src/libjin/net/je_net_manager.h50
-rw-r--r--src/libjin/net/je_socket.cpp190
-rw-r--r--src/libjin/net/je_socket.h144
4 files changed, 408 insertions, 0 deletions
diff --git a/src/libjin/net/je_net_manager.cpp b/src/libjin/net/je_net_manager.cpp
new file mode 100644
index 0000000..c4f822e
--- /dev/null
+++ b/src/libjin/net/je_net_manager.cpp
@@ -0,0 +1,24 @@
+#include "je_net_manager.h"
+
+namespace JinEngine
+{
+ namespace Net
+ {
+
+ bool NetManager::initSystem(const SettingBase* setting)
+ {
+ #ifdef _WIN32
+ #if jin_net == jin_net_tekcos
+ tk_init();
+ #endif
+ #endif
+ return true;
+ }
+
+ void NetManager::quitSystem()
+ {
+
+ }
+
+ } // namespace Net
+} // namespace JinEngine \ No newline at end of file
diff --git a/src/libjin/net/je_net_manager.h b/src/libjin/net/je_net_manager.h
new file mode 100644
index 0000000..62aa947
--- /dev/null
+++ b/src/libjin/net/je_net_manager.h
@@ -0,0 +1,50 @@
+#ifndef __JE_NET_H__
+#define __JE_NET_H__
+#include "../core/je_configuration.h"
+#if defined(jin_net)
+
+#include "../common/je_subsystem.hpp"
+
+#include "je_socket.h"
+
+namespace JinEngine
+{
+ namespace Net
+ {
+
+ ///
+ ///
+ ///
+ class NetManager : public Subsystem<NetManager>
+ {
+ protected:
+ singleton(NetManager);
+
+ ///
+ ///
+ ///
+ NetManager() {};
+
+ ///
+ ///
+ ///
+ ~NetManager() {};
+
+ ///
+ ///
+ ///
+ bool initSystem(const SettingBase* setting) override;
+
+ ///
+ ///
+ ///
+ void quitSystem() override;
+
+ };
+
+ } // namespace Net
+} // namespace JinEngine
+
+#endif // defined(jin_net)
+
+#endif // __JE_NET_H__
diff --git a/src/libjin/net/je_socket.cpp b/src/libjin/net/je_socket.cpp
new file mode 100644
index 0000000..1810601
--- /dev/null
+++ b/src/libjin/net/je_socket.cpp
@@ -0,0 +1,190 @@
+#include "je_socket.h"
+
+namespace JinEngine
+{
+ namespace Net
+ {
+ Socket::Socket(const Socket& socket)
+ : mHandle(socket.mHandle)
+ , mType(socket.mType)
+ {
+ }
+
+ Socket::Socket(const SocketInformation& info)
+ : mType(info.type)
+ {
+ if (mType == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ ip.host = info.address;
+ ip.port = info.port;
+ mHandle.tcpHandle = tk_tcp_open(ip);
+ }
+ else if (mType == SocketType::UDP)
+ {
+ mHandle.udpHandle = tk_udp_open(info.port);
+ }
+ }
+
+ Socket::Socket(SocketType type, const char* address, unsigned short port)
+ {
+ mType = type;
+ if (mType == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ #if jin_net == jin_net_tekcos
+ ip.host = tk_strtohl(address);
+ ip.port = port;
+ mHandle.tcpHandle = tk_tcp_open(ip);
+ #endif
+ }
+ else if (mType == SocketType::UDP)
+ {
+ mHandle.udpHandle = tk_udp_open(port);
+ }
+ }
+
+ Socket::Socket(SocketType type, unsigned int address, unsigned short port)
+ {
+ mType = type;
+ if (mType == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ ip.host = address;
+ ip.port = port;
+ mHandle.tcpHandle = tk_tcp_open(ip);
+ }
+ else if (mType == SocketType::UDP)
+ {
+ mHandle.udpHandle = tk_udp_open(port);
+ }
+ }
+
+ Socket::Socket(SocketType type, unsigned short port)
+ {
+ mType = type;
+ if (mType == SocketType::TCP)
+ {
+ tk_IPaddress ip;
+ ip.host = 0;
+ ip.port = port;
+ mHandle.tcpHandle = tk_tcp_open(ip);
+ }
+ else if (mType == SocketType::UDP)
+ {
+ mHandle.udpHandle = tk_udp_open(port);
+ }
+ }
+
+ #if jin_net == jin_net_tekcos
+
+ Socket::Socket(const tk_TCPsocket& tcphandle)
+ {
+ mHandle.tcpHandle = tcphandle;
+ }
+
+ Socket::Socket(const tk_UDPsocket& udphandle)
+ {
+ mHandle.udpHandle = udphandle;
+ }
+
+ #endif // jin_net == jin_net_tekcos
+
+ Socket::~Socket()
+ {
+ }
+
+ void Socket::configureBlocking(bool blocking)
+ {
+ if (mType != SocketType::TCP)
+ return;
+ #if jin_net == jin_net_tekcos
+ if (blocking)
+ tk_tcp_blocking(&mHandle.tcpHandle);
+ else
+ tk_tcp_nonblocking(&mHandle.tcpHandle);
+ #endif
+ }
+
+ Socket* Socket::accept()
+ {
+ if (mType != SocketType::TCP)
+ return nullptr;
+ Socket* client;
+ #if jin_net == jin_net_tekcos
+ tk_TCPsocket socket = tk_tcp_accept(&mHandle.tcpHandle);
+ client = new Socket(socket);
+ #endif
+ return client;
+ }
+
+ int Socket::receive(char* buffer, int size)
+ {
+ if (mType != SocketType::TCP)
+ return 0;
+ #if jin_net == jin_net_tekcos
+ int len;
+ tk_tcp_recv(&mHandle.tcpHandle, buffer, size, &len);
+ return len;
+ #endif
+ }
+
+ int Socket::send(char* buffer, int size)
+ {
+ if (mType != SocketType::TCP)
+ return 0;
+ #if jin_net == jin_net_tekcos
+ int len;
+ tk_tcp_send(&mHandle.tcpHandle, buffer, size, &len);
+ return len;
+ #endif
+ }
+
+ void Socket::sendTo(char* buffer, int size, unsigned int address, unsigned int port)
+ {
+ if (mType != SocketType::UDP)
+ return;
+ #if jin_net == jin_net_tekcos
+ tk_UDPpack pack;
+ pack.data = buffer;
+ pack.len = size;
+ pack.ip.host = address;
+ pack.ip.port = port;
+ tk_udp_sendto(&mHandle.udpHandle, &pack);
+ #endif
+ }
+
+ int Socket::receiveFrom(char* buffer, int size, unsigned int address, unsigned int port)
+ {
+ if (mType != SocketType::UDP)
+ return 0;
+ int len;
+ #if jin_net == jin_net_tekcos
+ tk_UDPpack pack;
+ pack.data = buffer;
+ pack.len = size;
+ pack.ip.host = address;
+ pack.ip.port = port;
+ tk_udp_recvfrom(&mHandle.udpHandle, &pack);
+ return pack.len;
+ #endif
+ }
+
+ void Socket::close()
+ {
+ if (mType == SocketType::TCP)
+ {
+ #if jin_net == jin_net_tekcos
+ tk_tcp_close(&mHandle.tcpHandle);
+ #endif
+ }
+ else if (mType == SocketType::UDP)
+ {
+ #if jin_net == jin_net_tekcos
+ tk_udp_close(&mHandle.udpHandle);
+ #endif
+ }
+ }
+
+ } // namespace Net
+} // namespace JinEngine \ No newline at end of file
diff --git a/src/libjin/net/je_socket.h b/src/libjin/net/je_socket.h
new file mode 100644
index 0000000..eb01719
--- /dev/null
+++ b/src/libjin/net/je_socket.h
@@ -0,0 +1,144 @@
+#ifndef __JE_NET_SOCKET_H__
+#define __JE_NET_SOCKET_H__
+#include "../core/je_configuration.h"
+#if defined(jin_net)
+
+#include "tekcos/tekcos.h"
+
+namespace JinEngine
+{
+ namespace Net
+ {
+
+ ///
+ ///
+ ///
+ enum SocketType
+ {
+ TCP,
+ UDP
+ };
+
+ ///
+ ///
+ ///
+ struct SocketInformation
+ {
+ unsigned int address;
+ unsigned short port;
+ SocketType type;
+ };
+
+ ///
+ ///
+ ///
+ class Socket
+ {
+ public:
+
+ ///
+ ///
+ ///
+ Socket() {};
+
+ ///
+ ///
+ ///
+ Socket(const Socket& socket);
+
+ ///
+ ///
+ ///
+ Socket(const SocketInformation& socketInformation);
+
+ ///
+ ///
+ ///
+ Socket(SocketType type, unsigned short port);
+
+ ///
+ ///
+ ///
+ Socket(SocketType type, unsigned int address, unsigned short port);
+
+ ///
+ ///
+ ///
+ Socket(SocketType type, const char* address, unsigned short port);
+
+ ///
+ ///
+ ///
+ ~Socket();
+
+ ///
+ ///
+ ///
+ void configureBlocking(bool bocking);
+
+ ///
+ ///
+ ///
+ Socket* accept();
+
+ ///
+ ///
+ ///
+ int receive(char* buffer, int size);
+
+ ///
+ ///
+ ///
+ int send(char* buffer, int size);
+
+ ///
+ ///
+ ///
+ void sendTo(char* buffer, int size, unsigned int address, unsigned int port);
+
+ ///
+ ///
+ ///
+ int receiveFrom(char* buffer, int size, unsigned int address, unsigned int port);
+
+ ///
+ ///
+ ///
+ void close();
+
+ protected:
+ #if jin_net == jin_net_tekcos
+
+ ///
+ ///
+ ///
+ Socket(const tk_TCPsocket& tcpHandle);
+
+ ///
+ ///
+ ///
+ Socket(const tk_UDPsocket& udpHandle);
+
+ ///
+ ///
+ ///
+ union
+ {
+ tk_TCPsocket tcpHandle;
+ tk_UDPsocket udpHandle;
+ } mHandle;
+ #endif
+
+ ///
+ ///
+ ///
+ SocketType mType;
+
+ };
+
+ } // namespace Net
+} // namespace JinEngine
+
+#endif // defined(jin_net)
+
+#endif // __JE_NET_SOCKET_H__ \ No newline at end of file