| 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 |
nothing calls this directly
no test coverage detected