コード例 #1
0
ファイル: GameHandler.cs プロジェクト: waormd/LANPongServer
 private void stream(String IP)
 {
     while (active) //While game is active, update stream client with game data
     {
         net.sendUDP(message.generateMessage("500", paddleA.ToString(), paddleB.ToString(), bally.ToString(), ballx.ToString(), pointsA.ToString(), pointsB.ToString()), IP);
         Thread.Sleep(40); //Synchronized with gametime
     }
     //Game ended message
     net.sendUDP(message.generateMessage("510", pointsA.ToString(), pointsB.ToString()), IP);
 }
コード例 #2
0
        public void processMessage(String message)
        {
            if (message != null)                                    //if there is a message
            {
                String temp = message.Substring(0, 3);              //Take message code
                message = message.Substring(4, message.Length - 4); //remove message code from message

                if (temp.Equals("105"))                             //Server Discovery
                {
                    String[] temp2 = message.Split(' ');
                    String   IP    = temp2[0];
                    System.Diagnostics.Debug.WriteLine(IP);
                    network.sendUDP(generateMessage("106", NetCons.IPString), IP); //Return server IP to sender
                }

                if (temp.Equals("100"))                  //Join lobby
                {
                    String[] temp2 = message.Split(' '); //Separate message
                    String   IP    = temp2[1];
                    String   alias = temp2[0];
                    if (player.FirstOrDefault(o => o.alias.Equals(temp2[0])) == null) //Checks alias not taken
                    {
                        player.Add(new playerInfo(IP, alias));                        //Adds to player base
                        bindPlayers.ResetBindings(false);                             //Updates list
                    }
                }

                else if (temp.Equals("110"))                                              //Leave lobby
                {
                    var tempPlayer = player.FirstOrDefault(o => o.alias.Equals(message)); //finds record which matches alias
                    if (tempPlayer != null)                                               //if it has found a player / stops duplicate message causing issue
                    {
                        network.broadcastUDP(generateMessage("205", tempPlayer.alias));   //notify clients
                        player.Remove(tempPlayer);                                        //deletes the record
                        bindPlayers.ResetBindings(false);                                 //update list
                    }
                }

                else if (temp.Equals("120"))                                                  //game invite
                {
                    String[] tempAliases = message.Split();                                   //Split message
                    String   tempA       = tempAliases[0];
                    String   tempB       = tempAliases[1].Trim();                             //Trim any trailing space
                    var      infoB       = player.FirstOrDefault(o => o.alias.Equals(tempB)); //get details to send to
                    network.sendUDP(generateMessage("210", tempA, tempB), infoB.IP);          //send game invite to recipient
                }
                else if (temp.Equals("130"))                                                  //game accept
                {
                    String[] tempInfo = message.Split();
                    String   tempA    = tempInfo[0];
                    String   tempB    = tempInfo[1].Trim();
                    var      infoA    = player.FirstOrDefault(o => o.alias.Equals(tempA)); //find records
                    var      infoB    = player.FirstOrDefault(o => o.alias.Equals(tempB));
                    //Get game ports
                    int      portA = getGamePort();
                    int      portB = getGamePort();
                    int      portC = getGamePort();
                    int      portD = getGamePort();
                    GameCons net   = new GameCons(portA, portB); //Set up GameCons instances
                    GameCons net2  = new GameCons(portC, portD);
                    //Notify clients to start games with all relevant data
                    network.sendUDP(generateMessage("320", "A", portA.ToString(), portB.ToString(), tempB), infoA.IP);
                    network.sendUDP(generateMessage("320", "B", portC.ToString(), portD.ToString(), tempA), infoB.IP);
                    //Create game instance and add to list
                    game.Add(new GameHandler(net, net2, tempA, tempB, infoA.IP, infoB.IP));
                    bindGames.ResetBindings(false); //update listbox
                }
                else if (temp.Equals("140"))        //broadcast message to chat
                {
                    String[] tempChat    = message.Split();
                    String   tempA       = tempChat[0];
                    int      tempInt     = tempA.Length + 1;                          //find start index of message for substring
                    String   tempMessage = message.Substring(tempInt);
                    network.broadcastUDP(generateMessage("220", tempA, tempMessage)); //broadcast to all clients
                }
                else if (temp.Equals("150"))                                          //private message
                {
                    String[] tempChat    = message.Split();
                    String   tempA       = tempChat[0];
                    String   tempB       = tempChat[1].Trim();
                    int      tempInt     = tempA.Length + tempB.Length + 2;                   //find start index of message for substring
                    String   tempMessage = message.Substring(tempInt);
                    var      infoB       = player.FirstOrDefault(o => o.alias.Equals(tempB)); //get details to send to
                    System.Diagnostics.Debug.WriteLine(infoB.IP);
                    //Send to recipient
                    network.sendUDP(generateMessage("230", tempA, tempMessage), infoB.IP);
                }
                else if (temp.Equals("160")) //begin stream
                {
                    String[] tempChat = message.Split();
                    String   IP       = tempChat[0];
                    String   tempA    = tempChat[1].Trim();
                    String   tempB    = tempChat[2].Trim();
                    //find game
                    var getInstance = game.FirstOrDefault(o => o.playerA.Equals(tempA) && o.playerB.Equals(tempB)); //get details to send to
                    //Start streaming to senders IP
                    getInstance.streamMatch(IP);
                }
            }
        }