Added Multiple Channels and Event support to RPC system.

* added chan_id parameter to many RPC calls, this allows RPC to support multiple SSH clients.
     - the combination of (chan_id, req_id) rather than req_id, should be unique now  
     		-> TODO inside rpcserver queued requests.
 * Modified SSH server to match the new API. Multiple client support has not been added here yet.
 * Modified Menu System to match these changes too.
 * Added an Registration Framework to RpcQueueService, to enable easy event support.
 
This code has not been throughly tested yet.



git-svn-id: http://svn.code.sf.net/p/retroshare/code/branches/v0.5-gxs-b1@5500 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
drbob 2012-09-01 19:35:23 +00:00
parent 46c945de96
commit 9c2f7f39e7
17 changed files with 435 additions and 117 deletions

View file

@ -25,6 +25,7 @@
#ifndef RS_RPC_SYSTEM_H
#define RS_RPC_SYSTEM_H
#include <list>
#include <string>
#include <inttypes.h>
@ -32,18 +33,20 @@ class RpcComms
{
public:
virtual int isOkay() = 0;
virtual int error(std::string msg) = 0;
virtual int error(uint32_t chan_id, std::string msg) = 0;
virtual int recv_ready() = 0;
virtual int recv(uint8_t *buffer, int bytes) = 0;
virtual int recv(std::string &buffer, int bytes) = 0;
virtual int active_channels(std::list<uint32_t> &chan_ids) = 0;
virtual int recv_ready(uint32_t chan_id) = 0;
virtual int recv(uint32_t chan_id, uint8_t *buffer, int bytes) = 0;
virtual int recv(uint32_t chan_id, std::string &buffer, int bytes) = 0;
// these make it easier...
virtual int recv_blocking(uint8_t *buffer, int bytes) = 0;
virtual int recv_blocking(std::string &buffer, int bytes) = 0;
virtual int recv_blocking(uint32_t chan_id, uint8_t *buffer, int bytes) = 0;
virtual int recv_blocking(uint32_t chan_id, std::string &buffer, int bytes) = 0;
virtual int send(uint8_t *buffer, int bytes) = 0;
virtual int send(const std::string &buffer) = 0;
virtual int send(uint32_t chan_id, uint8_t *buffer, int bytes) = 0;
virtual int send(uint32_t chan_id, const std::string &buffer) = 0;
virtual int setSleepPeriods(float /* busy */, float /* idle */) { return 0; }
};
@ -53,7 +56,7 @@ class RpcSystem
{
public:
/* this must be regularly ticked to update the display */
virtual void reset() = 0;
virtual void reset(uint32_t chan_id) = 0;
virtual int tick() = 0;
};