1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/* -*- c++ -*-
*
* (C) Copyright Pigeon Point Systems. 2011
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTSERVERLITY or FITNESS FOR A PARTICULAR PURPOSE. This
* file and program are licensed under a BSD style license. See
* the Copying file included with the OpenHPI distribution for
* full licensing terms.
*
* Author(s):
* Anton Pak <anton.pak@pigeonpoint.com>
*/
#ifndef SERVER_H_FB2B5DD5_4E7D_49F5_9397_C2FEC21B4010
#define SERVER_H_FB2B5DD5_4E7D_49F5_9397_C2FEC21B4010
#include <stdint.h>
#include <stddef.h>
#ifdef _WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
#include <vector>
#include <glib.h>
#include <SaHpi.h>
#include <oh_utils.h>
namespace TA {
/**************************************************************
* Sockets
*************************************************************/
#ifdef _WIN32
typedef SOCKET SockFdT;
const SockFdT InvalidSockFd = INVALID_SOCKET;
#else
typedef int SockFdT;
const SockFdT InvalidSockFd = -1;
#endif
/**************************************************************
* class cServer
*************************************************************/
class cServer
{
public:
explicit cServer( unsigned short port );
virtual ~cServer();
bool Init();
void Send( const char * data, size_t len ) const;
private:
cServer( const cServer& );
cServer& operator =( const cServer& );
private:
virtual void WelcomeUser() const = 0;
virtual void ProcessUserLine( const std::vector<char>& line,
bool& quit ) = 0;
void SetClientSocket( SockFdT csock );
static gpointer ThreadProcAdapter( gpointer data );
void ThreadProc();
private: // data
uint16_t m_port;
bool m_initialized;
volatile bool m_stop;
GThread * m_thread;
SockFdT m_csock;
mutable GStaticMutex m_csock_lock;
};
}; // namespace TA
#endif // SERVER_H_FB2B5DD5_4E7D_49F5_9397_C2FEC21B4010
|