int Resource::release(Arrival* arrival, int amount) { remove_from_server(sim->verbose, sim->now(), arrival, amount); arrival->unregister_entity(this); // serve another Task* task = new Task(sim, "Post-Release", boost::bind(&Resource::post_release, this), PRIORITY_RELEASE_POST); task->activate(); return SUCCESS; }
bool Resource::erase(Arrival* arrival, bool stay) { if (stay) { int amount = remove_from_server(false, sim->now(), arrival, -1); server_count += amount; return false; } if (!remove_from_queue(sim->verbose, sim->now(), arrival)) { release(arrival, -1); return false; } if (is_monitored()) sim->record_resource(name, server_count, queue_count, capacity, queue_size); return true; }
int Resource::release(Arrival* arrival, int amount) { // departure if (arrival->is_monitored()) { double last = arrival->get_activity(this->name); arrival->set_activity(this->name, sim->now() - last); arrival->leave(this->name, sim->now()); } remove_from_server(sim->verbose, sim->now(), arrival, amount); // serve another DelayedTask* task = new DelayedTask(sim, "Post-Release", boost::bind(&Resource::post_release, this)); sim->schedule(0, task, PRIORITY_RELEASE_POST); return SUCCESS; }
void server::collect_inputs() { out_socket *collect_server=NULL; for (view *f=player_list; f; ) { view *next=f->next; if (is_server) { if (f->connect) { packet pk; if (get_pkt(f->connect,pk)) { while (!pk.eop()) { uint8_t cmd; if (pk.read((uint8_t *)&cmd,1)==1) if (!process_command(f,cmd,pk)) { remove_player(f); f=NULL; } } } else { remove_player(f); f=NULL; } } else { f->get_input(); add_change_log(f,next_out,1); } } else { if (f->local_player()) { f->get_input(); if (f->connect && !send_inputs(f)) remove_from_server(f); else if (f->connect) collect_server=f->connect; // take note that we should collect the input back from the server } } f=next; } if (collect_server) { packet pk; if (!get_pkt(collect_server,pk)) { for (view *f=player_list; f; f=f->next) if (f->local_player()) remove_from_server(f); } if (!client_do_packet(pk)) printf("Error occurred while processing packet from server\n"); } if (is_server && in) distribute_changes(); }