bbslsrv.h

Go to the documentation of this file.
00001 #ifndef bbslsrv_h
00002 #define bbslsrv_h
00003 
00004 #include <InterViews/resource.h>
00005 
00006 class MessageList;
00007 class WorkList;
00008 class ReadyList;
00009 class ResultList;
00010 
00011 class MessageItem {
00012 public:
00013    MessageItem();
00014    virtual ~MessageItem();
00015    MessageItem* next_;
00016    int type_;
00017    size_t size_; // for pickle type
00018    union {
00019       int i;
00020       double d;
00021       double* pd;
00022       char* s;
00023    }u;
00024 };
00025 
00026 class MessageValue : public Resource {
00027 public:
00028    MessageValue();
00029    virtual ~MessageValue();
00030    void init_unpack();
00031    // following return 0 if success, -1 if failure
00032    int upkint(int*);
00033    int upkdouble(double*);
00034    int upkvec(int, double*);
00035    int upkstr(char*);
00036    int upkpickle(char*, size_t*);
00037 
00038    int pkint(int);
00039    int pkdouble(double);
00040    int pkvec(int, double*);
00041    int pkstr(const char*);
00042    int pkpickle(const char*, size_t);
00043 private:
00044    MessageItem* link();
00045 private:
00046    int type_;
00047    MessageItem* first_;
00048    MessageItem* last_;
00049    MessageItem* unpack_;
00050 };
00051 
00052 class BBSLocalServer {
00053 public:
00054    BBSLocalServer();
00055    virtual ~BBSLocalServer();
00056 
00057    void post(const char* key, MessageValue*);
00058    boolean look(const char* key, MessageValue**);
00059    boolean look_take(const char* key, MessageValue**);
00060 
00061    void post_todo(int parentid, MessageValue*);
00062    void post_result(int id, MessageValue*);
00063    int look_take_todo(MessageValue**);
00064    int look_take_result(int pid, MessageValue**);
00065 private:
00066    MessageList* messages_;
00067    WorkList* work_;
00068    ReadyList* todo_;
00069    ResultList* results_;
00070    int next_id_;
00071 };
00072 
00073 #endif
Generated on Mon Jun 13 08:10:28 2011 for NEURON by  doxygen 1.6.3