/* heartbeat -- pings the master */ void *heartbeat(void *ptr) { Worker *worker = (Worker*) ptr; ::std::string pong = "PONG"; ::std::vector< ::std::string> vreq; vreq.push_back("PING"); vreq.push_back(worker->receiverChannel); ::std::string req; serialize(&vreq, &req); int failures = 0; int max_failures = 10; while (worker->heartbeatRunning && failures < max_failures) { try { callSocket(&req, &pong, worker->endpoint, worker->timeout); ::std::cout << "ping did work" << ::std::endl; } catch (...) { ::std::cout << "ping did not work!" << ::std::endl; failures += 1; } // we need to sleep here sleep(worker->heartbeatDelay); } // if we quit because of failures, we need to toggle the worker flag if (failures >= max_failures) { worker->heartbeatFailed = true; } ::std::cout << "bye!" << ::std::endl; return NULL; }
void Worker::reg() { // register to the master ::std::cout << "registering" << ::std::endl; ::std::vector< ::std::string> vreq; vreq.push_back("PING"); vreq.push_back(this->receiverChannel); ::std::string req; serialize(&vreq, &req); ::std::string resp = "PONG"; callSocket(&req, &resp, this->endpoint, this->timeout); }
int main(int argc, char* argv[]) { glutInit(&argc, argv); #ifdef _WIN32 HNWindowsObjectFactory::setAsDefaultFactory(); HNWindowsNetworkObjectFactory::setAsDefaultFactory(); #endif //HNWorld::getInstance()->setBackcolor(HNPointXYZW(0,0,0,0)); //HNAdithScene *scene = new HNAdithScene(); //HNWorld::getInstance()->addScene(scene); //HNWorld::getInstance()->start(); cout << "Running HUNA Instance :" << HNINSTANCE_ID<<endl; int count = 1; while (1) { cout << "Sending Message to Server ..." << endl; //string msg = "This is message no " + to_string(count) + " from HUNA Instance " + HNINSTANCE_ID; string msg = "File Stored in <a href=\\'/Content/Temp/Instance/SkeletonData1.js\\' target=\\'_blank\\'>ftp:\\\\192.168.0.3\\\\FileStore\\\\Instance1\\\\SkeletonData" + to_string(count) + ".data</a>"; cout << msg<<endl; callSocket(HNINSTANCE_ID,"FILE_LOCATION",msg); count++; system("PAUSE"); } _getch(); }
int main(int argc, char *argv[]){ int listenfd, i=0, iPort, fd, err, status; char client[MAX_CANON], command[MAX_CANON], ip[IP_MAX], *saveptr, *sPort, *sIp, a, *c; struct dirent *direntp; DIR *dirp; struct sigaction sigIntHandler; struct ifaddrs *myaddrs, *ifa; request_t request, request2; flag_t flag; sigset_t set; sigemptyset(&set); sigaddset(&set, SIGINT); sigIntHandler.sa_handler = signalHandler; if(argc != 2) usage("2 arguman girmelisiniz\t./client <server IP>:<server port number>"); else{ if (sigemptyset(&sigIntHandler.sa_mask) == -1 || sigaction(SIGINT, &sigIntHandler, NULL) || sigaction(SIGUSR1, &sigIntHandler, NULL)) err_sys("signal handler"); sigIntHandler.sa_flags = 0; saveptr=command; sIp=strtok_r(argv[1], ":", &saveptr); sPort=strtok_r(NULL, ":", &saveptr); printf("%s\n", argv[1]); if(sPort!=NULL) iPort=atoi(sPort); else usage("./client <server IP>:<server port number>"); socketFD = callSocket(sIp, iPort); if(socketFD==-1) err_sys("connection error"); getcwd(request2.path, PATH_MAX); if(write(socketFD, &request2, sizeof(request2))<0) err_sys("write"); if(read(socketFD, &id, sizeof(int))<0) err_sys("read"); pthread_mutex_init(&mutex, NULL); if (err = pthread_create(&tid, NULL, (void *)readFromServer, &c)<0) perror("pthread_create"); status = getifaddrs(&myaddrs); if (status != 0) err_sys("getifaddrs failed!"); freeifaddrs(myaddrs); system("clear"); printf("Port Number: %d ",iPort); for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) if ((ifa->ifa_flags & IFF_UP) != 0 && NULL != ifa->ifa_addr) printIPAddress(ifa); fprintf(stderr, "\nPlease enter a command.\nEnter 'help' for display the available commands and their usage.\n"); while(1){ printf("\nClient ID: %d\n >\t", id); fgets(command, 50, stdin); printf("\n"); command[strlen(command)-1]='\0'; if(strcmp(command, "help") == 0) menu(); else if(strcmp(command,"listLocal") == 0){ char cwd[255]; getcwd(cwd, 255); if((dirp = opendir(cwd)) == NULL) err_sys("opendir"); printf("List of local files in %s\n", cwd); while((direntp = readdir(dirp)) != NULL) { if(strcmp(direntp->d_name,".") != 0 && strcmp(direntp->d_name,"..") != 0){ fprintf(stderr, "%s\n", direntp->d_name); } } } else if(strcmp(command,"lsClients") == 0){ sprintf(request.command, "%s", "lsClients"); if(write(socketFD, &request, sizeof(request))<0) perror("write"); } else if(strncmp(command,"sendFile", 8) == 0){ bool status=true; char *fileName, *id1, *saveptr; saveptr=command; strtok_r(command, " ", &saveptr); fileName = strtok_r(NULL, " " , &saveptr); id1 = strtok_r(NULL, " ", &saveptr); if(fileName==NULL){ fprintf(stderr, "Please enter a current filename.\n"); status=false; } else{ sprintf(request.file.name, "%s", fileName); if((fd = open(fileName, O_RDONLY))<0){ fprintf(stderr, "%s isn't a current file name. Try again!\n", fileName); request.status=-3; status=false; } } if(id1==NULL) { /*dosyayi sadece server'a yolla. */ request.status=-1; request.clientID=id; printf("nULL\n"); if((fd = open(fileName, O_RDONLY))<0){ fprintf(stderr, "%s isn't a current file name. Try again!\n", fileName); status=false; printf("Status: %d\n", status); } } else{ request.status=1; request.clientID=atoi(id1); } struct stat st; stat(fileName, &st); request.file.size = st.st_size; strcpy(request.command,"sendFile"); if(status){ flagWrite=1; pthread_sigmask(SIG_BLOCK, &set, NULL); if(write(socketFD, &request, sizeof(request))<0) err_sys("write"); else{ int j=0; while(j<request.file.size){ if(read(fd, &a, sizeof(char))<0) perror("read1"); write(socketFD, &a, sizeof(char)); ++j; } close(fd); flagWrite=0; pthread_sigmask(SIG_UNBLOCK, &set, NULL); } } } else if(strcmp(command,"listServer") == 0){ sprintf(request.command, "%s", "listServer"); if(write(socketFD, &request, sizeof(request))<0) perror("write"); } else fprintf(stderr, "Please enter a current command.\n"); } } }