int main(int argc, char* argv[]) { FILE *fd = NULL; int rv; // take care of input argument if (argc == 1) { // read input from stdin fd = stdin; } else if (argc == 2) { // read input from script file fd = fopen (argv[1], "r"); // error if (fd == NULL) { fprintf(stderr, "Could not open scriptfile !\n"); return 1; } } else { // error fprintf (stderr, "Usage: GPShell [scriptfile]\n"); return 1; } // launch the command interpreter rv = handleCommands(fd); return 0; }
void WriteStringFile(CString& strFileName, CStringArray& sarray) { #if 0 CStdioFile file; CString strLine; char szCRL[3] = {0x0d, 0x0a,0}; int n; if( !file.Open(strFileName, CFile::modeCreate|CFile::modeReadWrite)) return ; for( n=0;n<sarray.GetSize();n++) { strLine = sarray.GetAt(n); file.WriteString(strLine); file.WriteString(szCRL); } file.Close(); #endif handleCommands(sarray); }
int main(int argc, char **argv){ machine_6502 *machine = build6502(); Bit16 *breaks; breaks = calloc(MAX_BREAK,sizeof(Bit16)); int bpi = 0; if (breaks == NULL){ fprintf(stderr,"Could not allocate enough memory for the break points."); return 1; } if (argc == 1) fprintf(stderr,"usage: debug-6502 filename"); else { start_eval_file(machine,argv[1],NULL,NULL); trace(machine,stdout); while (True) { handleCommands(machine,breaks,&bpi); if (!machine->codeRunning) break; } fprintf(stdout,"The program is finished.\n"); } destroy6502(machine); free(breaks); return 0; }
void Server::run() { init(); handleCommands(); exit(); }
void* rpmain(void* ctSock) { int sd, ct_sd, pc_sd; struct sockaddr_in replyaddr; ct_sd = *((int*)ctSock); if((pc_sd = getSockFromSock(ct_sd)) < 0) { printf("RP: Unable to receive socket to PC.\n"); pthread_exit(NULL); } if((sd = setupSocket(0)) < 0) { printf("RP: Unable to set up socket\n"); pthread_exit(NULL); } if(createAddr(htonl(INADDR_ANY), &replyaddr) == -1) { printf("RP: Unable to set up reply address\n"); pthread_exit(NULL); } while(1) { fd_set set; FD_ZERO(&set); FD_SET(ct_sd, &set); FD_SET(pc_sd, &set); if(select(((ct_sd > pc_sd) ? ct_sd : pc_sd) + 1, &set, NULL, NULL, NULL) == -1) { printf("Select error in RP\n"); close(sd); close(ct_sd); close(pc_sd); pthread_exit(NULL); } if(FD_ISSET(ct_sd, &set)) { switch(handleCommands(ct_sd)) { case 1: printf("rp shutting down.\n"); close(sd); close(ct_sd); close(pc_sd); pthread_exit(NULL); break; case -1: printf("RP:\tError while processing commands.\n"); close(sd); close(ct_sd); close(pc_sd); pthread_exit(NULL); break; } } if(FD_ISSET(pc_sd, &set)) { heartbeat* h; unsigned int len; h = getHeartbeatFromSock(pc_sd); if(h == NULL) { printf("RP:\tError while fetching heartbeat from PC\n"); close(sd); close(pc_sd); close(ct_sd); pthread_exit(NULL); } response* r = craftResponse(h); if(r == NULL) { printf("RP:\tError while crafting response\n"); close(sd); close(pc_sd); close(ct_sd); pthread_exit(NULL); } char* b = serializeResponse(r, &len); if(b == NULL) { printf("RP:\nError serializing response\n"); close(sd); close(pc_sd); close(ct_sd); pthread_exit(NULL); } ssize_t rc = sendto(sd, b, len, 0, (struct sockaddr*)&replyaddr, sizeof(replyaddr)); freeHeartbeat(h); free(r); free(b); if(rc < 0) { perror("sendto error"); close(sd); close(pc_sd); close(ct_sd); pthread_exit(NULL); } } } }
//In here makes whole scripts except autorun. void MakeCommonSubScript(CStringArray& sarray, int nType) { CString strTemp; ////////////////////////////////////////////////////////////////////////// // TRACE CARD if(nType == 0) { //Make Trace file -1 sarray.Add(_T("mode_211")); sarray.Add(_T("enable_trace")); sarray.Add(_T("enable_timer")); sarray.Add(_T("establish_context")); sarray.Add(_T("card_connect")); sarray.Add(_T("select -AID a000000003000000")); sarray.Add(_T("open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f")); sarray.Add(_T("delete -AID 315041592E5359532E444446303101")); sarray.Add(_T("delete -AID 315041592E5359532E4444463031")); sarray.Add(_T("card_disconnect")); sarray.Add(_T("release_context")); //WriteStringFile(m_strTracePath, sarray); handleCommands(sarray); sarray.RemoveAll(); } else if(nType == 1) { //Make Trace file -2 sarray.Add(_T("mode_211")); sarray.Add(_T("enable_trace")); sarray.Add(_T("enable_timer")); sarray.Add(_T("establish_context")); sarray.Add(_T("card_connect")); sarray.Add(_T("select -AID a000000003000000")); sarray.Add(_T("open_sc -scp 2 -scpimpl 0x15 -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f")); sarray.Add(_T("delete -AID 315041592E5359532E444446303101")); sarray.Add(_T("delete -AID 315041592E5359532E4444463031")); sarray.Add(_T("card_disconnect")); sarray.Add(_T("release_context")); //WriteStringFile(m_strTracePath, sarray); handleCommands(sarray); sarray.RemoveAll(); } ////////////////////////////////////////////////////////////////////////// // INSTALL CARD else if(nType == 2) { //Make Install card -1 sarray.Add(_T("mode_211")); sarray.Add(_T("enable_trace")); sarray.Add(_T("enable_timer")); sarray.Add(_T("establish_context")); sarray.Add(_T("card_connect")); sarray.Add(_T("select -AID a000000003000000")); sarray.Add(_T("open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f")); //strTemp.Format(_T("install -file %s\\mac.dat -priv 4"),m_strWorkPath); strTemp.Format(_T("install -file mac.dat -priv 4")); sarray.Add(_T(strTemp)); sarray.Add(_T("card_disconnect")); sarray.Add(_T("release_context")); //WriteStringFile(m_strInstaladorPath, sarray); handleCommands(sarray); sarray.RemoveAll(); } else if(nType == 3) { //Make Install card -2 sarray.Add(_T("mode_211")); sarray.Add(_T("enable_trace")); sarray.Add(_T("enable_timer")); sarray.Add(_T("establish_context")); sarray.Add(_T("card_connect")); sarray.Add(_T("select -AID a000000003000000")); sarray.Add(_T("open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f")); //strTemp.Format(_T("install -file %s\\mac2.dat -priv 4"),m_strWorkPath); strTemp.Format(_T("install -file mac2.dat -priv 4")); sarray.Add(_T(strTemp)); sarray.Add(_T("card_disconnect")); sarray.Add(_T("release_context")); //WriteStringFile(m_strInstaladorPath, sarray); handleCommands(sarray); sarray.RemoveAll(); } else if(nType == 4) { //Make Install card -3 sarray.Add(_T("mode_211")); sarray.Add(_T("enable_trace")); sarray.Add(_T("enable_timer")); sarray.Add(_T("establish_context")); sarray.Add(_T("card_connect")); sarray.Add(_T("select -AID a000000003000000")); sarray.Add(_T("open_sc -scp 2 -scpimpl 0x15 -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f")); sarray.Add(_T("delete -AID 315041592E5359532E444446303101")); sarray.Add(_T("delete -AID 315041592E5359532E4444463031")); //strTemp.Format(_T("install -file %s\\mac.dat -priv 4"),m_strWorkPath); strTemp.Format(_T("install -file mac.dat -priv 4")); sarray.Add(_T(strTemp)); sarray.Add(_T("card_disconnect")); sarray.Add(_T("release_context")); //WriteStringFile(m_strInstaladorPath, sarray); handleCommands(sarray); sarray.RemoveAll(); } else if(nType == 5) { //Make Install card -4 sarray.Add(_T("mode_211")); sarray.Add(_T("enable_trace")); sarray.Add(_T("enable_timer")); sarray.Add(_T("establish_context")); sarray.Add(_T("card_connect")); sarray.Add(_T("select -AID a000000003000000")); sarray.Add(_T("open_sc -scp 2 -scpimpl 0x15 -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f")); sarray.Add(_T("delete -AID 315041592E5359532E444446303101")); sarray.Add(_T("delete -AID 315041592E5359532E4444463031")); //strTemp.Format(_T("install -file %s\\mac2.dat -priv 4"),m_strWorkPath); strTemp.Format(_T("install -file mac2.dat -priv 4")); sarray.Add(_T(strTemp)); sarray.Add(_T("card_disconnect")); sarray.Add(_T("release_context")); //WriteStringFile(m_strInstaladorPath, sarray); handleCommands(sarray); sarray.RemoveAll(); } }
void Game::play(string path) { pathTest=path; ini(); //SDL_EnableKeyRepeat(10, 0); playLoop=true; fadingToLeave=false; while (playLoop) { if(m_chat.boxOpened()) m_chat.checkKeyboard(); else while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: fadingToLeave=true; playLoop=false; command="quit"; break; case SDL_MOUSEMOTION: m_camera.onMouseMotion(event.motion); break; case SDL_MOUSEBUTTONUP: if(event.button.button==SDL_BUTTON_LEFT) { if(m_mode=="play") { if(playerList[0]->getLife()>0) { Vector3D dir=(m_camera.getTarget()-(playerList[0]->getPos()+Vector3D(0,0,1))).normalize(); if(castSpell(playerList[0],"rope",dir)) { infosSocket s; s.confirmationID=-1; s.type=2; s.variable[1]=playerList[0]->getPos().X; s.variable[2]=playerList[0]->getPos().Y; s.variable[3]=playerList[0]->getPos().Z; s.variable[4]=dir.X; s.variable[5]=dir.Y; s.variable[6]=dir.Z; m_online->sendSocket(s);//add socket to queue } } } else if(m_mode=="spectate") { switchSpectate(1); } } if(event.button.button==SDL_BUTTON_RIGHT) { if(m_mode=="play") { if(playerList[0]->getLife()>0) { playerList[0]->unlinkRope(); infosSocket s; s.confirmationID=-1; s.type=3; m_online->sendSocket(s);//add socket to queue } } else if(m_mode=="spectate") { switchSpectate(-1); } } if(event.button.button==SDL_BUTTON_WHEELUP) { Video::getInstance()->incrFOV(1); } if(event.button.button==SDL_BUTTON_WHEELDOWN) { Video::getInstance()->incrFOV(-1); } break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_KP_ENTER: if(m_chat.active()) m_chat.openTextBox(playerList[0]->getIdOnline(),0.1); break; case SDLK_RETURN: if(m_chat.active()) m_chat.openTextBox(playerList[0]->getIdOnline(),0.1); break; case SDLK_a: playerList[0]->pressKey(LEFT,true); break; case SDLK_d: playerList[0]->pressKey(RIGHT,true); break; case SDLK_w: playerList[0]->pressKey(UP,true); break; case SDLK_s: playerList[0]->pressKey(DOWN,true); break; case SDLK_e: playerList[0]->pressKey(KEY_E,true); break; case SDLK_SPACE: if(playerList[0]->getLife()>0) { if(shiftPushed) { if(castSpell(playerList[0],"longjump")) { infosSocket s; s.confirmationID=-1; s.type=15; s.variable[1]=playerList[0]->getPos().X; s.variable[2]=playerList[0]->getPos().Y; s.variable[3]=playerList[0]->getPos().Z; m_online->sendSocket(s);//add socket to queue } } else castSpell(playerList[0],"jump"); } break; case SDLK_LSHIFT: playerList[0]->setGasing(true); shiftPushed=true; break; default: break; } break; case SDL_KEYUP: switch(event.key.keysym.sym) { case SDLK_KP_ENTER: if(m_chat.active()) m_chat.enterUp(); break; case SDLK_RETURN: if(m_chat.active()) m_chat.enterUp(); break; case SDLK_ESCAPE: fadingToLeave=true; command="menu"; break; case SDLK_a: playerList[0]->pressKey(LEFT,false); break; case SDLK_d: playerList[0]->pressKey(RIGHT,false); break; case SDLK_w: playerList[0]->pressKey(UP,false); break; case SDLK_s: playerList[0]->pressKey(DOWN,false); break; case SDLK_e: playerList[0]->pressKey(KEY_E,false); break; case SDLK_r: if(playerList.size()==1 && (!Online::getInstance()->active() || Online::getInstance()->inControl()))//if youre alone its ok { infosSocket s; s.confirmationID=m_online->nextConfirmationID(); s.type=6; m_online->sendSocket(s);//add socket to queue Map::getInstance()->restart(); Interface::getInstance()->setTarget(playerList[0]); m_camera.setCible(playerList[0]); m_camera.setMode("play"); m_mode="play"; m_chat.newMessage("Map reset.",-2); } break; case SDLK_k: break; case SDLK_c: if(grabCursor) { SDL_ShowCursor(SDL_ENABLE);//pas de curseur SDL_WM_GrabInput(SDL_GRAB_OFF); grabCursor=false; } else { SDL_ShowCursor(SDL_DISABLE);//pas de curseur SDL_WM_GrabInput(SDL_GRAB_ON); grabCursor=true; } break; case SDLK_LSHIFT: playerList[0]->setGasing(false); shiftPushed=false; break; case SDLK_SPACE: if(playerList[0]->getLife()>0) { if(shiftPushed) { if(castSpell(playerList[0],"longjump")) { infosSocket s; s.confirmationID=-1; s.type=15; s.variable[1]=playerList[0]->getPos().X; s.variable[2]=playerList[0]->getPos().Y; s.variable[3]=playerList[0]->getPos().Z; m_online->sendSocket(s);//add socket to queue } } else castSpell(playerList[0],"jump"); } break; default: break; } break; } } //update stuff updateTimes(); updateMultiplayer(); m_online->update(); Gsounds::getInstance()->update(m_camera.getPos().toLeft(),Vector3D(0,0,0),m_camera.getDir().toLeft(),Vector3D(0,0,1)); m_video->update(ft); Map::getInstance()->update(ft); Effects::getInstance()->update(ft); Tracer::getInstance()->traceCerr("debug","1"); Interface::getInstance()->setMode(m_mode); Interface::getInstance()->update(ft); handleCommands(); handleTracer(); Tracer::getInstance()->traceCerr("debug","2"); updateCamMode(); //you just died if(playerList[0]->getLife()<=0 && !alreadyDead) { alreadyDead=true; Interface::getInstance()->warning("../data/textures/interface/warning/died.png",0.03); //send chat msg stringstream ss; int dc=playerList[0]->getDeathCause(); if(dc==0) ss << playerList[0]->getOnlineName() << " mysteriously died."; else if(dc==1) ss << playerList[0]->getOnlineName() << " burned to death."; else if(dc==2) ss << playerList[0]->getOnlineName() << " committed suicide."; else if(dc==3) ss << playerList[0]->getOnlineName() << " exploded in pieces."; char* tempChar=stringtochar(ss.str()); m_chat.newMessage(tempChar,-2); delete tempChar; } else if(playerList[0]->getLife()>0) alreadyDead=false; Tracer::getInstance()->traceCerr("debug","3"); //endlevel if(checkEndLevel()) endLevel(); //crosshair Map::getInstance()->simulateRopeForCrosshair(playerList[0], (m_camera.getTarget()-(playerList[0]->getPos()+Vector3D(0,0,1))).normalize(), Interface::getInstance()->getCrosshair()); draw(); m_video->afterDraw(); //fps calcul m_fps++; m_fpsTime.couler(); if(m_fpsTime.ecouler(1000)) { Interface::getInstance()->setFPS(m_fps); m_fps=0; m_fpsTime.reset(); } Tracer::getInstance()->traceCerr("debug","8"); SDL_Delay(10); if(fadingToLeave) { if(Video::getInstance()->getFade()->getFading()==false) { Video::getInstance()->getFade()->setR(0); Video::getInstance()->getFade()->setG(0); Video::getInstance()->getFade()->setB(0); Video::getInstance()->getFade()->startFadeIn(); } if(Video::getInstance()->getFade()->getAlpha()>=1) { playLoop=false; fadingToLeave=false; } } } close(); }
void Game::update(sf::Time timeElapsed) { bool testBool = true; if(*m_GameState == EnumStore::GAME_STATE::IN_GAME) { if(Controller::getInstance()->actionZoomOut()) { m_Camera->jumpToZoom(0, sf::Vector2f(0,0)); m_Camera->setUpSlowZoom(60, player->getPosition(), 1); } m_Camera->update(player->getPosition(), timeElapsed); m_inventory->update(); player->update(timeElapsed); m_lighting.update(player->getPosition(), player->getSize()); sf::Joystick::update(); m_messanger->update(timeElapsed, m_GameState); AudioManager::getInstance()->updateRequests(); m_EnviermentItemManager.update(timeElapsed); if(m_LevelManager->getLevelSet() > m_currentLevel) { m_Camera->jumpToZoom(0 , sf::Vector2f(0,0)); m_Camera->setUpSlowZoom(60, player->getPosition(), 4); m_LevelManager->buildTiledLevel(1); } m_currentLevel = m_LevelManager->getLevelSet(); ScoreManager::getInstance()->updateTime(timeElapsed); m_messanger->updateClock(ScoreManager::getInstance()->getCurrentLevelTime()); if(Controller::getInstance()->actionMenu()) { m_Camera->jumpToZoom(0, sf::Vector2f(0,0)); *m_GameState = EnumStore::GAME_STATE::IN_PAUSE_MENU; } handleCommands(); } else if(*m_GameState == EnumStore::GAME_STATE::IN_INVENTORY) { m_inventory->update(); m_messanger->update(timeElapsed, m_GameState); } else if(*m_GameState == EnumStore::GAME_STATE::IN_MAIN_MENU || *m_GameState == EnumStore::GAME_STATE::IN_PAUSE_MENU || *m_GameState == EnumStore::GAME_STATE::NAMEWRITTER) { MenuManager::getInstance()->inMenuUpdate(); MenuManager::menuOptions currentCall = MenuManager::getInstance()->getOptionCall(); if(currentCall == MenuManager::menuOptions::NewGame) { startNewGame(); } else if(currentCall == MenuManager::menuOptions::ScoreBoard) { *m_GameState = EnumStore::GAME_STATE::SCOREBOARD; } else if(currentCall == MenuManager::menuOptions::Tutorial) { *m_GameState = EnumStore::GAME_STATE::TUTORIAL; } else if(currentCall == MenuManager::menuOptions::Mute) { AudioManager::getInstance()->toggleMute(); } else if(currentCall == MenuManager::menuOptions::Continue) { m_Camera->toggleSnapZoom(); *m_GameState = EnumStore::GAME_STATE::IN_GAME; } else if(currentCall == MenuManager::menuOptions::AcceptName) { m_name = EnterNameScreen::getInstance()->acceptSelection(); *m_GameState = EnumStore::GAME_STATE::IN_MAIN_MENU; } } else if(*m_GameState == EnumStore::GAME_STATE::LOADING) { if(*levelLoaded) { //detachLevelLoadingThread(); *m_GameState = EnumStore::GAME_STATE::IN_GAME; } else { cout << "waiting" << endl; } } MenuManager::getInstance()->updateState(*m_GameState); if(*m_GameState == EnumStore::GAME_STATE::SCOREBOARD) { if(m_previousGameState == EnumStore::GAME_STATE::IN_GAME) { //finished game m_Camera->jumpToZoom(0, sf::Vector2f(0,0)); myInformation.setScore(ScoreManager::getInstance()->getTotalScore()); //ScoreBoard::getInstance()->setMyScore(myInformation); m_inventory->clearInventory(); } //if(Controller::getInstance()->actionAction() || Controller::getInstance()->actionMenuSelect() || Controller::getInstance()->actionMenu()) if(Controller::getInstance()->actionMenu()) { *m_GameState = EnumStore::GAME_STATE::IN_MAIN_MENU; AudioManager::getInstance()->stopMusic(); } } if(*m_GameState == EnumStore::GAME_STATE::TUTORIAL) { if(Controller::getInstance()->actionMenu()) { *m_GameState = EnumStore::GAME_STATE::IN_MAIN_MENU; } } if(m_previousGameState == EnumStore::GAME_STATE::IN_MAIN_MENU && *m_GameState == EnumStore::GAME_STATE::IN_GAME) { *m_gameRestarter = true; } m_previousGameState = *m_GameState; }
int runClient(char *port) { char *name = "Client"; //initialize masterServer, peerList and hostlist peerList = NULL; connectionList = NULL; connectionIdGenerator = 2; //1 is received for the server masterServer = NULL; int listernerSockfd = -1; struct connectionInfo *serverInfo = startServer(port, "CLIENT"); if (serverInfo == NULL) { fprintf(stderr, "Did not get serverInfo from startServer()\n"); return -1; } listernerSockfd = serverInfo->listernerSockfd; int STDIN = 0; //0 represents STDIN FD_ZERO(&masterFDList); // clear the master and temp sets FD_ZERO(&tempFDList); FD_SET(STDIN, &masterFDList); // add STDIN to master FD list fdmax = STDIN; FD_SET(listernerSockfd, &masterFDList); //add the listener to master FD list and update fdmax if (listernerSockfd > fdmax) fdmax = listernerSockfd; int actionComplete = 1; while (1) //keep waiting for input, connections and data { //this is ti identify is an activity is in progress if (actionComplete == 1) { printf("$"); fflush(stdout); //print the terminal symbol } actionComplete = 1; tempFDList = masterFDList; //make a copy of masterFDList and use it as select() modifies the list //int select(int numfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); if (select(fdmax + 1, &tempFDList, NULL, NULL, NULL) == -1) //select waits till it gets data in an fd in the list { fprintf(stderr, "Error in select\n"); return -1; } // an FD has data so iterate through the list to find the fd with data int fd; for (fd = 0; fd <= 20; fd++) { if (FD_ISSET(fd, &tempFDList)) //found the FD with data { if (fd == STDIN) //data from commandLine(STDIN) { size_t commandLength = 50; char *command = (char *) malloc(commandLength); getline(&command, &commandLength, stdin); //get line the variable if space is not sufficient if (stringEquals(command, "\n")) //to handle the stray \n s continue; //printf("--Got data: %s--\n",command); handleCommands(command, "CLIENT"); } else if (fd == listernerSockfd) //new client trying to connect to listener { struct sockaddr_storage clientaddr; socklen_t addrlen = sizeof clientaddr; int clientsockfd; if ((clientsockfd = accept(listernerSockfd, (struct sockaddr *) &clientaddr, &addrlen)) == -1) { fprintf(stderr, "Error accepting connection: %d %s\n", clientsockfd, gai_strerror(clientsockfd)); return -1; } else { //accept connection from client add it to the connectionList struct host *client = (struct host *) malloc(sizeof(struct host)); struct sockaddr *hostAddress = (struct sockaddr *) &clientaddr; client->id = connectionIdGenerator++; client->sockfd = clientsockfd; client->ipAddress = getIPAddress(hostAddress); client->hostName = getHostFromIp(client->ipAddress); client->port = getPort(hostAddress); addNode(&connectionList, client); FD_SET(client->sockfd, &masterFDList); // add fd to fdlist if (client->sockfd > fdmax) fdmax = client->sockfd; printf("Accepted client: %s/%s.\n", client->hostName, client->port); } } else if (masterServer != NULL && fd == masterServer->sockfd)// handle data from server { struct packet *recvPacket = readPacket(fd); if (recvPacket == NULL) { printf("Master Server has terminated unexpectedly.\n"); int connectionId = getIDForFD(connectionList, fd); terminateConnection(connectionId); masterServer = NULL; peerList = NULL; continue; } // printf("Received packet: "); // printPacket(recvPacket); // printf("\n"); //received terminate from server if (recvPacket->header->messageType == terminate) { printf("Received TERMINATE command from server.\n"); int connectionId = getIDForFD(connectionList, fd); terminateConnection(connectionId); peerList = NULL; masterServer = NULL; continue; } if (recvPacket->header->messageType == hostList) { //split the hostlist int length = 0; char **hostinfo = splitString(recvPacket->message, ' ', &length); free(peerList); peerList = NULL; //destroy the old peerList int i; for (i = 0; i < length; i = i + 2) { if (i + 1 >= length) fprintf(stderr, "Disproportionate terms in hostList sent by server.\n"); if (stringEquals(myIpAddress, hostinfo[i]) && stringEquals(myListenerPort, port)) { //this is so that the client doesn't add itself in the peerList continue; } //add all nodes struct host *peer = (struct host *) malloc(sizeof(struct host)); peer->sockfd = -1; // we do not have a connection with it yet peer->ipAddress = hostinfo[i]; peer->hostName = getHostFromIp(peer->ipAddress); peer->port = hostinfo[i + 1]; addNode(&peerList, peer); } printf("New peerList received from server:\n"); printPeerList(peerList); continue; } if (recvPacket->header->messageType == syncFiles) { printf("Received a sync initiate request from Server.\n"); syncHostnameFiles(); continue; } } else { //handle data from the peers struct packet *recvPacket = readPacket(fd); if (recvPacket == NULL) { //one of the clients terminated unexpectedly int id = getIDForFD(connectionList, fd); struct host *host = getHostByID(connectionList, id); printf("%s/%s terminated unexpectedly. Removing it from the list.\n", host->hostName, host->port, host->sockfd); terminateConnection(id); continue; } // printf("Received packet: "); // printPacket(recvPacket); // printf("\n"); //received terminate if (recvPacket->header->messageType == terminate) { int id = getIDForFD(connectionList, fd); struct host *source = getHostByID(connectionList, id); printf("Received TERMINATE command from %s/%s. Removing it.\n", source->hostName, source->port); terminateConnection(id); continue; }//handle error message else if (recvPacket->header->messageType == error) { printf("Received error message: %s\n", recvPacket->message); continue; }//handle get request else if (recvPacket->header->messageType == get) { int connectionId = getIDForFD(connectionList, fd); struct host *destination = getHostByID(connectionList, connectionId); if (destination == NULL) { fprintf(stderr, "Coudn't find the connection id.\n"); continue; } printf("Received a get request for file %s from client: %s/%s.\n", recvPacket->header->fileName, destination->hostName, destination->port); sendFile(connectionId, recvPacket->header->fileName); }//hand a put packet else if (recvPacket->header->messageType == put) { int connectionId = getIDForFD(connectionList, fd); receiveFileAsynchronously(connectionId, recvPacket); actionComplete = 0; //action is not complete until a ok packet is received continue; }//handle a ok packet else if (recvPacket->header->messageType == ok) { int connectionId = getIDForFD(connectionList, fd); okPacketHandler(connectionId, recvPacket); actionComplete = 1; // activity completed continue; } } } } } }