main-server.cpp 2.5 KB

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