Various small changes
[dasher.git] / Src / DasherCore / SocketInput.h
blob368f0c26271063d8ef8c1d0b6f0eade3af8408c7
1 // SocketInput.h
2 //
3 // (C) Copyright Seb Wills 2005
4 //
5 // Linux-specific subclass of SocketInputBase: provides network socket control of Dasher cursor
7 #ifndef __SocketInput_h__
8 #define __SocketInput_h__
10 #include "./SocketInputBase.h"
11 #include "./DasherComponent.h"
12 #include "./EventHandler.h"
14 #include <iostream>
15 #include <pthread.h>
17 #define GCC_VERSION (__GNUC__ * 10000 \
18 + __GNUC_MINOR__ * 100 \
19 + __GNUC_PATCHLEVEL__)
23 namespace Dasher {
24 class CSocketInput;
25 #if GCC_VERSION >= 40100
26 void *ThreadLauncherStub(void *_myClass);
27 #endif
30 using namespace Dasher;
31 using namespace std;
33 class Dasher::CSocketInput:public CSocketInputBase {
35 // This non-member launcher stub function is required because pthreads can't launch a non-static member method.
36 friend void *ThreadLauncherStub(void *_myClass) {
37 CSocketInput *myClass = (CSocketInput *) _myClass;
39 pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); // kill this thread immediately if another thread cancels it
40 // don't know how this interacts with recv blocking
42 myClass->ReadForever();
44 return NULL;
47 public:
49 CSocketInput(CEventHandler * pEventHandler, CSettingsStore * pSettingsStore);
50 ~CSocketInput();
52 private:
54 pthread_t readerThread;
56 bool LaunchReaderThread();
58 void CancelReaderThread();
60 // TODO: should probably override ReportErrnoError() to popup a Gtk error message
64 #endif