int main(int argc, char **argv) { config.daemonize = 0; config.logserver = "minard"; config.dataserver = "192.168.80.100";//"192.168.80.1"; config.logfile = ""; config.loglevel = NOTICE; parseOptions(argc, argv); strcpy(logfile, config.logfile); verbosity = config.loglevel; if (config.daemonize) daemonize(); signal(SIGPIPE, SIG_IGN); signal(SIGINT, sigint_handler); Log(NOTICE, "tubii server started"); el = aeCreateEventLoop(100); if ((aeCreateTimeEvent(el, 0, printSkipped, NULL, NULL)) == AE_ERR) { LogRaw(WARNING, "failed to set up printSkipped()"); } startLogServer(config.logserver, "tubii"); initServer(el, 4001, commandTable, sizeof(commandTable)/sizeof(struct command)); /* set up the dispatch_connect event which will try to connect to the * data stream server. If it can't connect, it will retry every 10 * seconds. */ if (data_connect(config.dataserver)) { Log(WARNING, "failed to set up data stream"); return 1; } auto_init(); /* start tubii readout */ if (start_tubii_readout(1000)) { //Log(WARNING, tubii_err); return 1; } /* set up status event */ if (aeCreateTimeEvent(el, 0, tubii_status, NULL, NULL) == AE_ERR) { Log(WARNING, "failed to set up status tubii"); return 1; } /* enter the main event loop */ el->stop = 0; while (!el->stop) { if (el->beforesleep != NULL) el->beforesleep(el); aeProcessEvents(el, AE_ALL_EVENTS); } Log(NOTICE, "ctrl-c caught. flushing buffers..."); time_t now = time(NULL); while (time(NULL) < now + 1) { if (aeProcessEvents(el, AE_FILE_EVENTS | AE_DONT_WAIT) == 0) break; } aeDeleteEventLoop(el); return 0; }
void VisualScript::_set_data(const Dictionary& p_data) { Dictionary d = p_data; if (d.has("base_type")) base_type=d["base_type"]; variables.clear(); Array vars=d["variables"]; for (int i=0;i<vars.size();i++) { Dictionary v=vars[i]; add_variable(v["name"],v["default_value"]); _set_variable_info(v["name"],v); } custom_signals.clear(); Array sigs=d["signals"]; for (int i=0;i<sigs.size();i++) { Dictionary cs=sigs[i]; add_custom_signal(cs["name"]); Array args=cs["arguments"]; for(int j=0;j<args.size();j+=2) { custom_signal_add_argument(cs["name"],Variant::Type(int(args[j+1])),args[j]); } } Array funcs=d["functions"]; functions.clear(); for (int i=0;i<funcs.size();i++) { Dictionary func=funcs[i]; StringName name=func["name"]; //int id=func["function_id"]; add_function(name); Array nodes = func["nodes"]; for(int i=0;i<nodes.size();i+=3) { add_node(name,nodes[i],nodes[i+2],nodes[i+1]); } Array sequence_connections=func["sequence_connections"]; for (int j=0;j<sequence_connections.size();j+=3) { sequence_connect(name,sequence_connections[j+0],sequence_connections[j+1],sequence_connections[j+2]); } Array data_connections=func["data_connections"]; for (int j=0;j<data_connections.size();j+=4) { data_connect(name,data_connections[j+0],data_connections[j+1],data_connections[j+2],data_connections[j+3]); } } }