コード例 #1
0
ファイル: cmd_regs.cpp プロジェクト: sergeykhbr/riscv_vhdl
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(&regdict, res);
}
コード例 #2
0
ファイル: node.cpp プロジェクト: TorstenRobitzki/Sioux
    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())))));
        }
    }
コード例 #3
0
ファイル: main.cpp プロジェクト: kevintrinh/softserver
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;
}
コード例 #4
0
ファイル: main.cpp プロジェクト: kevintrinh/softserver
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;
}
コード例 #5
0
ファイル: main.cpp プロジェクト: kevintrinh/softserver
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;
}
コード例 #6
0
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;
}