bool FileSystem::sendFileByRange(int connFd, Message_fs msg ) { bool deleteMyCopy = ( (msg.type == MSG_PULL_MV) ? true : false ); logFile<<"sendFileByRange: "<<msg.minKey<<" to "<<msg.maxKey<<endl; std::vector<std::string> toremove; filesLock.lock(); size_t count = 0; for( auto &file : files ){ if( inRange(file.key, msg.minKey, msg.maxKey) ) count++; } msg.size = count; write(connFd, &msg, sizeof(Message_fs)); for( auto &file : files ) { if( inRange(file.key, msg.minKey, msg.maxKey) ) { memset(msg.filename, '\0', 200); file.filename.copy(msg.filename, file.filename.length() ); // cout<<"sendFileByRange: "<<file.filename<<" "<<msg.filename<<endl; logFile<<"sendFileByRange: "<<file.filename<<" rm:"<<deleteMyCopy<<endl; char * buffer; msg.size = readFile(file.filename, &buffer); write(connFd, &msg, sizeof(Message_fs)); splitWrite(connFd, buffer, msg.size); delete buffer; if(deleteMyCopy) { //files.remove( file ); //maintain file list toremove.push_back(file.filename); } } } for (int i = 0; i < toremove.size(); ++i) { if ( deleteFile( toremove.at(i) ) ) { logFile << toremove.at(i) << "deleted" << std::endl; } files.remove(toremove.at(i)); } filesLock.unlock(); return true; }
void convertFill(struct cnFill *fill, struct dnaSeq *tChrom, struct nibTwoCache *qNtc, char *qNibDir, struct chain *chain, FILE *f, FILE *gapFile) /* Convert subset of chain as defined by fill to axt. */ { if (splitOnInsert) splitWrite(fill, tChrom, qNtc, qNibDir, chain, f, gapFile); else writeChainPart(tChrom, qNtc, qNibDir, chain, fill->tStart, fill->tStart + fill->tSize, f, gapFile); }
void convertFill(struct cnFill *fill, struct chain *chain, FILE *f, FILE *gapFile) /* Convert subset of chain as defined by fill to axt. */ { if (type != NULL) { if (!sameString(type, fill->type)) return; } if (splitOnInsert) splitWrite(fill, chain, f, gapFile); else if (wholeChains) writeChainWhole(chain, f, gapFile); else writeChainPart(chain, fill->tStart, fill->tStart + fill->tSize, f, gapFile); }
void FileSystem::listeningThread() { int listenFd = open_socket(port); while(true) { size_t ret; int connFd = listen_socket(listenFd); logFile<<"listeningThread: someone is contacting me... "<< std::endl; Message_fs msg; ret = read(connFd, &msg, sizeof(Message_fs)); std::string filename = msg.filename; //cout<<"listening filename: "<<filename<<endl; char* buffer; if(msg.type == MSG_PUT) { buffer = new char[msg.size]; ret = read(connFd, buffer, msg.size); saveFile(filename, buffer, msg.size); delete buffer; } if(msg.type == MSG_GET) { msg.size = readFile(filename, &buffer); write(connFd, &msg, sizeof(Message_fs)); if (msg.size == 0) { std::cout << "File does not exist" << std::endl; } else { ret = splitWrite( connFd, buffer, msg.size ); delete buffer; } } if(msg.type == MSG_DELETE) { filesLock.lock(); for( auto &file : files ) { if( file.filename.compare(filename) == 0) { files.remove(file); break; } } filesLock.unlock(); deleteFile(filename); } if(msg.type == MSG_PULL_CP || msg.type == MSG_PULL_MV){ sendFileByRange(connFd, msg); } close(connFd); } return; }