main-server.cpp 2.3 KB

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