MojErr MojLunaServiceTest::run() { MojErr err = MojErrNone; #ifdef USE_SOCKET_SERVICE MojEpollReactor reactor; MojSocketService service(reactor); err = reactor.init(); MojErrCheck(err); #else MojGmainReactor reactor; err = reactor.init(); MojErrCheck(err); MojLunaService service; #endif MojLunaTestClient clientService(service); err = service.open(m_name); MojTestErrCheck(err); err = service.attach(reactor.impl()); MojErrCheck(err); err = clientService.testEchoRequest(); MojTestErrCheck(err); // err = clientService.testInvalidPayload(); // MojTestErrCheck(err); err = clientService.testQueue(); MojTestErrCheck(err); err = clientService.testMultiEcho(); MojTestErrCheck(err); err = clientService.testCancel(); MojTestErrCheck(err); // commented because this request is require writing a special handler for error message // err = clientService.testInvalidMethod(); // MojTestErrCheck(err); // must be last! err = clientService.stopService(); MojTestErrCheck(err); err = service.close(); MojTestErrCheck(err); return MojErrNone; }
HandlerServer::HandlerServer(shared_ptr<DataBase> DB) { /**Asigna la base de datos al handler del server.**/ this->DB= DB; shared_ptr<TokenAuthentificator> tokenAuth(new TokenAuthentificator(DB)); shared_ptr<ClientServiceInterface> clientService(new ClientService()); shared_ptr<SharedClient> sharedClient(new SharedClient(clientService)); shared_ptr<GcmClient> gcmClientAux(new GcmClient(clientService)); this->tokenAuthentificator=tokenAuth; vecHandler.push_back(shared_ptr<HandlerInterface>(new HandlerUsers(DB,tokenAuthentificator,sharedClient))); vecHandler.push_back(shared_ptr<HandlerInterface>(new HandlerInterest(DB,tokenAuthentificator,sharedClient))); vecHandler.push_back(shared_ptr<HandlerInterface>(new HandlerMatch(DB,tokenAuthentificator,sharedClient,gcmClientAux))); vecHandler.push_back(shared_ptr<HandlerInterface>(new HandlerChat(DB,tokenAuthentificator,sharedClient,gcmClientAux))); vecHandler.push_back(shared_ptr<HandlerInterface>(new HandlerToken(DB,tokenAuthentificator,sharedClient))); }
int main(int argc, char **argv) { pid_t childpid; if (argc<3){ cout<< "\nusage: ./server HOST PORT [debug]\n"; return 0; }else { SERV_PORT = atoi(argv[2]); runningHost=argv[1]; } /*signals used for removing server information*/ signal(SIGINT, sig_int); signal(SIGTERM, sig_term); /*signals used for removing server information*/ /*register server*/ if(myregister()<0) cout<<"Registeration Failed\n"; else cout<<"Server has been registered successfully\n"; /*register server*/ /*daemon or debug*/ if ((argc==4) && (strcmp(argv[3],"debug")==0)){ dFlag=1; printf("||||debug mode|||\n"); } else{ printf("Server is running as a Daemon Process now\n"); daemon_init(argv[0], 0); } /*daemon or debug*/ //************************************SOCKET****************************************************** int listenfd; listenfd = socket (AF_INET6, SOCK_STREAM, 0); if (listenfd==-1) { if (dFlag) printf ( "(Server) socket error: %s\n",strerror(errno)); return 0; } //************************************SOCKET****************************************************** printf("(Server) Listen socket is created at: %d\n",listenfd); //************************************BIND******************************************************** struct sockaddr_in6 servaddr; bzero(&servaddr, sizeof(servaddr)); servaddr.sin6_family = AF_INET6; servaddr.sin6_addr = in6addr_any; servaddr.sin6_port = htons (SERV_PORT); if(bind(listenfd, (SA *) &servaddr, sizeof(servaddr))<0){ printf ( "(Server) for socket %d bind error: %s\n",listenfd,strerror(errno)); return 0; } //********************************* lISTEN TO LISTEN SOCKET ************************************** if (listen(listenfd, LISTENQ)==-1) { printf ( "(Server) for socket %d listen error: %s\n",listenfd,strerror(errno)); return 0; } //*********************************** FOR TERMINATING CHILD (Z) ************************************** signal (SIGCHLD, sig_chld); //**************************** ACCEPT A CLIENT AND FORK A CHILD SERVER *************************** int serviceSocket; socklen_t clilen; struct sockaddr_storage cliaddr; for ( ; ; ) { clilen = sizeof(cliaddr); serviceSocket = accept(listenfd, (SA *) &cliaddr, &clilen); if (serviceSocket==-1) { printf ( "(Server) for socket %d accept error: %s\n",listenfd,strerror(errno)); } if ( (childpid = fork()) == 0) { // child process printf ("\nA client is connected to socket %d ",serviceSocket); close(listenfd); // close listening socket clientService(serviceSocket); // process the request exit (0); }//if FORK close(serviceSocket); // parent closes connected socket }//for //**************************** ACCEPT A CLIENT AND FORK A CHILD SERVER *************************** }//main