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; }
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; }