mirror of
https://github.com/debauchee/barrier.git
synced 2026-02-09 21:25:55 +08:00
event loop model. Streams, stream filters, and sockets are converted. Client proxies are almost converted. CServer is in progress. Removed all HTTP code. Haven't converted the necessary win32 arch stuff.
90 lines
2.2 KiB
C++
90 lines
2.2 KiB
C++
/*
|
|
* synergy -- mouse and keyboard sharing utility
|
|
* Copyright (C) 2002 Chris Schoeneman
|
|
*
|
|
* This package is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* found in the file COPYING that should have accompanied this file.
|
|
*
|
|
* This package is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef CTCPSOCKET_H
|
|
#define CTCPSOCKET_H
|
|
|
|
#include "IDataSocket.h"
|
|
#include "CStreamBuffer.h"
|
|
#include "CCondVar.h"
|
|
#include "CMutex.h"
|
|
#include "IArchNetwork.h"
|
|
|
|
class CMutex;
|
|
class CThread;
|
|
class ISocketMultiplexerJob;
|
|
|
|
//! TCP data socket
|
|
/*!
|
|
A data socket using TCP.
|
|
*/
|
|
class CTCPSocket : public IDataSocket {
|
|
public:
|
|
CTCPSocket();
|
|
CTCPSocket(CArchSocket);
|
|
~CTCPSocket();
|
|
|
|
// ISocket overrides
|
|
virtual void bind(const CNetworkAddress&);
|
|
virtual void close();
|
|
virtual void* getEventTarget() const;
|
|
|
|
// IStream overrides
|
|
virtual UInt32 read(void* buffer, UInt32 n);
|
|
virtual void write(const void* buffer, UInt32 n);
|
|
virtual void flush();
|
|
virtual void shutdownInput();
|
|
virtual void shutdownOutput();
|
|
virtual void setEventFilter(IEventJob* filter);
|
|
virtual bool isReady() const;
|
|
virtual UInt32 getSize() const;
|
|
virtual IEventJob* getEventFilter() const;
|
|
|
|
// IDataSocket overrides
|
|
virtual void connect(const CNetworkAddress&);
|
|
|
|
private:
|
|
void init();
|
|
|
|
void setJob(ISocketMultiplexerJob*);
|
|
ISocketMultiplexerJob* newJob();
|
|
void sendSocketEvent(CEvent::Type);
|
|
void sendStreamEvent(CEvent::Type);
|
|
|
|
void onConnected();
|
|
void onInputShutdown();
|
|
void onOutputShutdown();
|
|
void onDisconnected();
|
|
|
|
ISocketMultiplexerJob*
|
|
serviceConnecting(ISocketMultiplexerJob*,
|
|
bool, bool, bool);
|
|
ISocketMultiplexerJob*
|
|
serviceConnected(ISocketMultiplexerJob*,
|
|
bool, bool, bool);
|
|
|
|
private:
|
|
CMutex m_mutex;
|
|
CArchSocket m_socket;
|
|
CStreamBuffer m_inputBuffer;
|
|
CStreamBuffer m_outputBuffer;
|
|
CCondVar<bool> m_flushed;
|
|
bool m_connected;
|
|
bool m_readable;
|
|
bool m_writable;
|
|
IEventJob* m_eventFilter;
|
|
};
|
|
|
|
#endif
|