main-server.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #include <set>
  2. #include "config.hpp"
  3. #include "../dist/server.hpp"
  4. #include "gtask.hpp"
  5. #include <algorithm>
  6. #include <list>
  7. using namespace std;
  8. int main(int argc,char** argv){
  9. // Compute the Forest
  10. list<Semigroup> forest;
  11. Semigroup O;
  12. init_full_N(O);
  13. for(size_t g=0;g<MAX_GENUS;++g){
  14. auto it=generator_iter<CHILDREN>(O);
  15. ind_t pos=0;
  16. it.move_next();
  17. Semigroup Onext=remove_generator(O,it.get_gen(),pos++);
  18. while(it.move_next()){
  19. forest.push_back(remove_generator(O,it.get_gen(),pos++));
  20. }
  21. O=Onext;
  22. }
  23. // Set tasks
  24. size_t nb_tasks=forest.size();
  25. Task* tasks=new Task[nb_tasks];
  26. size_t ind=0;
  27. for(auto it=forest.begin();it!=forest.end();++it){
  28. GTaskInput input;
  29. input.S=*it;
  30. tasks[ind].set_input((char*)&input,sizeof(input));
  31. tasks[ind].set_statut(Task::Unaffected);
  32. ++ind;
  33. }
  34. int l=1;
  35. int sockfd = socket(AF_INET, SOCK_STREAM, 0);
  36. if(sockfd<0){
  37. cerr<<"[Error] Can not open socket"<<endl;
  38. exit(-1);
  39. }
  40. cout<<"*****************"<<endl;
  41. cout<<"* Wilf - Server *"<<endl;
  42. cout<<"*****************"<<endl;
  43. cout<<endl;
  44. cout<<"----------------- [Server info] ----------------"<<endl;
  45. Server server(MAX_CLIENTS,SERVER_PORT);
  46. server.treat=&treat;
  47. cout<<"------------------------------------------------"<<endl;
  48. cout<<"Max genus = "<<MAX_GENUS<<endl;
  49. cout<<"Number of tasks : "<<nb_tasks<<endl;
  50. server.set_tasks(tasks,nb_tasks);
  51. do{
  52. server.listen_for_new_clients();
  53. server.listen_clients();
  54. server.treat_messages();
  55. server.affect_tasks();
  56. usleep(10000);
  57. }while(server.has_unfinished_tasks());
  58. size_t number=0;
  59. cout<<"***************"<<endl;
  60. cout<<"* Bilan *"<<endl;
  61. cout<<"***************"<<endl;
  62. Results res;
  63. clear_results(res);
  64. for(size_t i=0;i<nb_tasks;++i){
  65. if(tasks[i].get_statut()==Task::Done){
  66. GTaskOutput& output=*((GTaskOutput*)tasks[i].get_output());
  67. add_results(res,output.res);
  68. if(res.has_counter_example){
  69. count<<"A counter example was found : "<<endl;
  70. print_Semigroup_gen(res.S_counter_example);
  71. break;
  72. }
  73. }
  74. }
  75. for(size_t g=0;g<=MAX_GENUS;++g){
  76. cout<<g<<","<<res.n1[g]<<","<<res.n2[g]<<endl;
  77. }
  78. }