controller_patcher/source/utils/TCPServer.hpp

72 lines
1.4 KiB
C++
Raw Normal View History

2020-12-16 01:59:00 +01:00
#ifndef _TCPSERVER_H_
#define _TCPSERVER_H_
#include <sys/select.h>
2021-09-19 21:16:03 +02:00
#include <sys/socket.h>
#include <netinet/in.h>
2020-12-16 01:59:00 +01:00
#include <system/CThread.h>
#include <wut_types.h>
#include <coreinit/cache.h>
#include "utils/logger.h"
class TCPServer {
public:
TCPServer(int32_t port, int32_t priority);
virtual ~TCPServer();
BOOL isConnected() {
return connected;
}
protected:
BOOL shouldExit() {
return (exitThread == 1);
}
int32_t getClientFD() {
return clientfd;
}
int32_t getSocketFD() {
return sockfd;
}
void setThreadPriority(int32_t priority) {
if(pThread != NULL){
pThread->setThreadPriority(priority);
}
}
struct sockaddr_in getSockAddr() {
return sock_addr;
}
private:
virtual void CloseSockets();
virtual void ErrorHandling();
static void DoTCPThread(CThread *thread, void *arg);
virtual void DoTCPThreadInternal();
virtual BOOL acceptConnection() = 0;
virtual void onConnectionClosed(){
2020-12-16 02:04:31 +01:00
DEBUG_FUNCTION_LINE("Default onConnectionClosed ");
2020-12-16 01:59:00 +01:00
}
/**
Called when a connection has be accepted.
**/
virtual BOOL whileLoop() = 0;
struct sockaddr_in sock_addr;
volatile int32_t sockfd = -1;
volatile int32_t clientfd = -1;
int32_t port = 0;
volatile BOOL connected = false;
volatile int32_t exitThread = 0;
CThread *pThread = NULL;
};
#endif //_TCPSERVER_H_