2012-10-30 03:52:39 +00:00
|
|
|
#ifndef cmVirtNet_h
|
|
|
|
#define cmVirtNet_h
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2015-11-16 19:59:27 +00:00
|
|
|
//( { file_desc:"Wrapper object for cmUdpNet to handle UDP network communications." kw:[network]}
|
2012-10-30 03:52:39 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
kOkVnRC = cmOkRC,
|
|
|
|
kUdpNetFailVnRC,
|
|
|
|
kNodeNotFoundVnRC,
|
|
|
|
kDuplicateNodeIdVnRC,
|
|
|
|
kDuplicateNodeLabelVnRC,
|
|
|
|
kQueueFailVnRC
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef cmHandle_t cmVnH_t;
|
|
|
|
typedef cmRC_t cmVnRC_t;
|
|
|
|
|
|
|
|
extern cmVnH_t cmVnNullHandle;
|
|
|
|
|
|
|
|
//
|
|
|
|
typedef cmVnRC_t (*cmVnCb_t)( void* cbArg, unsigned srcNodeId, unsigned byteCnt, const char* buf );
|
|
|
|
|
|
|
|
// Create a virtual network with a single node that represents the owner.
|
|
|
|
// cbFunc() will be called to receive incoming msg's when the owning thread calls cmVnReceive().
|
|
|
|
cmVnRC_t cmVnCreate(
|
|
|
|
cmCtx_t* ctx,
|
|
|
|
cmVnH_t* hp,
|
|
|
|
cmVnCb_t cbFunc, // owner msg receive callback function
|
|
|
|
void* cbArg, // owner supplied callback argument for cbFunc
|
|
|
|
const cmChar_t* ownerNodelabel, // owners node label (must be unique among all nodes)
|
|
|
|
unsigned ownerNodeId, // owners node id (must be unique among all nodes)
|
|
|
|
unsigned udpRecvBufByteCnt, // size of the UDP incoming data buffer
|
|
|
|
unsigned updRecvTimeOutMs, // UDP time out period while waiting for incoming data
|
|
|
|
const cmChar_t* ipAddr, // this machines IP
|
|
|
|
unsigned ipPort ); // this nodes port (must be unique among all local nodes)
|
|
|
|
|
|
|
|
// Destroy and release any resources held by a virtual net created with cmVnCreate().
|
|
|
|
cmVnRC_t cmVnDestroy( cmVnH_t* hp );
|
|
|
|
|
|
|
|
bool cmVnIsValid( cmVnH_t h );
|
|
|
|
|
|
|
|
// Put the network into listening mode. This function enables and disables
|
|
|
|
// the UDP port listening thread.
|
|
|
|
cmVnRC_t cmVnEnableListen( cmVnH_t h, bool enableFl );
|
|
|
|
|
|
|
|
// Local nodes are nodes which are in the owners address space but controlled by a different thread.
|
|
|
|
//
|
|
|
|
cmVnRC_t cmVnCreateLocalNode( cmVnH_t h, const cmChar_t* label, unsigned nodeId, cmVnH_t localNet, unsigned queBufByteCnt );
|
|
|
|
|
|
|
|
// Remote nodes are outside the owners address space and are communicated with via UDP.
|
|
|
|
cmVnRC_t cmVnCreateRemoteNode( cmVnH_t h, const cmChar_t* label, unsigned nodeId, const cmChar_t* ipAddr, unsigned ipPort );
|
|
|
|
|
|
|
|
// Send a msg from the owner node to another node.
|
|
|
|
cmVnRC_t cmVnSendById( cmVnH_t h, unsigned nodeId, unsigned byteCnt, const cmChar_t* buf );
|
|
|
|
cmVnRC_t cmVnSendByLabel( cmVnH_t h, const cmChar_t* nodeLabel, unsigned byteCnt, const cmChar_t* buf );
|
|
|
|
|
|
|
|
// Recv a msg from a local node. This function may be called outside the 'owner' thread.
|
|
|
|
// This function stores the incoming msg in a muliple-producer single-consumer queue.
|
|
|
|
cmVnRC_t cmVnRecvFromLocal( cmVnH_t h, unsigned srcNodeId, unsigned byteCnt, const cmChar_t* buf );
|
|
|
|
|
|
|
|
// Calling this function results in callback's to the cmVnCb_t function.
|
|
|
|
cmVnRC_t cmVnReceive( cmVnH_t h, unsigned* msgCntPtr );
|
|
|
|
|
|
|
|
cmVnRC_t cmVnTest( cmCtx_t* ctx );
|
|
|
|
|
2015-11-16 19:59:27 +00:00
|
|
|
//)
|
|
|
|
|
2012-10-30 03:52:39 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|