QString cacheProblemDir() { #ifdef Q_WS_X11 // fast fix for ht condor static QString cch = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); QDir dirc(cch); if (!dirc.exists() && !cch.isEmpty()) dirc.mkpath(cch); // ro system if (!dirc.exists()) cch = tempProblemDir(); static QString str = QString("%1/%2"). arg(cch). arg(QString::number(QCoreApplication::applicationPid())); #endif #ifdef Q_WS_WIN static QString str = QString("%1/agros2d/%2"). arg(QDir::temp().absolutePath()). arg(QString::number(QCoreApplication::applicationPid())); #endif QDir dir(str); if (!dir.exists() && !str.isEmpty()) dir.mkpath(str); return str; }
static int add_cross(int p) { int i, y, n = 20, hn; static int tt; #ifdef DEBUG char buf[100]; #endif hn = n / 2; if ( LOGO == 0) { y = LINES / 2 - 5; } else { y = LINES / 2 - 7; } for (i = 2; i < D51HIGHT; ++i) { my_mvaddstr(y + i, cros0l[i] + p, cros0[i]); } for (i = 8; i < D51HIGHT; ++i) { my_mvaddstr(y + i, p + 5, cros3[i]); } #ifdef DEBUG sprintf(buf, "%d", tt); my_mvaddstr(0, 0, buf); #endif if ( tt % n >= 0 && tt % n < hn) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "O"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "X"); my_mvaddstr(y + 5, cros0l[5] + p - 1, " || "); } else if ( tt % n >= hn && tt % n < n) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "X"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "O"); dirc(y, p); } ++tt; return 0; }
//Start the peer server void * FileServices::peerServer(void * arg) { //std::cout << "Starting to listen " << std::endl; initialize(); int sent, newsockfd, oldtype; struct hostent *serv_addr; struct sockaddr_in server; server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(10090); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); //create a socket if((serverSock = socket( AF_INET, SOCK_STREAM, 0)) == -1) { std::cout << "PeerServer socket call failed" << std::endl; } //bind the socket if((bind(serverSock, (struct sockaddr *)&server, sizeof(server))) == -1) { std::cout << "PeerServer Bind Call failed" << std::endl; } //Start Listening to connections if(listen(serverSock, 5) == -1) { std::cout << "PeerServer Listen call failed" << std::endl; } while(keepalive == 1) { //Accept connection if((newsockfd = accept(serverSock, NULL, NULL)) == -1) { std::cout << "PeerServer Accept call failed " << std::endl; } if(fork() == 0) { std::cout << "New Request! " << std::endl; int request,rec, sent; rec = recv(newsockfd, &request, sizeof(int), 0); if(rec == -1) { std::cout << "Receive error " << std::endl; } //Switch on the request type switch(request) { case 0: { //Read file request std::cout << "New file read request " << std::endl; int fnameSize, ver, recvd, bypass, reqver, mode; char fname[] = " "; char fdir[] = " "; char vers[] = " "; std::string fdirV; rec = recv(newsockfd, &fnameSize, sizeof(size_t), 0); rec = recv(newsockfd, fname, fnameSize, 0); //Assume it already has the file rec = recv(newsockfd, &mode, sizeof(int), 0); rec = recv(newsockfd, &reqver, sizeof(int), 0); ver = getVersion(fname); if(mode == 0) strcpy(fdir, "home/current/"); else strcpy(fdir, "home/stable/"); strcat(fdir,fname); std::string dirc(fdir); fdirV.append(dirc); sent = send(newsockfd, &ver, sizeof(int), 0); rec = recv(newsockfd, &bypass, sizeof(int), 0); sprintf(vers, "%d", reqver); FILE *pFile; char buf[65536], fname1[100]; int fileSize, n_chunks; pFile = fopen(dirc.c_str(), "rb"); if(bypass == 0 || reqver !=0) { if(mode == 2 && reqver != 0) { fdirV.append("."); fdirV.append(vers); pFile = fopen(fdirV.c_str(), "rb"); if(pFile == NULL) { pFile = fopen(dirc.c_str(), "rb"); } else { } } fseek(pFile, 0, SEEK_END); fileSize = ftell(pFile); rewind(pFile); sent = send(newsockfd, &fileSize, sizeof(int), 0); fread(buf,1, fileSize,pFile); fclose(pFile); sent = send(newsockfd, buf, fileSize, 0); std::cout << "File " << fdirV <<" is sent" << std::endl; } else { std::cout << "File not sent, already the cached version is latest " << std::endl; } close(newsockfd); break; } case 1: { //Write file request std::cout << "New file write request " << std::endl; int fnameSize, recvd, fileSize; char fname[20]; char fdir[20] = "home/current/"; rec = recv(newsockfd, &fnameSize, sizeof(size_t), 0); rec = recv(newsockfd, fname, fnameSize, 0); //Assume it already has the file strcat(fdir,fname); FILE *pFile; char buf[65536]; recvd = recv(newsockfd, &fileSize, sizeof(int), 0); recvd = recv(newsockfd, buf, fileSize, 0); pFile = fopen(fdir, "w"); fwrite(buf, 1, fileSize, pFile); fclose(pFile); close(newsockfd); std::cout <<"File "<< fdir <<" is updated." << std::endl; break; } case 2: { //Commit file to stable version initialize(); std::cout << "A new commit request" << std::endl; int fnameSize, recvd, fileSize; char fname[] = " "; char fdir1[] = "home/current/"; char fdir2[] = "home/stable/"; char space[] = " "; char dot[] = "."; rec = recv(newsockfd, &fnameSize, sizeof(int), 0); rec = recv(newsockfd, fname, fnameSize, 0); //Assume it already has the file std::string filename(fname); Files *file = new Files; file = getFileinfo(fname); strcat(fdir1,fname); strcat(fdir2,fname); std::string command; command.append("cp "); command.append("home/current/"); command.append(filename); command.append(" home/stable/"); command.append(filename); char ver[] = " "; sprintf(ver, "%d", file->version); std::string mvcmd; mvcmd.append("mv "); mvcmd.append("home/stable/"); mvcmd.append(filename); mvcmd.append(" home/stable/"); mvcmd.append(filename); mvcmd.append("."); mvcmd.append(ver); system(mvcmd.c_str()); system(command.c_str()); file->version++; updatefilelist(); close(newsockfd); break; } case 3: { //New file being added to the VFS std::cout << "New file is added to the PeerBook" << std::endl; int fnameSize; char fname[] = " "; rec = recv(newsockfd, &fnameSize, sizeof(int), 0); rec = recv(newsockfd, fname, fnameSize, 0); //Assume it already has the file char client_IP[20]; struct sockaddr_in client; socklen_t len = sizeof(client); if(getpeername(newsockfd, (struct sockaddr*)&client, &len) == -1) { std::cout << "Cannot get IP of Client" << std::endl; } inet_ntop(AF_INET, &client.sin_addr, client_IP, sizeof(client_IP)); try { std::ofstream outfile ("fileslist", std::ofstream::out | std::ofstream::app); outfile << fname << " " << client_IP << " 10090 " << "0 " << "0 " << "0 " << std::endl; } catch (std::ofstream::failure e) { std::cout << "Exception opening/reading/closing file" << std::endl; } break; } default: { std::cout << "Illegal request" << std::endl; break; } } close(newsockfd); } } close(serverSock); //pthread_exit(NULL); }
static int x_gate(int p) { int i, y, n = 20, hn; int tt; hn = n / 2; if ( LOGO == 0) { y = LINES / 2 - 5; } else { y = LINES / 2 - 7; } for (tt = 0; tt <= 20; ++tt) { for (i = 0; i < D51HIGHT; ++i) { my_mvaddstr(y + i, p + 5, cros3[i]); } for (i = 2; i < D51HIGHT; ++i) { my_mvaddstr(y + i, cros0l[i] + p, cros0[i]); } if ( tt % n >= 0 && tt % n < hn) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "O"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "X"); my_mvaddstr(y + 5, cros0l[5] + p - 1, " || "); } else if ( tt % n >= hn && tt % n < n) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "X"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "O"); dirc(y, p); } my_mvaddstr(LINES + 1, COLS + 1, ""); refresh(); usleep((USLEEP_ARG0_TYPE)WAIT_TIME); } for (tt = 0; tt <= 10; ++tt) { for (i = 0; i < D51HIGHT; ++i) { my_mvaddstr(y + i, p + 5, cros2[i]); } for (i = 2; i < D51HIGHT; ++i) { my_mvaddstr(y + i, cros0l[i] + p, cros0[i]); } if ( tt % n >= 0 && tt % n < hn) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "O"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "X"); my_mvaddstr(y + 5, cros0l[5] + p - 1, " || "); } else if ( tt % n >= hn && tt % n < n) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "X"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "O"); dirc(y, p); } my_mvaddstr(LINES + 1, COLS + 1, ""); refresh(); usleep((USLEEP_ARG0_TYPE)WAIT_TIME); } DIREC = ( DIREC + 1 ) % 2; for (tt = 0; tt <= 10; ++tt) { for (i = 0; i < D51HIGHT; ++i) { my_mvaddstr(y + i, p + 5, cros2[i]); } for (i = 2; i < D51HIGHT; ++i) { my_mvaddstr(y + i, cros0l[i] + p, cros0[i]); } if ( tt % n >= 0 && tt % n < hn) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "O"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "X"); my_mvaddstr(y + 5, cros0l[5] + p - 1, " || "); } else if ( tt % n >= hn && tt % n < n) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "X"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "O"); dirc(y, p); } my_mvaddstr(LINES + 1, COLS + 1, ""); refresh(); usleep((USLEEP_ARG0_TYPE)WAIT_TIME); } for (tt = 0; tt <= 20; ++tt) { for (i = 0; i < D51HIGHT; ++i) { my_mvaddstr(y + i, p + 5, cros3[i]); } for (i = 2; i < D51HIGHT; ++i) { my_mvaddstr(y + i, cros0l[i] + p, cros0[i]); } if ( tt % n >= 0 && tt % n < hn) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "O"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "X"); my_mvaddstr(y + 5, cros0l[5] + p - 1, " || "); } else if ( tt % n >= hn && tt % n < n) { my_mvaddstr(y + 4, cros0l[5] + p - 1, "X"); my_mvaddstr(y + 4, cros0l[5] + p + 2, "O"); dirc(y, p); } my_mvaddstr(LINES + 1, COLS + 1, ""); refresh(); usleep((USLEEP_ARG0_TYPE)WAIT_TIME); } return 0; }