mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
118 lines
3.1 KiB
C
118 lines
3.1 KiB
C
|
|
/*
|
||
|
|
* ClientConnectionAdapter.h
|
||
|
|
*
|
||
|
|
* Created on: Nov 2, 2012
|
||
|
|
* Author: Mitchell Wills
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef CLIENTCONNECTIONADAPTER_H_
|
||
|
|
#define CLIENTCONNECTIONADAPTER_H_
|
||
|
|
|
||
|
|
class ClientConnectionAdapter;
|
||
|
|
|
||
|
|
#include "networktables2/connection/ConnectionAdapter.h"
|
||
|
|
#include "networktables2/IncomingEntryReceiver.h"
|
||
|
|
#include "networktables2/FlushableOutgoingEntryReceiver.h"
|
||
|
|
#include "networktables2/client/ClientNetworkTableEntryStore.h"
|
||
|
|
#include "networktables2/stream/IOStreamFactory.h"
|
||
|
|
#include "networktables2/thread/NTThreadManager.h"
|
||
|
|
#include "networktables2/thread/NTThread.h"
|
||
|
|
#include "networktables2/client/ClientConnectionState.h"
|
||
|
|
#include "networktables2/client/ClientConnectionListenerManager.h"
|
||
|
|
#include "networktables2/connection/ConnectionMonitorThread.h"
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Object that adapts messages from a server
|
||
|
|
*
|
||
|
|
* @author Mitchell
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
class ClientConnectionAdapter : public ConnectionAdapter, public IncomingEntryReceiver, public FlushableOutgoingEntryReceiver{
|
||
|
|
private:
|
||
|
|
ClientNetworkTableEntryStore& entryStore;
|
||
|
|
IOStreamFactory& streamFactory;
|
||
|
|
NTThreadManager& threadManager;
|
||
|
|
|
||
|
|
ClientConnectionState* connectionState;
|
||
|
|
ClientConnectionListenerManager& connectionListenerManager;
|
||
|
|
NTReentrantSemaphore LOCK;
|
||
|
|
NetworkTableEntryTypeManager& typeManager;
|
||
|
|
NTThread* readThread;
|
||
|
|
ConnectionMonitorThread* monitor;
|
||
|
|
NetworkTableConnection* connection;
|
||
|
|
|
||
|
|
void gotoState(ClientConnectionState* newState);
|
||
|
|
bool m_IsConnectionClosed; //Keep track of when this is closed to issue reconnect
|
||
|
|
public:
|
||
|
|
/**
|
||
|
|
* @return the state of the connection
|
||
|
|
*/
|
||
|
|
ClientConnectionState* getConnectionState();
|
||
|
|
/**
|
||
|
|
* @return if the client is connected to the server
|
||
|
|
*/
|
||
|
|
bool isConnected();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Create a new ClientConnectionAdapter
|
||
|
|
* @param entryStore
|
||
|
|
* @param threadManager
|
||
|
|
* @param streamFactory
|
||
|
|
* @param transactionPool
|
||
|
|
* @param connectionListenerManager
|
||
|
|
*/
|
||
|
|
ClientConnectionAdapter(ClientNetworkTableEntryStore& entryStore, NTThreadManager& threadManager, IOStreamFactory& streamFactory, ClientConnectionListenerManager& connectionListenerManager, NetworkTableEntryTypeManager& typeManager);
|
||
|
|
virtual ~ClientConnectionAdapter();
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Connection management
|
||
|
|
*/
|
||
|
|
/**
|
||
|
|
* Reconnect the client to the server (even if the client is not currently connected)
|
||
|
|
*/
|
||
|
|
void reconnect();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Close the client connection
|
||
|
|
*/
|
||
|
|
void close();
|
||
|
|
/**
|
||
|
|
* Close the connection to the server and enter the given state
|
||
|
|
* @param newState
|
||
|
|
*/
|
||
|
|
void close(ClientConnectionState* newState);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
void badMessage(BadMessageException& e);
|
||
|
|
|
||
|
|
void ioException(IOException& e);
|
||
|
|
|
||
|
|
NetworkTableEntry* GetEntry(EntryId id);
|
||
|
|
|
||
|
|
|
||
|
|
bool keepAlive();
|
||
|
|
|
||
|
|
void clientHello(ProtocolVersion protocolRevision);
|
||
|
|
|
||
|
|
void protocolVersionUnsupported(ProtocolVersion protocolRevision);
|
||
|
|
|
||
|
|
void serverHelloComplete();
|
||
|
|
|
||
|
|
|
||
|
|
void offerIncomingAssignment(NetworkTableEntry* entry);
|
||
|
|
void offerIncomingUpdate(NetworkTableEntry* entry, SequenceNumber sequenceNumber, EntryValue value);
|
||
|
|
|
||
|
|
void offerOutgoingAssignment(NetworkTableEntry* entry);
|
||
|
|
|
||
|
|
void offerOutgoingUpdate(NetworkTableEntry* entry);
|
||
|
|
void flush();
|
||
|
|
void ensureAlive();
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
#endif /* CLIENTCONNECTIONADAPTER_H_ */
|