X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink%2B%2B.h;h=4f35e8a97f7c95def970cfbab06a376751818f19;hb=c6cc7da56d108f05ea6f9a2f765f699e6e2353db;hp=8271ab2f4cbfb4814009a81d2f9b61a7c8381f68;hpb=f416117836dc944822cac06efb54377fb21ee66f;p=meshlink diff --git a/src/meshlink++.h b/src/meshlink++.h index 8271ab2f..4f35e8a9 100644 --- a/src/meshlink++.h +++ b/src/meshlink++.h @@ -77,6 +77,13 @@ namespace meshlink { */ typedef void (*channel_receive_cb_t)(mesh *mesh, channel *channel, const void *data, size_t len); + /// A callback that is called when data can be send on a channel. + /** @param mesh A handle which represents an instance of MeshLink. + * @param channel A handle for the channel. + * @param len The maximum length of data that is guaranteed to be accepted by a call to channel_send(). + */ + typedef void (*channel_poll_cb_t)(mesh *mesh, channel *channel, size_t len); + /// A class describing a MeshLink node. class node: public meshlink_node_t { }; @@ -88,7 +95,7 @@ namespace meshlink { /// A class describing a MeshLink mesh. class mesh: public meshlink_handle_t { public: - mesh() {} + mesh() : meshlink_handle_t() {} virtual ~mesh() { meshlink_close(this); @@ -292,6 +299,21 @@ namespace meshlink { return meshlink_set_channel_accept_cb(this, (meshlink_channel_accept_cb_t)cb); } + /// Set the poll callback. + /** This functions sets the callback that is called whenever data can be sent to another node. + * The callback is run in MeshLink's own thread. + * It is therefore important that the callback uses apprioriate methods (queues, pipes, locking, etc.) + * to pass data to or from the application's thread. + * The callback should also not block itself and return as quickly as possible. + * + * @param channel A handle for the channel. + * @param cb A pointer to the function which will be called when data can be sent to another node. + * If a NULL pointer is given, the callback will be disabled. + */ + void set_channel_poll_cb(channel *channel, channel_poll_cb_t cb) { + return meshlink_set_channel_poll_cb(this, (meshlink_channel_poll_cb_t)cb); + } + /// Open a reliable stream channel to another node. /** This function is called whenever a remote node wants to open a channel to the local node. * The application then has to decide whether to accept or reject this channel. @@ -387,8 +409,8 @@ namespace meshlink { * @return This function will return a pointer to a meshlink::mesh if MeshLink has succesfully set up its configuration files, NULL otherwise. */ template - static MESH* open(const char *confbase, const char *name, const char* appname, dclass_t dclass) { - void* mp = (void *)meshlink_open_with_size(confbase, name, appname, dclass, sizeof(MESH)); + static MESH* open(const char *confbase, const char *name, const char* appname, dev_class_t devclass) { + void* mp = (void *)meshlink_open_with_size(confbase, name, appname, devclass, sizeof(MESH)); return new (mp) MESH; }