Docking::Docking(Configuration &config) { string t; config.getParameter("receptor_inner_skin_coeffs", t); receptor_.inner_.importFromFile(t); receptor_.SetInnerSkinName(t); //For protein recognition config.getParameter("receptor_outer_skin_coeffs", t); receptor_.outer_.importFromFile(t); receptor_.SetOuterSkinName(t); config.getParameter("ligand_inner_skin_coeffs", t); ligand_.inner_.importFromFile(t); ligand_.SetInnerSkinName(t); config.getParameter("ligand_outer_skin_coeffs", t); ligand_.outer_.importFromFile(t); ligand_.SetOuterSkinName(t); config.getParameter("ligand", t); ligandPath_ = t; config.getParameter("receptor", t); receptorPath_ = t; config.getParameter("radii_path", t); radiiPath_ = t; loadParametersFromConfiguration(config); checkOrders(); rotatationsCalculated_ = false; trigonometricCalculated_ = false; coeffMappingNLMCalculated_ = false; }
// first -- inner; second -- outer Docking::Docking(const pair<string, string>& receptorFile, const pair<string, string>& ligandFile) { exit(1); ligandPath_ = ""; receptorPath_ = ""; radiiPath_ = ""; receptor_.inner_.importFromFile(receptorFile.first); receptor_.outer_.importFromFile(receptorFile.second); ligand_.inner_.importFromFile(ligandFile.first); ligand_.outer_.importFromFile(ligandFile.second); setDefaultParameters(); checkOrders(); rotatationsCalculated_ = false; trigonometricCalculated_ = false; coeffMappingNLMCalculated_ = false; ligandPath_ = ""; receptorPath_ = ""; radiiPath_ = ""; }
Docking::Docking(const Grid& receptorInner, const Grid& receptorOuter, const Grid& ligandInner, const Grid& ligandOuter, int order) { exit(1); receptor_.inner_.init(order); receptor_.outer_.init(order); ligand_.inner_.init(order); ligand_.outer_.init(order); receptor_.inner_.calculateFromGrid(receptorInner); receptor_.outer_.calculateFromGrid(receptorOuter); ligand_.inner_.calculateFromGrid(ligandInner); ligand_.outer_.calculateFromGrid(ligandOuter); setDefaultParameters(); checkOrders(); rotatationsCalculated_ = false; trigonometricCalculated_ = false; coeffMappingNLMCalculated_ = false; ligandPath_ = ""; receptorPath_ = ""; radiiPath_ = ""; }
int CMD_check( int argc, char **argv, int kind ) { int result; char *logName; envelope *anEnvelope; char* forecastName; char* returnAddress; char* raceName; char* password; char* final_orders; game* aGame; FILE* forecast; player* aPlayer; int resNumber, theTurnNumber; result = FALSE; logName = createString( "%s/log/orders_processed.txt", galaxynghome ); openLog( logName, "a" ); free( logName ); plogtime( LBRIEF ); if ( argc >= 2 ) { anEnvelope = createEnvelope( ); returnAddress = getReturnAddress( stdin ); raceName = NULL; password = NULL; final_orders = NULL; aGame = NULL; resNumber = areValidOrders( stdin, &aGame, &raceName, &password, &final_orders, &theTurnNumber ); plog( LBRIEF, "game %s\n", aGame->name ); setHeader(anEnvelope, MAILHEADER_FROM, "%s", aGame->serverOptions.SERVERemail); setHeader( anEnvelope, MAILHEADER_TO, "%s", returnAddress ); setHeader(anEnvelope, MAILHEADER_REPLYTO, aGame->serverOptions.ReplyTo); anEnvelope->from_name = strdup(aGame->serverOptions.SERVERname); anEnvelope->from_address = strdup(aGame->serverOptions.SERVERemail); if ( resNumber == RES_OK) { aPlayer = findElement( player, aGame->players, raceName ); aPlayer->orders = NULL; plog( LBRIEF, "Orders from %s\n", returnAddress ); /* produce an XML forecast */ if ( aPlayer->flags & F_XMLREPORT ) { if ( ( theTurnNumber == LG_CURRENT_TURN ) || ( theTurnNumber == ( aGame->turn ) + 1 ) ) { forecastName = createString( "%s/NG_XML_%d_forecast", tempdir, getpid( ) ); copyOrders( aGame, stdin, raceName, password, final_orders, aGame->turn + 1 ); if ( ( forecast = GOS_fopen( forecastName, "w" ) ) == NULL ) { plog( LBRIEF, "Could not open %s for forecasting\n", forecastName ); fprintf( stderr, "Could not open %s for forecasting\n", forecastName ); return EXIT_FAILURE; } if (final_orders) setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d XML finalorders forecast for %s", aGame->name, ( aGame->turn ) + 1, raceName ); else setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d XML forecast for %s", aGame->name, ( aGame->turn ) + 1, raceName ); checkOrders( aGame, raceName, forecast, F_XMLREPORT ); fclose( forecast ); if ( kind == CMD_CHECK_REAL ) { plog( LBRIEF, "mailing XML report %s to %s\n", forecastName, anEnvelope->to ); fprintf( stderr, "mailing XML report %s to %s\n", forecastName, anEnvelope->to ); result |= eMail( aGame, anEnvelope, forecastName ); } else { char *forecastFile; forecastFile = createString( "%s/forecasts/%s/%s_XML", galaxynghome, argv[2], returnAddress ); GOS_copy( forecastName, forecastFile ); } result |= GOS_delete( forecastName ); free( forecastName ); } } /* produce a text forecast */ if ( aPlayer->flags & F_TXTREPORT ) { if ( ( theTurnNumber == LG_CURRENT_TURN ) || ( theTurnNumber == ( aGame->turn ) + 1 ) ) { forecastName = createString( "%s/NG_TXT_%d_forecast", tempdir, getpid( ) ); if ( ( forecast = GOS_fopen( forecastName, "w" ) ) == NULL ) { plog( LBRIEF, "Could not open %s for forecasting\n", forecastName ); return EXIT_FAILURE; } if ( aPlayer->orders == NULL ) copyOrders( aGame, stdin, raceName, password, final_orders, aGame->turn + 1 ); if (final_orders) setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d text finalorders forecast for %s", aGame->name, ( aGame->turn ) + 1, raceName ); else setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d text forecast for %s", aGame->name, ( aGame->turn ) + 1, raceName ); checkOrders( aGame, raceName, forecast, F_TXTREPORT ); fclose( forecast ); if ( kind == CMD_CHECK_REAL ) { plog( LBRIEF, "mailing TXT report %s to %s\n", forecastName, anEnvelope->to ); fprintf( stderr, "mailing TXT report %s to %s\n", forecastName, anEnvelope->to ); result |= eMail( aGame, anEnvelope, forecastName ); } else { char *forecastFile; forecastFile = createString( "%s/forecasts/%s/%s_TXT", galaxynghome, argv[2], returnAddress ); GOS_copy( forecastName, forecastFile ); } result |= GOS_delete( forecastName ); free( forecastName ); } } } else { forecastName = createString( "%s/NG_TXT_%d_errors", tempdir, getpid( ) ); forecast = GOS_fopen( forecastName, "w" ); setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] Major Trouble" ); plog( LBRIEF, "Major Trouble %d\n", resNumber ); generateErrorMessage( resNumber, aGame, raceName, theTurnNumber, forecast ); fclose( forecast ); if ( kind == CMD_CHECK_REAL ) { plog( LBRIEF, "mailing error report %s to %s\n", forecastName, anEnvelope->to ); result |= eMail( aGame, anEnvelope, forecastName ); } else { char *forecastFile; forecastFile = createString( "%s/forecasts/%s/%s_ERR", galaxynghome, argv[2], returnAddress ); GOS_copy( forecastName, forecastFile ); } result |= GOS_delete( forecastName ); free( forecastName ); } /* code here for advanced orders, we need to see how to determine this */ if ( theTurnNumber > (aGame->turn+1)) { if ( aPlayer->orders == NULL ) copyOrders( aGame, stdin, raceName, password, final_orders, theTurnNumber ); if (final_orders) { setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d advance finalorders received for %s.", aGame->name, theTurnNumber, raceName ); plog( LBRIEF, "%s turn %d advance finalorders received for %s.\n", aGame->name, theTurnNumber, raceName ); } else { setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d advance orders received for %s.", aGame->name, theTurnNumber, raceName ); plog( LBRIEF, "%s turn %d advance orders received for %s.\n", aGame->name, theTurnNumber, raceName ); } if ( aPlayer->flags & F_XMLREPORT ) { forecastName = createString( "%s/NG_XML_forecast", tempdir ); forecast = GOS_fopen( forecastName, "w" ); fprintf( forecast, "<galaxy>\n <variant>GalaxyNG</variant>\n" ); fprintf( forecast, " <version>%d.%d.%d</version>\n", GNG_MAJOR, GNG_MINOR, GNG_RELEASE ); fprintf( forecast, " <game name=\"%s\">\n", aGame->name ); fprintf( forecast, " <turn num=\"%d\">\n", theTurnNumber ); fprintf( forecast, " <race name=\"%s\">\n", raceName ); fprintf( forecast, " <message>\n" ); fprintf( forecast, " <line num=\"1\">" "O wise leader, your orders for turn %d</line>", theTurnNumber ); fprintf( forecast, " <line num=\"2\">" "have been received and stored.</line>" ); fprintf( forecast, " </message>\n" ); fprintf( forecast, " </race>\n" ); fprintf( forecast, " </turn>\n" ); fprintf( forecast, " </game>\n" ); fprintf( forecast, "</galaxy>\n" ); fclose( forecast ); if ( kind == CMD_CHECK_REAL ) { result |= eMail( aGame, anEnvelope, forecastName ); } else { char *forecastFile; forecastFile = createString( "%s/forecasts/%s/%s_XML", galaxynghome, argv[2], returnAddress ); GOS_copy( forecastName, forecastFile ); } result |= GOS_delete( forecastName ); free( forecastName ); } if ( aPlayer->flags & F_TXTREPORT ) { if ( aPlayer->orders == NULL ) copyOrders( aGame, stdin, raceName, password, final_orders, theTurnNumber ); forecastName = createString( "%s/NG_TXT_forecast", tempdir ); forecast = GOS_fopen( forecastName, "w" ); fprintf( forecast, "O wise leader your orders for turn %d " "have been received and stored.\n", theTurnNumber ); fclose( forecast ); if ( kind == CMD_CHECK_REAL ) { result |= eMail( aGame, anEnvelope, forecastName ); } else { char *forecastFile; forecastFile = createString( "%s/forecasts/%s/%s_TXT", galaxynghome, argv[2], returnAddress ); GOS_copy( forecastName, forecastFile ); } result |= GOS_delete( forecastName ); free( forecastName ); } } } if ( raceName ) free( raceName ); if ( password ) free( password ); destroyEnvelope( anEnvelope ); result = ( result ) ? EXIT_FAILURE : EXIT_SUCCESS; return result; }
int CMD_check( int argc, char **argv, int kind ) { char *logName; int result = FALSE; logName = createString( "%s/log/orders_processed.txt", galaxynghome ); openLog( logName, "a" ); free( logName ); plogtime( LBRIEF ); if ( argc < 2 ) { result = TRUE; } else { envelope *anEnvelope = createEnvelope( ); char* returnAddress = getReturnAddress( stdin ); int theTurnNumber = getTurnNumber( stdin ); char* raceName = NULL; char* password = NULL; char* final_orders = NULL; game *aGame = NULL; int resNumber = areValidOrders( stdin, &aGame, &raceName, &password, &final_orders, &theTurnNumber ); plog( LBRIEF, "game %s\n", aGame->name ); setHeader(anEnvelope, MAILHEADER_FROM, "%s", aGame->serverOptions.SERVERemail); setHeader( anEnvelope, MAILHEADER_TO, "%s", returnAddress ); setHeader(anEnvelope, MAILHEADER_REPLYTO, aGame->serverOptions.ReplyTo); anEnvelope->from_address = strdup(aGame->serverOptions.SERVERemail); anEnvelope->from_name = strdup(aGame->serverOptions.SERVERname); if ( resNumber == RES_OK ) { player *aPlayer = findElement( player, aGame->players, raceName ); assert( aPlayer); aPlayer->orders = NULL; plog( LBRIEF, "Orders from %s\n", returnAddress ); if ( ( theTurnNumber == LG_CURRENT_TURN ) || ( theTurnNumber == ( aGame->turn ) + 1 ) ) { /* They are orders for the coming turn, copy them. */ copyOrders( aGame, stdin, raceName, password, aGame->turn + 1 ); /* Check them */ checkOrders( aGame, raceName ); /* Now mail the result */ if ( aPlayer->flags & F_XMLREPORT ) { result = mail_Forecast( aGame, aPlayer, anEnvelope, raceName, kind, REP_XML ); } if ( aPlayer->flags & F_TXTREPORT ) { result = mail_Forecast( aGame, aPlayer, anEnvelope, raceName, kind, REP_TXT ); } } else if ( theTurnNumber > ( aGame->turn ) + 1 ) { /* They are advance orders */ copyOrders( aGame, stdin, raceName, password, theTurnNumber ); setHeader( anEnvelope, MAILHEADER_SUBJECT, "[GNG] %s turn %d advance orders received for %s.", aGame->name, theTurnNumber, raceName ); plog( LBRIEF, "%s turn %d advance orders received for %s.\n", aGame->name, theTurnNumber, raceName ); if ( aPlayer->flags & F_XMLREPORT ) { result = mail_AdvanceReport( aGame, aPlayer, anEnvelope, raceName, kind, REP_XML ); } if ( aPlayer->flags & F_TXTREPORT ) { result = mail_AdvanceReport( aGame, aPlayer, anEnvelope, raceName, kind, REP_TXT ); } } else { /* Orders for a turn that already ran. * Should be handled by areValidOrders() */ assert( 0 ); } } else { /* Some major error */ result |= mail_TXT_Error( aGame, anEnvelope, raceName, kind, resNumber, theTurnNumber ); } } result = ( result ) ? EXIT_FAILURE : EXIT_SUCCESS; return result; }
OrdersController::OrdersController(OrdersView * ordersView) { view_ = ordersView; QueryConstraints qc; qc.Limit(50); qc.Sort("id", SortConstraint::DESCENDING); repo = new OrderRepository(qc); try { //auto orders = orderService.GetAllOrders(); auto orders = repo->GetAll(); orderPaginator = new OrderPaginator(orders, 15); view_->Update(orderPaginator->Page(0)); view_->Info(Utils::s2ws("Caricamento effettuato")); } catch (const DatabaseException& db_exception) { std::wstringstream ws; ws << L"Errore nel database: " << db_exception.what(); view_->Warn(ws.str()); } catch (const std::exception& exc) { wxMessageBox(exc.what(), L"Errore"); } // CHECKING NEW ORDERS: scheduled task Config cfg; create_timer_and_start(std::bind(&OrdersController::checkOrders, this), cfg.PollingTime() * 1000); // Binding // *********************** // Check new orders view_->btnCheckNew->Bind(wxEVT_BUTTON, [&](wxCommandEvent & event) { checkOrders(); }); // Next Page view_->btnNext->Bind(wxEVT_BUTTON, [=](wxCommandEvent& WXUNUSED(event)) { int nPage = orderPaginator->Current() + 1; if (nPage >= 0 && nPage < orderPaginator->Pages()) { view_->Update(orderPaginator->Page(nPage)); } }); // Prev page view_->btnPrev->Bind(wxEVT_BUTTON, [=](wxCommandEvent& WXUNUSED(event)) { int nPage = orderPaginator->Current() - 1; if (nPage >= 0 && nPage < orderPaginator->Pages()) { view_->Update(orderPaginator->Page(nPage)); } }); // Menu binding view_->Bind(wxEVT_MENU, [=](wxCommandEvent& event) { auto dirname = Config::CONFIG_PATH; std::ostringstream sstr; switch (event.GetId()) { case ID_ToggleTask: if (event.IsChecked()) { polling_timer->start(); view_->Info(L"Servizio abilitato"); } else { polling_timer->pause(); view_->Info(L"Servizio disabilitato"); } event.Skip(); break; case wxID_PREFERENCES: sstr << "explorer.exe " << dirname; system(sstr.str().c_str()); break; default: event.Skip(); break; } }); // PRINT SELECTED ORDERS view_->btnPrint->Bind(wxEVT_BUTTON, [=](wxCommandEvent& WXUNUSED(event)) { for (int& index : view_->OrdersList->GetSelectedItems()) { std::wostringstream payload; int orderId = view_->OrdersList->GetItemData(index); Order order = repo->Get(orderId); OrderHtmlFormatter html(order); payload << html.ToHtml(); order.IsRead(true); repo->Update(order); view_->UpdateListItem(index, order); orderPaginator->Update(order); if (payload.str().size() > 0) { view_->Printer()->PrintText(payload.str()); } } }); //// LIST RIGHT CLICK //view_->OrdersList->Bind(wxEVT_LIST_ITEM_RIGHT_CLICK, [&](wxListEvent& event) { // //popupMenu = new wxMenu(); // void *data = reinterpret_cast<void *>(event.GetItem().GetData()); // wxMenu mnu; // mnu.SetClientData(data); // mnu.Append(300, "Do something"); // mnu.Append(301, "Do something else"); // //mnu.Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(OrdersController::OnPopupClick), NULL, this); // view_->PopupMenu(&mnu); //}); // PRINT PREVIEW view_->OrdersList->Bind(wxEVT_LIST_ITEM_ACTIVATED, [&](wxListEvent& event) { int idx = event.GetIndex(); try { int orderId = atoi(event.GetText()); Order order = repo->Get(orderId); /*std::wostringstream wss; wss << "Ordine n. " << order.GetRemoteId(); view_->Printer()->SetName(wss.str()); wss << " (@PAGENUM@/@PAGESCNT@)<hr>"; view_->Printer()->SetHeader(wss.str(), wxPAGE_ALL);*/ //view_->PrintPreview(order); OrderHtmlFormatter html(order); auto isRead = view_->Printer()->PreviewText(html.ToHtml()); order.IsRead(true); repo->Update(order); orderPaginator->Update(order); view_->UpdateListItem(idx, order); event.Veto(); } catch (const DatabaseException& db_exception) { std::wstringstream ws; ws << L"Errore nel database: " << db_exception.what(); view_->Warn(ws.str()); } catch (const std::exception& exc) { view_->Warn(Utils::s2ws(exc.what())); } }); view_->Show(true); }