MCPcopy Create free account
hub / github.com/digego/extempore / SchemeProcess

Method SchemeProcess

src/SchemeProcess.cpp:90–146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88
89
90 SchemeProcess::SchemeProcess(std::string _load_path, std::string _name, int _server_port, bool _banner, std::string _init_expr) :
91 libs_loaded(false),
92 load_path(_load_path),
93 name(_name),
94 threadScheme(), //(&impromptu_task_executer, this),
95 threadServer(), //(&impromptu_server_thread, this),
96#ifdef EXT_BOOST
97 threadBoost(),
98#endif
99 guard("scheme_server_guard"), //"Scheme Guard"),
100 running(true),
101 server_port(_server_port),
102 with_banner(_banner),
103 init_expr(_init_expr)
104 {
105 if(load_path[load_path.length()-1] != '/') load_path.append("/");
106 sc = scheme_init_new();
107 default_zone = llvm_zone_create(50*1024*1024); // allocate default zone of 50M
108 memcpy(sc->name,_name.c_str(),_name.length()+1);
109 max_duration = sc->call_default_time;
110 //scheme_set_output_port_file(sc, stdout);
111 memset(scheme_outport_string,0,SCHEME_OUTPORT_STRING_LENGTH);
112 scheme_set_output_port_string(sc,scheme_outport_string,&scheme_outport_string[SCHEME_OUTPORT_STRING_LENGTH-1]);
113 FILE *initscm = fopen(std::string(load_path).append("init.xtm").c_str(),"r");
114 if(!initscm) {
115 std::cout << "ERROR: Could not locate file: init.xtm" << std::endl << "Exiting system!!" << std::endl;
116 exit(1);
117 }else{
118 //std::cout << "START LOADING INIT.XTM" << std::endl;
119 scheme_load_file(sc, initscm);
120 //std::cout << "FINISHED LOADING INIT.XTM" << std::endl;
121 }
122#ifdef EXT_BOOST
123 io_service = new boost::asio::io_service();
124 server_socket = new boost::asio::ip::tcp::acceptor(*io_service); //,boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),server_port),true);
125#else
126 server_socket = socket(AF_INET, SOCK_STREAM, 0);
127 if(server_socket == -1) {
128 std::cout << "Error opening extempore socket" << std::endl;
129 return;
130 }
131 int flag = 1;
132 int result = setsockopt(server_socket, /* socket affected */
133 IPPROTO_TCP, /* set option at TCP level */
134 TCP_NODELAY, /* name of option */
135 (char *) &flag, /* the cast is historical cruft */
136 sizeof(int)); /* length of option value */
137 if (result < 0) {
138 }
139#endif
140 scheme_define(sc, sc->global_env, mk_symbol(sc, "*imp-envs*"), sc->NIL);
141 scheme_define(sc, sc->global_env, mk_symbol(sc, "*callback*"), mk_cptr(sc, mk_cb(this,SchemeProcess,schemeCallback)));
142 extempore_lang_cb = mk_cb(this,SchemeProcess,extemporeCallback);
143 SchemeFFI::I()->initSchemeFFI(sc);
144 //threadScheme.SetPriority(CAPThread::kMaxThreadPriority); //kMaxThreadPriority || kDefaultThreadPriority
145 //threadServer.SetPriority(CAPThread::kMaxThreadPriority); //kMaxThreadPriority || kDefaultThreadPriority
146 }
147

Callers

nothing calls this directly

Calls 8

scheme_init_newFunction · 0.85
llvm_zone_createFunction · 0.85
scheme_load_fileFunction · 0.85
scheme_defineFunction · 0.85
mk_symbolFunction · 0.85
mk_cptrFunction · 0.85
initSchemeFFIMethod · 0.80

Tested by

no test coverage detected