void CmdRegs::exec(AttributeType *args, AttributeType *res) { if (!isValid(args)) { generateError(res, "Wrong argument list"); return; } Reg64Type u; if (args->size() != 1) { res->make_list(args->size() - 1); for (unsigned i = 1; i < args->size(); i++) { const char *name = (*args)[i].to_string(); tap_->read(info_->reg2addr(name), 8, u.buf); (*res)[i - 1].make_uint64(u.val); } return; } AttributeType soclst, regdict(Attr_Dict); info_->getRegsList(&soclst); for (unsigned i = 0; i < soclst.size(); i++) { const char *name = soclst[i].to_string(); tap_->read(info_->reg2addr(name), 8, u.buf); regdict[name].make_uint64(u.val); } convert_to_str(®dict, res); }
node_name::node_name(const json::object& keys) { const std::vector<json::string> json_key_names = keys.keys(); std::vector<key_domain> domains; std::transform(json_key_names.begin(), json_key_names.end(), std::back_inserter(domains), to_domain()); std::sort(domains.begin(), domains.end()); for ( std::vector<key_domain>::const_iterator k = domains.begin(); k != domains.end(); ++k ) { keys_.push_back(key(*k, convert_to_str(keys.at(json::string(k->name().c_str()))))); } }
init_args load_external_files() { /*Load server settings from XML*/ add_console_msg("[Server]", notification,"Loading settings/server.xml"); init_args args; args.bSuccess = true; //Successful args.uiPortTCP = 65535; //take port and maybe ip address. args.uiPortUDP = 65535; args.uiMaxQueue = 129; //unlimited add_console_msg("[Server]", notification, "is running on TCP Port "+convert_to_str(args.uiPortTCP)); add_console_msg("[Server]", notification, "is running on UDP Port "+convert_to_str(args.uiPortUDP)); add_console_msg("[Server]", notification, "has a maximum queue backlog of "+convert_to_str(args.uiMaxQueue)); if (args.uiPortTCP < 0 || args.uiPortTCP > 65535) { add_console_msg("[Server]", error, "TCP Port must be between 0 and 65535"); args.bSuccess = false; //False and quit } if( args.uiPortUDP < 0 || args.uiPortUDP > 65535) { add_console_msg("[Server]", error, "UDP Port must be between 0 and 65535"); args.bSuccess = false; } if(!args.bSuccess) return args; if(args.uiMaxQueue < 0 || args.uiMaxQueue > SOMAXCONN) { add_console_msg("[Server]", warning, "Max queue backlog must be in between 0 and " + convert_to_str(SOMAXCONN)); add_console_msg("[Server]",warning,"Setting it to 0 by default (unlimited)"); args.uiMaxQueue = 0; } /*Load database after correct settings*/ while(!load_accounts_db()); /*Loads sqlite database*/ while(!load_area_db()); return args; }
int main (int argc, char *argv[]) { /*init critical variables*/ bServerOnline = false; bConsoleActive = false; /*init resources*/ GtkWidget *window; /*init threads*/ g_thread_init(NULL); gdk_threads_init(); gdk_threads_enter(); add_console_msg("[Lucky",motd, "SoftServer Build "+convert_to_str(BUILD_NUM)+"\nhttp://www.softserver.org\n\nAre you still using the trial version?\nDevelop an app using SoftServer and submit it to earn a license!"); add_console_msg("[Main]",notification,"Initializing GTK+ v2.0"); /*init GTK*/ gtk_init(&argc, &argv); /*Window setup*/ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW (window), std::string("SoftServer Build "+convert_to_str(BUILD_NUM)).c_str()); gtk_window_set_default_size(GTK_WINDOW(window), 550, 350); gtk_window_set_resizable(GTK_WINDOW(window), false); /*Console*/ console_text = gtk_text_view_new(); //Start console up console_buffer = gtk_text_view_get_buffer((GtkTextView*)console_text); while(!start_console_format()); //Start up formats gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(console_text), GTK_WRAP_WORD); gtk_text_view_set_editable(GTK_TEXT_VIEW(console_text), false); gtk_widget_set_size_request(console_text, 595, 345); GdkColor console_color_bg; console_color_bg.red = 0; console_color_bg.green = 0; console_color_bg.blue = 0; gtk_widget_modify_base(console_text, GTK_STATE_NORMAL, &console_color_bg); /*Label setup*/ status_msg = gtk_label_new(NULL); change_status_msg("SoftServer <i>Build "+convert_to_str(BUILD_NUM)+"</i>"); start_and_stop_button = gtk_button_new_with_label("Start"); fixed_location = gtk_fixed_new(); gtk_fixed_put(GTK_FIXED(fixed_location), console_text,0,0); gtk_fixed_put(GTK_FIXED(fixed_location), status_msg, 5, 360); gtk_fixed_put(GTK_FIXED(fixed_location), start_and_stop_button, 550, 350); gtk_container_add(GTK_CONTAINER(window), fixed_location); /*Show widgets here*/ gtk_container_set_border_width(GTK_CONTAINER(window), 5); gtk_widget_show_all(window); add_console_msg("[Main]", notification,"Waiting for start button to be pressed"); start_stop_button_ls_id = g_signal_connect_after(start_and_stop_button, "released", G_CALLBACK(init_serv), NULL); g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL); activate_console(); /*Exit*/ gtk_main(); gdk_threads_leave(); return 0; }
void *listen_thread_func(void* args) //TCP's thread { bThreadActive[0] = true; thread_args* my_args = (thread_args*) args; add_console_msg("[Listen]",notification, "Thread has started"); add_console_msg("[Listen]",notification, "Doing safe cleanup of Sockets and Clients"); if(rgSockets.size() > 0) { rgSockets.clear(); } if(rgClients.size() > 0 ) { rgClients.clear(); } if(rgAccounts.size() > 0) { rgAccounts.clear(); } pollfd MasterSocket; MasterSocket.fd = uiMasterSocketTCP; MasterSocket.events = POLLIN; rgSockets.push_back(MasterSocket); soft_client MasterClient(server_fill, uiMasterSocketTCP, uiMasterSocketUDP); rgClients.push_back(MasterClient); soft_account MasterAccount; MasterClient.set_account(MasterAccount); rgAccounts.push_back(MasterAccount); int PollActivity; pollfd* ptrPollSockets; add_console_msg("[Listen]",notification, "Poll is ready to read incoming connections"); while(bServerOnline) { ptrPollSockets = &rgSockets[0]; while(bServerOnline) { PollActivity = poll(ptrPollSockets, rgSockets.size(), POLL_DELAY); if(PollActivity !=0) break; } if(PollActivity < 0) { perror("tcp-poll"); add_console_msg("[Listen]",warning, "Could not poll sockets"); } if(rgSockets[0].revents & POLLIN) //Server received a connection { unsigned int uiNewSocket; struct sockaddr_storage SNewClientAddr; socklen_t iNewClientAddr_Size = sizeof SNewClientAddr; if((uiNewSocket = accept(uiMasterSocketTCP, (struct sockaddr*)&SNewClientAddr, &iNewClientAddr_Size)) < 0) { perror("tcp-accept"); add_console_msg("[Listen]", warning, "Failed to accept client"); } else { add_console_msg("[Listen]", notification, "A client has successfully connected"); //Remove this later /*Create a pollfd for new socket*/ pollfd NewSocket; NewSocket.fd = uiNewSocket; NewSocket.events = POLLIN; rgSockets.push_back(NewSocket); /*Create a new client for socket*/ soft_client NewClient(uiNewSocket, SNewClientAddr); //takes TCP socket and udp address and port soft_account InactiveAccount; //Creates a blank account with inactivityand databaseID equals to 0 NewClient.set_account(InactiveAccount); //This does not increment accounts logged in. You must LOG in to do so. rgClients.push_back(NewClient); rgAccounts.push_back(InactiveAccount); change_status_msg("<span foreground='green'><b>Online</b></span> <b>"+convert_to_str(rgSockets.size()-1)+"</b> user(s) connected"); /*Add to Address Watchlist*/ rgAddressWatch.push_back(SNewClientAddr); } } for(unsigned int i=1; i<rgSockets.size(); i++) { if(i != rgClients[i].uiPosition) rgClients[i].uiPosition = i; //Take uiPosition if(rgSockets[i].revents & POLLIN) { int read_val; char chBuffer[50]; if((read_val = (recv(rgSockets[i].fd, chBuffer, 50, 0))) !=0) { /*Players get linked to an account here*/ } else { /*Client has disconnected*/ add_console_msg("[Listen]", notification, "A client has disconnected"); rgClients[i].status = offline; //He will be taken care of in the next step. To keep order } } } /*Sweep disconnected players*/ for(unsigned int i=1; i<rgClients.size(); i++) { if(rgClients[i].status == offline) { if(rgClients[i].AccountInfo.status == active) { /*Save the account so far*/ add_console_msg("[Listen]",notification, "Client's account was pushed to the save queue"); qSaveAccounts.push(rgAccounts[i]); //Put in save queue } close(rgClients[i].uiSocketTCP); //Closes their TCP socket rgSockets.erase(rgSockets.begin()+i); rgClients.erase(rgClients.begin()+i); // then remove rgAccounts.erase(rgAccounts.begin()+i); //remove accounts whether inactive or not add_console_msg("[Listen]",notification, "Client and socket have been removed from polling"); change_status_msg("<span foreground='green'><b>Online</b></span> <b>"+convert_to_str(rgSockets.size()-1)+"</b> user(s) connected"); } } poll(0,0,CPU_DELAY); //Reduce CPU usage } ptrPollSockets = NULL; my_args = NULL; add_console_msg("[Listen]",notification, "Thread has exited successfully"); bThreadActive[0] = false; return NULL; }
bool ConvertDialog::Validate() { if( m_aspectratio_from->GetSelection() == m_aspectratio_to->GetSelection() || (m_aspectratio_from->GetSelection() == CONVERT_CURRENT && Prefs::get().var(wxT("view_aspectratio")).sval() == convert_to_str()) || (m_aspectratio_to->GetSelection() == CONVERT_CURRENT && Prefs::get().var(wxT("view_aspectratio")).sval() == convert_from_str()) ) { return false; } return true; }