Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);


}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
void Server::run()
{
    init();
    handleCommands();
    exit();
}
Exemplo n.º 5
0
Arquivo: rp.c Projeto: CWood1/DDMP
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);
			}
		}
	}
}
Exemplo n.º 6
0
//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();
	}


}
Exemplo n.º 7
0
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();
}
Exemplo n.º 8
0
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;

}
Exemplo n.º 9
0
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;
                    }

                }
            }
        }
    }
}