<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <!-- $Id: header.html 8799 2010-06-28 04:12:42Z jpgr87 $ --> <HEAD> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=utf-8"> <meta name="keywords" content="stage, robot, simulation, player, player/stage"> <link href="doxygen.css" rel="stylesheet" type="text/css"> <style type="text/css"> .floatright { float: right; margin: 0 0 1em 1em; } body { font-family: sans-serif; #font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; background-color: #FFF; color:#000; } a:link { color: #A00; } a:visited { color: #800; } a { text-decoration: none; } a:hover { text-decoration: underline; } .timestamp { text-align:right; background-color: #DDD; font-size:75%;} h1 { font-size:160%; } h2 { font-size:110%; #color: #FFF; #background-color: #666; #padding:3px; } h3 { text-align:left; } img { border: 0; } ul.menu { position:relative; left:-2.5em; margin-bottom:0px; margin-top:0px; } ul.menu1 { position:relative; left:-2.1em; margin-bottom:0px; margin-top:0px; } li.menu { list-style-type: none; position:relative; #left:-0.5em; } #sidebar { position: absolute; left:0px; padding:2em; top:0em; width:12em;} #content { position: absolute; left:12em; top:0em; padding-left:3em; padding-right:3em; padding-bottom:2em; margin-top:1em; margin-right:2em; } div.box { background-color:#EEE; border: 1px solid #000; padding: 0.5ex 0.4em 0.5ex 0.6em; margin:1em; } div.title { font-weight:bold; background-color:#eee; margin-bottom:2px;} div.topbar { position: absolute; top:0px; left:9em; margin:1em; } </style> <TITLE>Player Manual</TITLE> </HEAD> <body> <div id="sidebar"> <h2 style="text-align:center;"> <a href="index.html"> <img width=140 src="http://playerstage.sourceforge.net/images/player_button_v3.png" alt="Player logo"><br></a> </h2> <div class="box"> <div class=title>Player</div> <ul class=menu> <li class=menu><a href="index.html">Frontpage</a> <li class=menu><a href="modules.html">Contents</a> </ul> </div> <div class="box"> <div class=title>User</div> <ul class=menu> <li class=menu><a href="install.html">Installation</a> <li class=menu><a href="start.html">Quick start</a> <li class=menu><a href="supported_hardware.html">Supported devices</a> <li class=menu><a href="group__tutorials.html">Tutorials</a> <li class=menu><a href="group__utils.html">Utilities</a> <li class=menu><a href="group__clientlibs.html">Client libraries</a> <li class=menu><a href="http://playerstage.sourceforge.net/wiki/Basic_FAQ">FAQ</a> <li class=menu><a href="help.html">Help</a> </ul> </div> <div class=box> <div class="title">Developer</div> <ul class=menu> <li class=menu><a href="architecture.html">Architecture</a> <li class=menu><a href="group__libplayercore.html">libplayercore</a> <ul class=menu1> <li class=menu><a href="group__interfaces.html">interfaces</a></li> </ul> <li class=menu><a href="group__libplayerdrivers.html">libplayerdrivers</a> <ul class=menu1> <li class=menu><a href="group__drivers.html">drivers</a></li> </ul> <li class=menu><a href="group__libplayercommon.html">libplayercommon</a> <li class=menu><a href="group__libplayerutils.html">libplayerutils</a> <li class=menu><a href="group__libplayersd.html">libplayersd</a> <li class=menu><a href="group__libplayertcp.html">libplayertcp</a> <li class=menu><a href="group__libplayerxdr.html">libplayerxdr</a> <li class=menu><a href="todo.html">TODO</a> </ul> </div> <div class=box> <!-- <a href="http://sourceforge.net"><img border=0 src="http://sourceforge.net/sflogo.php?group_id=42445&type=1"></a> --> <div class="title">Online</div> <a href="http://playerstage.sourceforge.net">Homepage</a><br> <a href="http://sourceforge.net/project/showfiles.php?group_id=42445">Download</a><br> <a href="http://sourceforge.net/projects/playerstage">Project</a><br> <a href="http://sourceforge.net/tracker/?group_id=42445">Bugs</a><br> <a href="http://sourceforge.net/mail/?group_id=42445">Help</a> </div> </div> <div id="content" > <!-- Generated by Doxygen 1.7.1 --> <div class="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | <a href="#typedef-members">Typedefs</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <h1>Client API<br/> <small> [<a class="el" href="group__player__clientlib__libplayerc.html">libplayerc</a>]</small> </h1> </div> </div> <div class="contents"> <p>The client object manages the connection with the Player server; it is responsible for reading new data, setting data transmission modes and so on. <a href="#_details">More...</a></p> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="nested-classes"></a> Classes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="structplayerc__device__info__t.html">playerc_device_info_t</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Info about an available (but not necessarily subscribed) device. <a href="structplayerc__device__info__t.html#_details">More...</a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct </td><td class="memItemRight" valign="bottom"><a class="el" href="struct__playerc__client__t.html">_playerc_client_t</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Client object data. <a href="struct__playerc__client__t.html#_details">More...</a><br/></td></tr> <tr><td colspan="2"><h2><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="struct__playerc__client__t.html">_playerc_client_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga8c6bd4fedda80f587e9aee4c3f11e61a">playerc_client_t</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Client object data. <a href="#ga8c6bd4fedda80f587e9aee4c3f11e61a"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="func-members"></a> Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT <a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga3f6ad85306c9faa2d799817b7e57aa9e">playerc_client_create</a> (<a class="el" href="structplayerc__mclient__t.html">playerc_mclient_t</a> *mclient, const char *host, int port)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Create a client object. <a href="#ga3f6ad85306c9faa2d799817b7e57aa9e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga1cae342cd44cc82e0fb95af32797898a">playerc_client_destroy</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Destroy a client object. <a href="#ga1cae342cd44cc82e0fb95af32797898a"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga9d9f8873b10b10ec2991674d32d05155">playerc_client_set_transport</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, unsigned int transport)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the transport type. <a href="#ga9d9f8873b10b10ec2991674d32d05155"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga5bf536922ccb55b895cd7f7d64df5453">playerc_client_connect</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Connect to the server. <a href="#ga5bf536922ccb55b895cd7f7d64df5453"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga6637deaff563ea0068d639a368ce5125">playerc_client_disconnect</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Disconnect from the server. <a href="#ga6637deaff563ea0068d639a368ce5125"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gafb407c155f850120f965f340b63f9320">playerc_client_disconnect_retry</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Disconnect from the server, with potential retry. <a href="#gafb407c155f850120f965f340b63f9320"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gabb027414e8ef9726ac04040e955a96c2">playerc_client_datamode</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, uint8_t mode)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Change the server's data delivery mode. <a href="#gabb027414e8ef9726ac04040e955a96c2"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gae15ccb3b14ce2e837cb50d1a2b4ca6ef">playerc_client_requestdata</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Request a round of data. <a href="#gae15ccb3b14ce2e837cb50d1a2b4ca6ef"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga614460854dbe3336e87388d0912fe96e">playerc_client_set_replace_rule</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, int interf, int index, int type, int subtype, int replace)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set a replace rule for the client queue on the server. <a href="#ga614460854dbe3336e87388d0912fe96e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga787ada446523d54564134303cd5c56c1">playerc_client_adddevice</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> *device)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Add a device proxy. <a href="#ga787ada446523d54564134303cd5c56c1"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gaafa3d9eef35b887ed0789d02fc622679">playerc_client_deldevice</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> *device)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Remove a device proxy. <a href="#gaafa3d9eef35b887ed0789d02fc622679"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga437742c8803f5f2d967f82d3fd1dd00e">playerc_client_addcallback</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> *device, <a class="el" href="group__playerc__client.html#gad7e70480b0d4c9f57dbe980a6a4293eb">playerc_callback_fn_t</a> callback, void *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Add user callbacks (called when new data arrives). <a href="#ga437742c8803f5f2d967f82d3fd1dd00e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gaaba403a58acd73991bf1296a8127fb83">playerc_client_delcallback</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> *device, <a class="el" href="group__playerc__client.html#gad7e70480b0d4c9f57dbe980a6a4293eb">playerc_callback_fn_t</a> callback, void *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Remove user callbacks (called when new data arrives). <a href="#gaaba403a58acd73991bf1296a8127fb83"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga7e24e5c9127d84d127c6464bfa5e15d0">playerc_client_get_devlist</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the list of available device ids. <a href="#ga7e24e5c9127d84d127c6464bfa5e15d0"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga56b20c0d5aeb34f9174bcd05ffe635da">playerc_client_subscribe</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, int code, int index, int access, char *drivername, size_t len)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Subscribe a device. <a href="#ga56b20c0d5aeb34f9174bcd05ffe635da"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gab6901e9b9b3d48f558505e96375e7a8d">playerc_client_unsubscribe</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, int code, int index)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Unsubscribe a device. <a href="#gab6901e9b9b3d48f558505e96375e7a8d"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga1aa2ff621c82c99834ef9e1053d52943">playerc_client_request</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> *device, uint8_t reqtype, const void *req_data, void **rep_data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Issue a request to the server and await a reply (blocking). <a href="#ga1aa2ff621c82c99834ef9e1053d52943"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga2647e1178b9de53db1f1578ff6bbf048">playerc_client_peek</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, int timeout)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Wait for response from server (blocking). <a href="#ga2647e1178b9de53db1f1578ff6bbf048"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gad6a4b3d0252d02fc04a25d7a00a083b4">playerc_client_internal_peek</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, int timeout)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Test to see if there is pending data. <a href="#gad6a4b3d0252d02fc04a25d7a00a083b4"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT void * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga4dde3a1fa0fb0288cbf39fce32ecb960">playerc_client_read</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Read data from the server (blocking). <a href="#ga4dde3a1fa0fb0288cbf39fce32ecb960"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gab2e422b4ce36d9bdbf27929100279210">playerc_client_read_nonblock</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Read and process a packet (nonblocking). <a href="#gab2e422b4ce36d9bdbf27929100279210"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gaa0d736d863f3def74f4764eaba62f6ab">playerc_client_read_nonblock_withproxy</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, void **proxy)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Read and process a packet (nonblocking), fills in pointer to proxy that got data. <a href="#gaa0d736d863f3def74f4764eaba62f6ab"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gaddf1663a4370b15be7941aa87ddfe16c">playerc_client_set_request_timeout</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, uint32_t seconds)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the timeout for client requests. <a href="#gaddf1663a4370b15be7941aa87ddfe16c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga3025a79ece2a7c6608eab9de3f08c195">playerc_client_set_retry_limit</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, int limit)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the connection retry limit. <a href="#ga3025a79ece2a7c6608eab9de3f08c195"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gaebdce291cd7c283d6f48943c265ec320">playerc_client_set_retry_time</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, double time)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the connection retry sleep time. <a href="#gaebdce291cd7c283d6f48943c265ec320"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">PLAYERC_EXPORT int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#ga9b7345ee85e793c9c011bf9b90254025">playerc_client_write</a> (<a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> *client, struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> *device, uint8_t subtype, void *cmd, double *timestamp)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Write data to the server. <a href="#ga9b7345ee85e793c9c011bf9b90254025"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="var-members"></a> Variables</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad98282e0bb4b776229284c0342c6f348"></a><!-- doxytag: member="playerc_client::playerc_putmsg_fn_t" ref="gad98282e0bb4b776229284c0342c6f348" args=")(void *device, char *header, char *data)" --> PLAYERC_EXPORT typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gad98282e0bb4b776229284c0342c6f348">playerc_putmsg_fn_t</a> )(void *device, char *header, char *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Typedef for proxy callback function. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad7e70480b0d4c9f57dbe980a6a4293eb"></a><!-- doxytag: member="playerc_client::playerc_callback_fn_t" ref="gad7e70480b0d4c9f57dbe980a6a4293eb" args=")(void *data)" --> PLAYERC_EXPORT typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__playerc__client.html#gad7e70480b0d4c9f57dbe980a6a4293eb">playerc_callback_fn_t</a> )(void *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Typedef for proxy callback function. <br/></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>The client object manages the connection with the Player server; it is responsible for reading new data, setting data transmission modes and so on. </p> <p>The client object must be created and connected before device proxies are initialized. </p> <hr/><h2>Typedef Documentation</h2> <a class="anchor" id="ga8c6bd4fedda80f587e9aee4c3f11e61a"></a><!-- doxytag: member="playerc.h::playerc_client_t" ref="ga8c6bd4fedda80f587e9aee4c3f11e61a" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct <a class="el" href="struct__playerc__client__t.html">_playerc_client_t</a> <a class="el" href="struct__playerc__client__t.html">playerc_client_t</a></td> </tr> </table> </div> <div class="memdoc"> <p>Client object data. </p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="ga437742c8803f5f2d967f82d3fd1dd00e"></a><!-- doxytag: member="playerc.h::playerc_client_addcallback" ref="ga437742c8803f5f2d967f82d3fd1dd00e" args="(playerc_client_t *client, struct _playerc_device_t *device, playerc_callback_fn_t callback, void *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_addcallback </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> * </td> <td class="paramname"> <em>device</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__playerc__client.html#gad7e70480b0d4c9f57dbe980a6a4293eb">playerc_callback_fn_t</a> </td> <td class="paramname"> <em>callback</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Add user callbacks (called when new data arrives). </p> <p><b>For internal use only.</b></p> </div> </div> <a class="anchor" id="ga787ada446523d54564134303cd5c56c1"></a><!-- doxytag: member="playerc.h::playerc_client_adddevice" ref="ga787ada446523d54564134303cd5c56c1" args="(playerc_client_t *client, struct _playerc_device_t *device)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_adddevice </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> * </td> <td class="paramname"> <em>device</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Add a device proxy. </p> <p><b>For internal use only.</b></p> </div> </div> <a class="anchor" id="ga5bf536922ccb55b895cd7f7d64df5453"></a><!-- doxytag: member="playerc.h::playerc_client_connect" ref="ga5bf536922ccb55b895cd7f7d64df5453" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_connect </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Connect to the server. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns 0 on success, non-zero otherwise. Use <a class="el" href="group__playerc__utility.html#gabc6f998b5f95a7368a3e7577e8e91dc6" title="Retrieve the last error (as a descriptive string).">playerc_error_str()</a> to get a descriptive error message. </dd></dl> </div> </div> <a class="anchor" id="ga3f6ad85306c9faa2d799817b7e57aa9e"></a><!-- doxytag: member="playerc.h::playerc_client_create" ref="ga3f6ad85306c9faa2d799817b7e57aa9e" args="(playerc_mclient_t *mclient, const char *host, int port)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT <a class="el" href="struct__playerc__client__t.html">playerc_client_t</a>* playerc_client_create </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayerc__mclient__t.html">playerc_mclient_t</a> * </td> <td class="paramname"> <em>mclient</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>host</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>port</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Create a client object. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>mclient</em> </td><td>Multiclient object; set this NULL if this is a stand-alone client.</td></tr> <tr><td valign="top"></td><td valign="top"><em>host</em> </td><td>Player server host name (i.e., name of the machine with the Player server).</td></tr> <tr><td valign="top"></td><td valign="top"><em>port</em> </td><td>Player server port (typically 6665, but depends on the server configuration).</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns a newly allocated pointer to the client object; use <a class="el" href="group__playerc__client.html#ga1cae342cd44cc82e0fb95af32797898a" title="Destroy a client object.">playerc_client_destroy()</a> to delete the object. </dd></dl> </div> </div> <a class="anchor" id="gabb027414e8ef9726ac04040e955a96c2"></a><!-- doxytag: member="playerc.h::playerc_client_datamode" ref="gabb027414e8ef9726ac04040e955a96c2" args="(playerc_client_t *client, uint8_t mode)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_datamode </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t </td> <td class="paramname"> <em>mode</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Change the server's data delivery mode. </p> <p>Be sure to <a class="el" href="group__libplayerc__datamodes.html">read about data modes</a> before using this function.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> <tr><td valign="top"></td><td valign="top"><em>mode</em> </td><td>Data delivery mode; must be one of PLAYERC_DATAMODE_PUSH, PLAYERC_DATAMODE_PULL; the defalt mode is PLAYERC_DATAMODE_PUSH.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns 0 on success, non-zero otherwise. Use <a class="el" href="group__playerc__utility.html#gabc6f998b5f95a7368a3e7577e8e91dc6" title="Retrieve the last error (as a descriptive string).">playerc_error_str()</a> to get a descriptive error message. </dd></dl> </div> </div> <a class="anchor" id="gaaba403a58acd73991bf1296a8127fb83"></a><!-- doxytag: member="playerc.h::playerc_client_delcallback" ref="gaaba403a58acd73991bf1296a8127fb83" args="(playerc_client_t *client, struct _playerc_device_t *device, playerc_callback_fn_t callback, void *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_delcallback </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> * </td> <td class="paramname"> <em>device</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__playerc__client.html#gad7e70480b0d4c9f57dbe980a6a4293eb">playerc_callback_fn_t</a> </td> <td class="paramname"> <em>callback</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Remove user callbacks (called when new data arrives). </p> <p><b>For internal use only.</b></p> </div> </div> <a class="anchor" id="gaafa3d9eef35b887ed0789d02fc622679"></a><!-- doxytag: member="playerc.h::playerc_client_deldevice" ref="gaafa3d9eef35b887ed0789d02fc622679" args="(playerc_client_t *client, struct _playerc_device_t *device)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_deldevice </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> * </td> <td class="paramname"> <em>device</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Remove a device proxy. </p> <p><b>For internal use only.</b></p> </div> </div> <a class="anchor" id="ga1cae342cd44cc82e0fb95af32797898a"></a><!-- doxytag: member="playerc.h::playerc_client_destroy" ref="ga1cae342cd44cc82e0fb95af32797898a" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT void playerc_client_destroy </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Destroy a client object. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga6637deaff563ea0068d639a368ce5125"></a><!-- doxytag: member="playerc.h::playerc_client_disconnect" ref="ga6637deaff563ea0068d639a368ce5125" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_disconnect </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Disconnect from the server. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns 0 on success, non-zero otherwise. Use <a class="el" href="group__playerc__utility.html#gabc6f998b5f95a7368a3e7577e8e91dc6" title="Retrieve the last error (as a descriptive string).">playerc_error_str()</a> to get a descriptive error message. </dd></dl> </div> </div> <a class="anchor" id="gafb407c155f850120f965f340b63f9320"></a><!-- doxytag: member="playerc.h::playerc_client_disconnect_retry" ref="gafb407c155f850120f965f340b63f9320" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_disconnect_retry </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Disconnect from the server, with potential retry. </p> <p><b>For internal use only.</b></p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns 0 on success, non-zero otherwise. </dd></dl> </div> </div> <a class="anchor" id="ga7e24e5c9127d84d127c6464bfa5e15d0"></a><!-- doxytag: member="playerc.h::playerc_client_get_devlist" ref="ga7e24e5c9127d84d127c6464bfa5e15d0" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_get_devlist </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Get the list of available device ids. </p> <p>This function queries the server for the list of available devices, and write result to the devinfos list in the client object.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns 0 on success, non-zero otherwise. Use <a class="el" href="group__playerc__utility.html#gabc6f998b5f95a7368a3e7577e8e91dc6" title="Retrieve the last error (as a descriptive string).">playerc_error_str()</a> to get a descriptive error message. </dd></dl> </div> </div> <a class="anchor" id="gad6a4b3d0252d02fc04a25d7a00a083b4"></a><!-- doxytag: member="playerc.h::playerc_client_internal_peek" ref="gad6a4b3d0252d02fc04a25d7a00a083b4" args="(playerc_client_t *client, int timeout)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_internal_peek </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>timeout</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Test to see if there is pending data. </p> <p>Don't send a request for data. This function is reliant on a call being made elsewhere to request data from the server.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> <tr><td valign="top"></td><td valign="top"><em>timeout</em> </td><td>Timeout value (ms). Set timeout to 0 to check for currently queued data.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns -1 on error, 0 or 1 otherwise. </dd></dl> </div> </div> <a class="anchor" id="ga2647e1178b9de53db1f1578ff6bbf048"></a><!-- doxytag: member="playerc.h::playerc_client_peek" ref="ga2647e1178b9de53db1f1578ff6bbf048" args="(playerc_client_t *client, int timeout)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_peek </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>timeout</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Wait for response from server (blocking). </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object. </td></tr> <tr><td valign="top"></td><td valign="top"><em>device</em> </td><td></td></tr> <tr><td valign="top"></td><td valign="top"><em>index</em> </td><td></td></tr> <tr><td valign="top"></td><td valign="top"><em>sequence</em> </td><td></td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Will return data size for ack, -1 for nack and -2 for failureTest to see if there is pending data. Send a data request if one has not been sent already. A data request is necessary to provoke a response from the server.</dd></dl> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> <tr><td valign="top"></td><td valign="top"><em>timeout</em> </td><td>Timeout value (ms). Set timeout to 0 to check for currently queued data.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns -1 on error, 0 or 1 otherwise. </dd></dl> </div> </div> <a class="anchor" id="ga4dde3a1fa0fb0288cbf39fce32ecb960"></a><!-- doxytag: member="playerc.h::playerc_client_read" ref="ga4dde3a1fa0fb0288cbf39fce32ecb960" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT void* playerc_client_read </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Read data from the server (blocking). </p> <p>In PUSH mode this will read and process a single message. In PULL mode this will process a full batch of messages up to the sync from the server.</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>PUSH mode: For data packets, will return the ID of the proxy that got the data; for synch packets, will return the ID of the client itself; on error, will return NULL. PULL mode: Will return NULL on error, the ID of the client on success. Will never return the ID of a proxy other than the client. </dd></dl> </div> </div> <a class="anchor" id="gab2e422b4ce36d9bdbf27929100279210"></a><!-- doxytag: member="playerc.h::playerc_client_read_nonblock" ref="gab2e422b4ce36d9bdbf27929100279210" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_read_nonblock </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Read and process a packet (nonblocking). </p> <dl class="return"><dt><b>Returns:</b></dt><dd>0 if no data recieved, 1 if data recieved and -1 on error </dd></dl> </div> </div> <a class="anchor" id="gaa0d736d863f3def74f4764eaba62f6ab"></a><!-- doxytag: member="playerc.h::playerc_client_read_nonblock_withproxy" ref="gaa0d736d863f3def74f4764eaba62f6ab" args="(playerc_client_t *client, void **proxy)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_read_nonblock_withproxy </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void ** </td> <td class="paramname"> <em>proxy</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Read and process a packet (nonblocking), fills in pointer to proxy that got data. </p> <dl class="return"><dt><b>Returns:</b></dt><dd>0 if no data recieved, 1 if data recieved and -1 on error </dd></dl> </div> </div> <a class="anchor" id="ga1aa2ff621c82c99834ef9e1053d52943"></a><!-- doxytag: member="playerc.h::playerc_client_request" ref="ga1aa2ff621c82c99834ef9e1053d52943" args="(playerc_client_t *client, struct _playerc_device_t *device, uint8_t reqtype, const void *req_data, void **rep_data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_request </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> * </td> <td class="paramname"> <em>device</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t </td> <td class="paramname"> <em>reqtype</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const void * </td> <td class="paramname"> <em>req_data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void ** </td> <td class="paramname"> <em>rep_data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Issue a request to the server and await a reply (blocking). </p> <p><b>For internal use only.</b></p> <p>The rep_data pointer is filled with a pointer to the response data received. It is the callers responisbility to free this memory with the approriate player _free method.</p> <p>If an error is returned then no data will have been stored in rep_data.</p> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns -1 on error and -2 on NACK. </dd></dl> </div> </div> <a class="anchor" id="gae15ccb3b14ce2e837cb50d1a2b4ca6ef"></a><!-- doxytag: member="playerc.h::playerc_client_requestdata" ref="gae15ccb3b14ce2e837cb50d1a2b4ca6ef" args="(playerc_client_t *client)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_requestdata </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Request a round of data. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> </table> </dd> </dl> <p>Request a round of data; only valid when in a request/reply (aka PULL) data delivery mode. But you don't need to call this function, because <a class="el" href="group__playerc__client.html#ga4dde3a1fa0fb0288cbf39fce32ecb960">playerc_client_read</a> will do it for you if the client is in a PULL mode.</p> <p>Use <a class="el" href="group__playerc__client.html#gabb027414e8ef9726ac04040e955a96c2">playerc_client_datamode</a> to change modes. </p> </div> </div> <a class="anchor" id="ga614460854dbe3336e87388d0912fe96e"></a><!-- doxytag: member="playerc.h::playerc_client_set_replace_rule" ref="ga614460854dbe3336e87388d0912fe96e" args="(playerc_client_t *client, int interf, int index, int type, int subtype, int replace)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_set_replace_rule </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>interf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>index</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>type</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>subtype</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>replace</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set a replace rule for the client queue on the server. </p> <p>If a rule with the same pattern already exists, it will be replaced with the new rule (i.e., its setting to replace will be updated).</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object.</td></tr> <tr><td valign="top"></td><td valign="top"><em>interf</em> </td><td>Interface to set replace rule for (-1 for wildcard)</td></tr> <tr><td valign="top"></td><td valign="top"><em>index</em> </td><td>Index to set replace rule for (-1 for wildcard)</td></tr> <tr><td valign="top"></td><td valign="top"><em>type</em> </td><td>Type to set replace rule for (-1 for wildcard), i.e. PLAYER_MSGTYPE_DATA</td></tr> <tr><td valign="top"></td><td valign="top"><em>subtype</em> </td><td><a class="el" href="classMessage.html" title="Reference-counted message objects.">Message</a> subtype to set replace rule for (-1 for wildcard)</td></tr> <tr><td valign="top"></td><td valign="top"><em>replace</em> </td><td>Should we replace these messages</td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>Returns 0 on success, non-zero otherwise. Use <a class="el" href="group__playerc__utility.html#gabc6f998b5f95a7368a3e7577e8e91dc6" title="Retrieve the last error (as a descriptive string).">playerc_error_str()</a> to get a descriptive error message. </dd></dl> </div> </div> <a class="anchor" id="gaddf1663a4370b15be7941aa87ddfe16c"></a><!-- doxytag: member="playerc.h::playerc_client_set_request_timeout" ref="gaddf1663a4370b15be7941aa87ddfe16c" args="(playerc_client_t *client, uint32_t seconds)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT void playerc_client_set_request_timeout </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>seconds</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set the timeout for client requests. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to client object. </td></tr> <tr><td valign="top"></td><td valign="top"><em>seconds</em> </td><td>Seconds to wait for a reply. </td></tr> </table> </dd> </dl> <p>Referenced by <a class="el" href="classPlayerCc_1_1PlayerClient.html#ab1a28cc46355fc9c56813373a1c2bf89">PlayerCc::PlayerClient::SetRequestTimeout()</a>.</p> </div> </div> <a class="anchor" id="ga3025a79ece2a7c6608eab9de3f08c195"></a><!-- doxytag: member="playerc.h::playerc_client_set_retry_limit" ref="ga3025a79ece2a7c6608eab9de3f08c195" args="(playerc_client_t *client, int limit)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT void playerc_client_set_retry_limit </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>limit</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set the connection retry limit. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to the client object </td></tr> <tr><td valign="top"></td><td valign="top"><em>limit</em> </td><td>The number of times to attempt to reconnect to the server. Give -1 for infinite retry. </td></tr> </table> </dd> </dl> <p>Referenced by <a class="el" href="classPlayerCc_1_1PlayerClient.html#ad355a259243d1ad7596366a0313244b0">PlayerCc::PlayerClient::SetRetryLimit()</a>.</p> </div> </div> <a class="anchor" id="gaebdce291cd7c283d6f48943c265ec320"></a><!-- doxytag: member="playerc.h::playerc_client_set_retry_time" ref="gaebdce291cd7c283d6f48943c265ec320" args="(playerc_client_t *client, double time)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT void playerc_client_set_retry_time </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double </td> <td class="paramname"> <em>time</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set the connection retry sleep time. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>client</em> </td><td>Pointer to the client object </td></tr> <tr><td valign="top"></td><td valign="top"><em>time</em> </td><td>The amount of time, in seconds, to sleep between reconnection attempts. </td></tr> </table> </dd> </dl> <p>Referenced by <a class="el" href="classPlayerCc_1_1PlayerClient.html#afa5bddb9335bd4445170b30c0f7d2b54">PlayerCc::PlayerClient::SetRetryTime()</a>.</p> </div> </div> <a class="anchor" id="ga9d9f8873b10b10ec2991674d32d05155"></a><!-- doxytag: member="playerc.h::playerc_client_set_transport" ref="ga9d9f8873b10b10ec2991674d32d05155" args="(playerc_client_t *client, unsigned int transport)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT void playerc_client_set_transport </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned int </td> <td class="paramname"> <em>transport</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Set the transport type. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>transport</em> </td><td>Either PLAYERC_TRANSPORT_UDP or PLAYERC_TRANSPORT_TCP </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="ga56b20c0d5aeb34f9174bcd05ffe635da"></a><!-- doxytag: member="playerc.h::playerc_client_subscribe" ref="ga56b20c0d5aeb34f9174bcd05ffe635da" args="(playerc_client_t *client, int code, int index, int access, char *drivername, size_t len)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_subscribe </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>code</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>index</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>access</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">char * </td> <td class="paramname"> <em>drivername</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>len</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Subscribe a device. </p> <p><b>For internal use only.</b></p> </div> </div> <a class="anchor" id="gab6901e9b9b3d48f558505e96375e7a8d"></a><!-- doxytag: member="playerc.h::playerc_client_unsubscribe" ref="gab6901e9b9b3d48f558505e96375e7a8d" args="(playerc_client_t *client, int code, int index)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_unsubscribe </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>code</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>index</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Unsubscribe a device. </p> <p><b>For internal use only.</b></p> </div> </div> <a class="anchor" id="ga9b7345ee85e793c9c011bf9b90254025"></a><!-- doxytag: member="playerc.h::playerc_client_write" ref="ga9b7345ee85e793c9c011bf9b90254025" args="(playerc_client_t *client, struct _playerc_device_t *device, uint8_t subtype, void *cmd, double *timestamp)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">PLAYERC_EXPORT int playerc_client_write </td> <td>(</td> <td class="paramtype"><a class="el" href="struct__playerc__client__t.html">playerc_client_t</a> * </td> <td class="paramname"> <em>client</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct <a class="el" href="struct__playerc__device__t.html">_playerc_device_t</a> * </td> <td class="paramname"> <em>device</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint8_t </td> <td class="paramname"> <em>subtype</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>cmd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double * </td> <td class="paramname"> <em>timestamp</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Write data to the server. </p> <p><b>For internal use only.</b></p> </div> </div> </div> <!-- render the modification time of the source file --> <div class="timestamp"> <hr> <table style="width:100%;"> <tr> <td style="text-align:left;"> Last updated 12 September 2005 21:38:45 <!-- <td style="text-align:right;"> <a href="http://validator.w3.org/check/referer"><img style="vertical-align:middle;border:0;width:88px;height:31px" src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="http://jigsaw.w3.org/css-validator/"> <img style="vertical-align:middle;border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"> </a> --> </tr> </table> </div> </tr> </table> </BODY> </HTML>