Esempio n. 1
0
int luaopen_sax(lua_State* lua)
{
#ifdef LUA_SANDBOX
  lua_newtable(lua);
  lsb_add_serialize_function(lua, serialize_sax);
  lsb_add_output_function(lua, output_sax);
  lua_replace(lua, LUA_ENVIRONINDEX);
#endif // LUA_SANDBOX

  /* We're registering sax_equal separately since it's the only way to make lua
   * aware that it's exactly the same function each time
   * (otherwise it doesn't get called on different object types) */
  lua_pushcfunction(lua, sax_equal);

  reg_class(lua, mozsvc_sax_window, saxlib_win);
  reg_class(lua, mozsvc_sax_word, saxlib_word);

  lua_newtable(lua);
  luaL_register(lua, NULL, saxlib_f);
  reg_module(lua, mozsvc_sax_word_suffix, sax_new_word);
  reg_module(lua, mozsvc_sax_win_suffix, sax_new_window);
  lua_pushvalue(lua, -1);
  lua_setfield(lua, LUA_GLOBALSINDEX, mozsvc_sax_table);

  return 1;
}
Esempio n. 2
0
void main(int argc, char * argv[]) {
	auto svr_uuid = boost::lexical_cast<std::string>(boost::uuids::random_generator()());
	
	if (argc <= 1) {
		std::cout << "non input start argv" << std::endl;
		return;
	}

	std::string config_file_path = argv[1];
	auto _config = boost::make_shared<config::config>(config_file_path);
	auto _center_config = _config->get_value_dict("center");
	if (argc >= 3) {
		_config = _config->get_value_dict(argv[2]);
	}

	int64_t tick = clock();
	int64_t tickcount = 0;

	boost::shared_ptr<service::timerservice> _timerservice = boost::make_shared<service::timerservice>(tick);

	boost::shared_ptr<juggle::process> _center_process = boost::make_shared<juggle::process>();
	auto _connectnetworkservice = boost::make_shared<service::connectnetworkservice>(_center_process);
	auto center_ip = _center_config->get_value_string("ip");
	auto center_port = (short)_center_config->get_value_int("port");
	auto _center_ch = _connectnetworkservice->connect(center_ip, center_port);
	auto _centerproxy = boost::make_shared<gate::centerproxy>(_center_ch);
	auto inside_ip = _config->get_value_string("inside_ip");
	auto inside_port = (short)_config->get_value_int("inside_port");
	_centerproxy->reg_server(inside_ip, inside_port, svr_uuid);

	boost::shared_ptr<gate::closehandle> _closehandle = boost::make_shared<gate::closehandle>();
	auto _center_call_server = boost::make_shared<module::center_call_server>();
	_center_call_server->sigreg_server_sucesshandle.connect(boost::bind(&reg_server_sucess, _centerproxy));
	_center_call_server->sigclose_serverhandle.connect(boost::bind(&close_server, _closehandle));
	_center_process->reg_module(_center_call_server);

	auto _logic_process = boost::make_shared<juggle::process>();
	auto _logic_call_gate = boost::make_shared<module::logic_call_gate>();
	auto _logicsvrmanager = boost::make_shared<gate::logicsvrmanager>();
	auto _clientmanager = boost::make_shared<gate::clientmanager>();
	_logic_call_gate->sigreg_logichandle.connect(boost::bind(&reg_logic, _logicsvrmanager, _1));
	_logic_call_gate->sigack_client_connect_serverhandle.connect(boost::bind(&ack_client_connect_server, _logicsvrmanager, _clientmanager, _timerservice, _1, _2));
	_logic_call_gate->sigforward_logic_call_clienthandle.connect(boost::bind(&forward_logic_call_client, _clientmanager, _1, _2, _3, _4));
	_logic_call_gate->sigforward_logic_call_group_clienthandle.connect(boost::bind(&forward_logic_call_group_client, _clientmanager, _1, _2, _3, _4));
	_logic_call_gate->sigforward_logic_call_global_clienthandle.connect(boost::bind(&forward_logic_call_global_client, _clientmanager, _1, _2, _3));
	_logic_process->reg_module(_logic_call_gate);
	auto _logic_service = boost::make_shared<service::acceptnetworkservice>(inside_ip, inside_port, _logic_process);

	_timerservice->addticktime(tick + 5 * 60 * 1000, boost::bind(&heartbeat_handle, _clientmanager, _timerservice, _1));

	auto _client_process = boost::make_shared<juggle::process>();
	auto _client_call_gate = boost::make_shared<module::client_call_gate>();
	_client_call_gate->sigconnect_serverhandle.connect(boost::bind(&connect_server, _logicsvrmanager, _clientmanager, _timerservice, _1));
	_client_call_gate->sigcancle_serverhandle.connect(boost::bind(&cancle_server, _clientmanager));
	_client_call_gate->sigforward_client_call_logichandle.connect(boost::bind(&forward_client_call_logic, _clientmanager, _1, _2, _3));
	_client_call_gate->sigheartbeatshandle.connect(boost::bind(&heartbeats, _clientmanager, _timerservice));
	_client_process->reg_module(_client_call_gate);

	auto outside_ip = _config->get_value_string("outside_ip");
	auto outside_port = (short)_config->get_value_int("outside_port");
	auto _client_service = boost::make_shared<service::acceptnetworkservice>(outside_ip, outside_port, _client_process);

	boost::shared_ptr<service::juggleservice> _juggleservice = boost::make_shared<service::juggleservice>();
	_juggleservice->add_process(_center_process);
	_juggleservice->add_process(_logic_process);
	_juggleservice->add_process(_client_process);
	
	while (true)
	{
		int64_t tmptick = (clock() & 0xffffffff);
		if (tmptick < tick)
		{
			tickcount += 1;
			tmptick = tmptick + tickcount * 0xffffffff;
		}
		tick = tmptick;

		_connectnetworkservice->poll(tick);
		_juggleservice->poll(tick);

		if (_centerproxy->is_reg_sucess) {
			_logic_service->poll(tick);
			_client_service->poll(tick);
			_timerservice->poll(tick);
		}

		if (_closehandle->is_closed) {
			std::cout << "server closed, gate server " << svr_uuid << std::endl;
			break;
		}

		tmptick = (clock() & 0xffffffff);
		if (tmptick < tick)
		{
			tickcount += 1;
			tmptick = tmptick + tickcount * 0xffffffff;
		}
		int64_t ticktime = (tmptick - tick);
		tick = tmptick;

		if (ticktime < 50) {
			boost::thread::sleep(boost::get_system_time() + boost::posix_time::microseconds(15));
		}
	}
}