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_;
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
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