Пример #1
0
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;
}
Пример #2
0
// 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_ = "";
}
Пример #3
0
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_ = "";
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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);
}