00001 /* 00002 * synergy -- mouse and keyboard sharing utility 00003 * Copyright (C) 2004 Chris Schoeneman 00004 * 00005 * This package is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU General Public License 00007 * found in the file COPYING that should have accompanied this file. 00008 * 00009 * This package is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 */ 00014 00015 #ifndef CCLIENTPROXYUNKNOWN_H 00016 #define CCLIENTPROXYUNKNOWN_H 00017 00018 #include "CEvent.h" 00019 00020 class CClientProxy; 00021 class CEventQueueTimer; 00022 class IStream; 00023 00024 class CClientProxyUnknown { 00025 public: 00026 CClientProxyUnknown(IStream* stream, double timeout); 00027 ~CClientProxyUnknown(); 00028 00030 00031 00033 00038 CClientProxy* orphanClientProxy(); 00039 00041 00042 00043 00045 00049 static CEvent::Type getSuccessEvent(); 00050 00052 00056 static CEvent::Type getFailureEvent(); 00057 00059 00060 private: 00061 void sendSuccess(); 00062 void sendFailure(); 00063 void addStreamHandlers(); 00064 void addProxyHandlers(); 00065 void removeHandlers(); 00066 void removeTimer(); 00067 void handleData(const CEvent&, void*); 00068 void handleWriteError(const CEvent&, void*); 00069 void handleTimeout(const CEvent&, void*); 00070 void handleDisconnect(const CEvent&, void*); 00071 void handleReady(const CEvent&, void*); 00072 00073 private: 00074 IStream* m_stream; 00075 CEventQueueTimer* m_timer; 00076 CClientProxy* m_proxy; 00077 bool m_ready; 00078 00079 static CEvent::Type s_successEvent; 00080 static CEvent::Type s_failureEvent; 00081 }; 00082 00083 #endif