main-server.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. size_t ng[MAX_GENUS+1];
  63. for(size_t g=0;g<=MAX_GENUS;++g){
  64. ng[g]=1; //Missing left most of each level
  65. }
  66. for(size_t i=0;i<nb_tasks;++i){
  67. if(tasks[i].get_statut()==Task::Done){
  68. GTaskOutput& output=*((GTaskOutput*)tasks[i].get_output());
  69. for(size_t g=0;g<=MAX_GENUS;++g){
  70. ng[g]+=output.ng[g];
  71. }
  72. /* if(output.number!=0){
  73. if(number==0){
  74. cout<<"I found "<<output.sample<<endl;
  75. }
  76. number+=output.number;
  77. }*/
  78. }
  79. }
  80. for(size_t g=0;g<=MAX_GENUS;++g){
  81. cout<<g<<" -> "<<ng[g]<<endl;
  82. }
  83. //cout<<"Among a total of "<<number<<endl;
  84. }