CIRCT 24.0.0git
Loading...
Searching...
No Matches
esi::backends::cosim::RpcClient::Impl Class Reference
Collaboration diagram for esi::backends::cosim::RpcClient::Impl:

Public Member Functions

 Impl (Logger &logger, const std::string &hostname, uint16_t port)
 ~Impl ()
Logger & getLogger ()
uint32_t getEsiVersion () const
std::vector< uint8_t > getCompressedManifest () const
bool getChannelDesc (const std::string &name, RpcClient::ChannelDesc &desc) const
std::vector< RpcClient::ChannelDesc > listChannels () const
void writeToServer (const std::string &channelName, const MessageData &data)
bool tryWriteToServer (const std::string &channelName, const std::vector< MessageData > &frames, bool force)
void setToServerMaxInFlight (const std::string &channelName, unsigned maxInFlight)
std::unique_ptr< RpcClient::ReadChannelConnection > connectClientReceiver (const std::string &channelName, RpcClient::ReadCallback callback, unsigned maxInFlight)
void unsubscribe (uint64_t channelId)
void unregisterCallback (uint64_t channelId)

Private Types

enum class  OpenState

Private Member Functions

void onMessage (const ix::WebSocketMessagePtr &msg)
void handleControlFrame (const std::string &text)
void handleEvent (const json &frame)
void handleBinaryFrame (const std::string &data)
void failAllPending (const std::string &reason)
void markConnectionLost ()
 Wake every writer blocked on credits so it can observe the lost connection and throw.
json call (const std::string &method, json params)
 Issue a JSON-RPC style request and synchronously await the response.
const ChannelMeta & getToServerChannel (const std::string &channelName) const
 Look up a to-server channel by name, throwing if it isn't one.
void sendFrame (const ChannelMeta &meta, const MessageData &data)
 Send one data frame. Throws on a transport failure.
void transportLoop ()
void sendConsumedEvent (const std::unordered_map< std::shared_ptr< ReadCallbackEntry >, uint64_t > &acks)
 Report acks (subscription -> count) of client-bound frames as consumed, leaving out canceled subscriptions.

Private Attributes

std::string host
Logger & logger
uint32_t esiVersion = 0
std::vector< uint8_t > manifest
std::unordered_map< std::string, ChannelMeta > channelsByName
std::unordered_map< uint64_t, ChannelMeta > channelsById
std::unordered_map< uint64_t, std::unique_ptr< WriteCredit > > writeCredits
std::atomic< bool > connectionLost {false}
std::atomic< bool > channelTablesReady {false}
std::mutex pendingMutex
std::atomic< uint64_t > nextRequestId {1}
std::unordered_map< uint64_t, std::shared_ptr< std::promise< json > > > pending
std::mutex readCallbacksMutex
std::unordered_map< uint64_t, std::shared_ptr< ReadCallbackEntry > > readCallbacks
std::mutex ackMutex
utils::ReadyIdSet< uint64_t > readyIds
std::thread transportThread
std::mutex openMutex
std::condition_variable openCV
enum RpcClient::Impl::OpenState Pending
std::string openError
std::mutex lastServerErrorMutex
std::string lastServerError
std::atomic< bool > disconnecting {false}
::esi::cosim::FaultStash faultStash
ix::WebSocket ws

Detailed Description

Definition at line 53 of file RpcClient.cpp.

Member Enumeration Documentation

◆ OpenState

enum class RpcClient::Impl::OpenState
strongprivate

Definition at line 197 of file RpcClient.cpp.

Constructor & Destructor Documentation

◆ Impl()

esi::backends::cosim::RpcClient::Impl::Impl ( Logger & logger,
const std::string & hostname,
uint16_t port )

References logger.

◆ ~Impl()

Member Function Documentation

◆ call()

json esi::backends::cosim::RpcClient::Impl::call ( const std::string & method,
json params )
private

Issue a JSON-RPC style request and synchronously await the response.

Throws on error (transport or server-reported).

Referenced by esiaccel.types.FunctionPort::__call__().

◆ connectClientReceiver()

std::unique_ptr< RpcClient::ReadChannelConnection > esi::backends::cosim::RpcClient::Impl::connectClientReceiver ( const std::string & channelName,
RpcClient::ReadCallback callback,
unsigned maxInFlight )

◆ failAllPending()

void esi::backends::cosim::RpcClient::Impl::failAllPending ( const std::string & reason)
private

◆ getChannelDesc()

bool esi::backends::cosim::RpcClient::Impl::getChannelDesc ( const std::string & name,
RpcClient::ChannelDesc & desc ) const

◆ getCompressedManifest()

std::vector< uint8_t > esi::backends::cosim::RpcClient::Impl::getCompressedManifest ( ) const
inline

Definition at line 61 of file RpcClient.cpp.

References manifest.

◆ getEsiVersion()

uint32_t esi::backends::cosim::RpcClient::Impl::getEsiVersion ( ) const
inline

Definition at line 60 of file RpcClient.cpp.

References esiVersion.

◆ getLogger()

Logger & esi::backends::cosim::RpcClient::Impl::getLogger ( )
inline

Definition at line 58 of file RpcClient.cpp.

References logger.

◆ getToServerChannel()

const ChannelMeta & esi::backends::cosim::RpcClient::Impl::getToServerChannel ( const std::string & channelName) const
private

Look up a to-server channel by name, throwing if it isn't one.

◆ handleBinaryFrame()

void esi::backends::cosim::RpcClient::Impl::handleBinaryFrame ( const std::string & data)
private

◆ handleControlFrame()

void esi::backends::cosim::RpcClient::Impl::handleControlFrame ( const std::string & text)
private

◆ handleEvent()

◆ listChannels()

std::vector< RpcClient::ChannelDesc > esi::backends::cosim::RpcClient::Impl::listChannels ( ) const

◆ markConnectionLost()

void esi::backends::cosim::RpcClient::Impl::markConnectionLost ( )
private

Wake every writer blocked on credits so it can observe the lost connection and throw.

◆ onMessage()

void esi::backends::cosim::RpcClient::Impl::onMessage ( const ix::WebSocketMessagePtr & msg)
private

◆ sendConsumedEvent()

void esi::backends::cosim::RpcClient::Impl::sendConsumedEvent ( const std::unordered_map< std::shared_ptr< ReadCallbackEntry >, uint64_t > & acks)
private

Report acks (subscription -> count) of client-bound frames as consumed, leaving out canceled subscriptions.

◆ sendFrame()

void esi::backends::cosim::RpcClient::Impl::sendFrame ( const ChannelMeta & meta,
const MessageData & data )
private

Send one data frame. Throws on a transport failure.

◆ setToServerMaxInFlight()

void esi::backends::cosim::RpcClient::Impl::setToServerMaxInFlight ( const std::string & channelName,
unsigned maxInFlight )

◆ transportLoop()

◆ tryWriteToServer()

bool esi::backends::cosim::RpcClient::Impl::tryWriteToServer ( const std::string & channelName,
const std::vector< MessageData > & frames,
bool force )

◆ unregisterCallback()

void esi::backends::cosim::RpcClient::Impl::unregisterCallback ( uint64_t channelId)

◆ unsubscribe()

void esi::backends::cosim::RpcClient::Impl::unsubscribe ( uint64_t channelId)

◆ writeToServer()

void esi::backends::cosim::RpcClient::Impl::writeToServer ( const std::string & channelName,
const MessageData & data )

Member Data Documentation

◆ ackMutex

std::mutex esi::backends::cosim::RpcClient::Impl::ackMutex
private

Definition at line 179 of file RpcClient.cpp.

◆ channelsById

std::unordered_map<uint64_t, ChannelMeta> esi::backends::cosim::RpcClient::Impl::channelsById
private

Definition at line 117 of file RpcClient.cpp.

◆ channelsByName

std::unordered_map<std::string, ChannelMeta> esi::backends::cosim::RpcClient::Impl::channelsByName
private

Definition at line 116 of file RpcClient.cpp.

◆ channelTablesReady

std::atomic<bool> esi::backends::cosim::RpcClient::Impl::channelTablesReady {false}
private

Definition at line 135 of file RpcClient.cpp.

◆ connectionLost

std::atomic<bool> esi::backends::cosim::RpcClient::Impl::connectionLost {false}
private

Definition at line 131 of file RpcClient.cpp.

◆ disconnecting

std::atomic<bool> esi::backends::cosim::RpcClient::Impl::disconnecting {false}
private

Definition at line 207 of file RpcClient.cpp.

◆ esiVersion

Definition at line 114 of file RpcClient.cpp.

Referenced by getEsiVersion().

◆ faultStash

◆ host

std::string esi::backends::cosim::RpcClient::Impl::host
private

Definition at line 110 of file RpcClient.cpp.

◆ lastServerError

std::string esi::backends::cosim::RpcClient::Impl::lastServerError
private

Definition at line 205 of file RpcClient.cpp.

◆ lastServerErrorMutex

std::mutex esi::backends::cosim::RpcClient::Impl::lastServerErrorMutex
private

Definition at line 204 of file RpcClient.cpp.

◆ logger

Logger& esi::backends::cosim::RpcClient::Impl::logger
private

Definition at line 111 of file RpcClient.cpp.

Referenced by getLogger(), and Impl().

◆ manifest

std::vector<uint8_t> esi::backends::cosim::RpcClient::Impl::manifest
private

◆ nextRequestId

std::atomic<uint64_t> esi::backends::cosim::RpcClient::Impl::nextRequestId {1}
private

Definition at line 139 of file RpcClient.cpp.

◆ openCV

std::condition_variable esi::backends::cosim::RpcClient::Impl::openCV
private

Definition at line 196 of file RpcClient.cpp.

◆ openError

std::string esi::backends::cosim::RpcClient::Impl::openError
private

Definition at line 198 of file RpcClient.cpp.

◆ openMutex

std::mutex esi::backends::cosim::RpcClient::Impl::openMutex
private

Definition at line 195 of file RpcClient.cpp.

◆ Pending

enum RpcClient::Impl::OpenState esi::backends::cosim::RpcClient::Impl::Pending
private

◆ pending

std::unordered_map<uint64_t, std::shared_ptr<std::promise<json> > > esi::backends::cosim::RpcClient::Impl::pending
private

Definition at line 140 of file RpcClient.cpp.

◆ pendingMutex

std::mutex esi::backends::cosim::RpcClient::Impl::pendingMutex
private

Definition at line 138 of file RpcClient.cpp.

◆ readCallbacks

std::unordered_map<uint64_t, std::shared_ptr<ReadCallbackEntry> > esi::backends::cosim::RpcClient::Impl::readCallbacks
private

Definition at line 173 of file RpcClient.cpp.

◆ readCallbacksMutex

std::mutex esi::backends::cosim::RpcClient::Impl::readCallbacksMutex
private

Definition at line 171 of file RpcClient.cpp.

◆ readyIds

◆ transportThread

Definition at line 184 of file RpcClient.cpp.

◆ writeCredits

std::unordered_map<uint64_t, std::unique_ptr<WriteCredit> > esi::backends::cosim::RpcClient::Impl::writeCredits
private

Definition at line 130 of file RpcClient.cpp.

◆ ws

ix::WebSocket esi::backends::cosim::RpcClient::Impl::ws
private

Definition at line 216 of file RpcClient.cpp.


The documentation for this class was generated from the following file: