|
|
@@ -44,9 +44,10 @@ static struct DPControllerState {
|
|
|
std::set<struct bufferevent *> workers;
|
|
|
DTable table;
|
|
|
unsigned long long numdps;
|
|
|
+ unsigned int id;
|
|
|
|
|
|
DPControllerState() : controller_bev(NULL), current_problem(NULL),
|
|
|
- listener(NULL) {}
|
|
|
+ listener(NULL), id(0) {}
|
|
|
} dpctrlstate;
|
|
|
|
|
|
#ifdef LOG_MEM
|
|
|
@@ -215,6 +216,7 @@ struct evconnlistener *dpnode_create(struct event_base *evbase,
|
|
|
|
|
|
typedef enum {
|
|
|
DPCCSTATE_AWAITCMD,
|
|
|
+ DPCCSTATE_RDID,
|
|
|
DPCCSTATE_RDPROBLEM,
|
|
|
DPCCSTATE_END
|
|
|
} DPCCState;
|
|
|
@@ -304,6 +306,9 @@ static void controllerconn_reader(struct bufferevent *bev, void *ctx)
|
|
|
cerr << "Received command " << cmd[0] << "\n";
|
|
|
#endif
|
|
|
switch(cmd[0]) {
|
|
|
+ case 'I':
|
|
|
+ info->state = DPCCSTATE_RDID;
|
|
|
+ break;
|
|
|
case 'P':
|
|
|
info->state = DPCCSTATE_RDPROBLEM;
|
|
|
break;
|
|
|
@@ -319,6 +324,14 @@ static void controllerconn_reader(struct bufferevent *bev, void *ctx)
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
+ case DPCCSTATE_RDID:
|
|
|
+ if (len < sizeof(unsigned int)) return;
|
|
|
+ unsigned int dpnode_id;
|
|
|
+ bufferevent_read(bev, &dpnode_id, sizeof(unsigned int));
|
|
|
+ dpctrlstate.id = dpnode_id;
|
|
|
+ info->state = DPCCSTATE_AWAITCMD;
|
|
|
+ break;
|
|
|
+
|
|
|
case DPCCSTATE_RDPROBLEM:
|
|
|
if (len < SUBPROBLEM_DESC_LEN) return;
|
|
|
bufferevent_read(bev, subproblem, SUBPROBLEM_DESC_LEN);
|