Exemplo n.º 1
0
int main()
{
    USHORT port = DEFAULT_PORT;
    USHORT remotePort = DEFAULT_PORT;  // Remote port number
    int newPort = DEFAULT_PORT;
    int protocol;           // TCP or UDP
    char remoteIP[16];      // Remote IP address as dotted quad; nnn.nnn.nnn.nnn
    char localIP[16];       // Local IP address as dotted quad; nnn.nnn.nnn.nnn
    char netbuf[BUFSIZE];   // network receive
    char keybuf[BUFSIZE];   // keyboard input
    int error     = netNS::NET_OK; 
    int lastError = netNS::NET_OK; 
    int sizeXmit=0;         // transmit size
    int sizeRecv=0;         // receive size
    int size=0;
    Net net;                // Network communication object
    netbuf[0] = '\0';

    // ----- create server -----
    do
    {
        // display protocol menu
        cout << "----- Chat Server -----\n"
             << "\nSelect Protocol\n"
             << "    0 = UDP\n"
             << "    1 = TCP\n\n"
             << "  Choice: ";
        cin >> protocol;    // get character
    }while(protocol != 0 && protocol != 1);
    cin.ignore();

    // get port number
    //     Port numbers 0-1023 are used for well-known services.
    //     Port numbers 1024-65535 may be freely used.
    do
    {
        cout << "Enter port number (Use 0 for default 48161): ";
        cin >> newPort;
    }while(newPort < 0 || newPort > 65535);
    if(newPort != 0)
        port = newPort;
    cin.ignore();

    // create server
    error = net.createServer(port, protocol);
    if(error != netNS::NET_OK)          // if error
    {
        cout << net.getError(error) << endl;
        system("pause");
        return 1;
    }

    // display serverIP
    net.getLocalIP(localIP);
    cout << "Server IP is: " << localIP << endl;
    cout << "Server port is: " << port << endl;

    // display incoming text and send back response
    while(true)     // ***** INFINITE LOOP *****
    {
        // check for receive
        sizeRecv = BUFSIZE;     // max bytes to receive
        error = net.readData(netbuf,sizeRecv,remoteIP, remotePort);
        if(error != netNS::NET_OK)
        {
            cout << net.getError(error) << endl;
            error = net.closeSocket();     // close connection
            // re-create server
            error = net.createServer(port, protocol);
            if(error != netNS::NET_OK)          // if error
            {
                cout << net.getError(error) << endl;
                return 1;
            }
        }
        if(sizeRecv > 0)        // if characters received
        {
            // display incomming message
            cout << netbuf << endl;
        }

        // if keyboard input pending
        if (_kbhit())           
        {
            cin.getline(keybuf, BUFSIZE);    // get input
            sizeXmit += (int)cin.gcount() + 1;   // get size of input + null
            if(cin.fail())      // if failbit
            {
                cin.clear();    // clear error
                cin.ignore(INT_MAX, '\n');   // flush input
            }
        }

        // if data ready to send
        if(sizeXmit > 0)
        {
            size = sizeXmit;
            error = net.sendData(keybuf,size,remoteIP,remotePort); // send data
            if(error != netNS::NET_OK)
                cout << net.getError(error) << endl;
            sizeXmit -= size;   // - number of characters sent
            if(sizeXmit < 0)
                sizeXmit = 0;
        }

        // insert 10 millisecond delay to reduce CPU workload
        Sleep(10);
    }

    return 0;
}
Exemplo n.º 2
0
int _tmain(int argc, _TCHAR* argv[])
{		
	int result = EXIT_SUCCESS;
	DOMConfigurator::configure("Log4cxxConfig.xml");
	string input;
	int playerPort;
	int destPort;
	int player = 0;
	Player playerA = Player();
	Player playerB = Player();

	char W[200]  = "W";
	char A[200]  = "A";
	char S[200]  = "S";
	char D[200]  = "D";

	network.initialise();
	//host or client for window title and for log.
	char* applicationName;

	applicationName = "Tag";

    SMALL_RECT windowSize = {0, 0, SCREEN_WIDTH/2, SCREEN_HEIGHT/2};
    SetConsoleWindowInfo(hConsole, TRUE, &windowSize);
		
    
	bool gameOver = false;
	Vector2f mapBoundries = Vector2f(SCREEN_WIDTH, SCREEN_HEIGHT);
	
	
	
	RenderWindow renderWindow(VideoMode(SCREEN_WIDTH/2, SCREEN_HEIGHT, 32), applicationName);
	renderWindow.SetFramerateLimit(30);
	renderWindow.SetSize(SCREEN_WIDTH/2, SCREEN_HEIGHT);
	Shape player1circle = sf::Shape::Circle(Vector2f(0,0), 20.0f, sf::Color::Blue);
	Shape player2circle = sf::Shape::Circle(Vector2f(0,0), 20.0f, sf::Color::Red);



	cout << "Are you player A or B?";
	cin >> input;
	
	if (input == "a" || input == "A")
	{	

		player = 1;
		playerPort = 28000;
		destPort = 28001;
		playerA.setPort(playerPort);
		playerB.setPort(destPort);
		network.setupUDP(28000,_ip);
		LOG4CXX_INFO(loggerMyMain, "Player Binds A" );

	}

	else if (input == "b" || input == "B")
	{	
		
		player = 2;
		playerPort = 28001;
		destPort = 28000;
		playerA.setPort(destPort);
		playerB.setPort(playerPort);
		network.setupUDP(28001,_ip);
		LOG4CXX_INFO(loggerMyMain, "Player Binds B" );

	}

	playerA.setPosition(sf::Vector2f(80,80));
	playerB.setPosition(sf::Vector2f(120,120));

	player1circle.SetPosition(playerA.getPosition());
	player2circle.SetPosition(playerB.getPosition());

	try
	{

		//While the connection is not closed remotely
		while(renderWindow.IsOpened() && !gameOver)
		{		
		
			Event sfmlEvent;
		
			while (renderWindow.PollEvent(sfmlEvent))
			{
				// Close window : exit
				if (sfmlEvent.Type == Event::Closed)
				{
					renderWindow.Close();
				}
				else if (sfmlEvent.Type == Event::KeyPressed)
				{

				      if (sf::Keyboard::IsKeyPressed(sf::Keyboard::W))
					  {			
						if(player == 2)
						{
							playerA.update(1);
						}

						else if(player == 1)
						{
							playerB.update(1);
						}
						network.sendData("127.0.0.1",destPort, "W");
					  }

					  if (sf::Keyboard::IsKeyPressed(sf::Keyboard::A))
					  {			
						if(player == 2)
						{
							playerA.update(2);
						}

						else if(player == 1)
						{
							playerB.update(2);
						}
						network.sendData("127.0.0.1",destPort, "A");
					  }

					  if (sf::Keyboard::IsKeyPressed(sf::Keyboard::S))
					  {			
						if(player == 2)
						{
							playerA.update(3);
						}

						else if(player == 1)
						{
							playerB.update(3);
						}
						network.sendData("127.0.0.1",destPort, "S");
					  }

					  if (sf::Keyboard::IsKeyPressed(sf::Keyboard::D))
					  {			
						  if(player == 2)
						{
							playerA.update(4);
						}

						else if(player == 1)
						{
							playerB.update(4);
						}
						  network.sendData("127.0.0.1",destPort, "D");
					  }


					

					//cout << "Message recieved from, port = " << network.getSenderPort() << ", ip = "<< network.getSenderIP() << endl; 
					//messageRecieved = false;
					}

					if(network.receiveData(message))
					{
					LOG4CXX_INFO(loggerMyMain, message );
					
					if(strcmp(message , W) == 0)
					{		
						LOG4CXX_INFO(loggerMyMain, "Message Recieved" );
						LOG4CXX_INFO(loggerMyMain, message );
							if(player == 1)
							{
								playerA.update(1);
							}

							else if(player == 2)
							{
								playerB.update(1);
							}
					}

					if(strcmp(message , A) == 0)
					{
						LOG4CXX_INFO(loggerMyMain, "Message Recieved" );
						LOG4CXX_INFO(loggerMyMain, message );
							if(player == 1)
							{
								playerA.update(2);
							}

							else if(player == 2)
							{
								playerB.update(2);
							}				

					}

					if(strcmp(message , S) == 0)
					{
						LOG4CXX_INFO(loggerMyMain, "Message Recieved" );
						LOG4CXX_INFO(loggerMyMain, message );
							if(player == 1)
							{
								playerA.update(3);
							}

							else if(player == 2)
							{
								playerB.update(3);
							}
					}

					if(strcmp(message , D) == 0)
					{
						LOG4CXX_INFO(loggerMyMain, "Message Recieved" );
						LOG4CXX_INFO(loggerMyMain, message );
							if(player == 1)
							{
								playerA.update(4);
							}

							else if(player == 2)
							{
								playerB.update(4);
							}

						}


						  
					}
				}

				player1circle.SetPosition(playerA.getPosition());
				player2circle.SetPosition(playerB.getPosition());
			
				renderWindow.Clear();
				renderWindow.Draw(player1circle);
				renderWindow.Draw(player2circle);
				renderWindow.Display();
		}
	
		renderWindow.Close();
	
	

		cout << "Exiting application.\n";
    
	}
    catch(Exception&)
    {
		result = EXIT_FAILURE;
    }	

	
	return result;
}