Exemplo n.º 1
0
        /// <summary>
        /// Process messages sent to the server by various clients
        /// such as chat messages, new players, etc.
        /// </summary>
        private void ProcessServerMessages()
        {
            SpiderMessage msg = null;

            while ((msg = server.GetNextMessage()) != null)
            {
                //server message check
                Console.Out.WriteLine("+" + msg.Label + "+");
                Console.Out.WriteLine("+" + msg.Data.ToString() + "+");
                switch (msg.Label)
                {
                case "chat":
                    //bounce the message
                    Console.Out.WriteLine("bouncing the message");
                    server.SendMessage(msg, Lidgren.Library.Network.NetChannel.ReliableUnordered);
                    break;

                case "name":
                    //newly connected player is identifying himself
                    server.AddPlayer(msg.IP, (string)msg.Data, idTicketCounter);
                    playersNotReady.Add(((String)msg.Data) + " [" + msg.IP + "]");

                    // reply with a player identifier
                    SpiderMessage responseMsg = new SpiderMessage(idTicketCounter, SpiderMessageType.Int, "id");
                    idTicketCounter++;
                    server.SendMessage(responseMsg, NetChannel.Ordered1, msg.Connection);

                    // update the player list
                    SendPlayerList();

                    btnStart.Enabled = false;
                    break;

                case "ready":
                    Console.Out.WriteLine("value : " + msg.Data);

                    //player is ready
                    if (((int)msg.Data) == 1)
                    {
                        for (int i = 0; i < playersNotReady.Count; i++)
                        {
                            Console.Out.WriteLine(((String)playersNotReady[i]) + " ---- " + ((String)playersNotReady[i]).IndexOf(msg.IP.ToString()));
                            if (((String)playersNotReady[i]).IndexOf(msg.IP.ToString()) != -1)
                            {
                                String temp = (String)playersNotReady[i];
                                playersNotReady.RemoveAt(i);
                                playersReady.Add(temp);
                                break;
                            }
                        }
                    }

                    //player is not ready
                    else
                    {
                        for (int i = 0; i < playersReady.Count; i++)
                        {
                            if (((String)playersReady[i]).IndexOf(msg.IP.ToString()) != -1)
                            {
                                String temp = (String)playersReady[i];
                                playersReady.RemoveAt(i);
                                playersNotReady.Add(temp);
                                break;
                            }
                        }
                    }

                    //enable or disable start button depending on readiness
                    if (playersNotReady.Count == 0)
                    {
                        Console.Out.WriteLine("ready");
                        btnStart.Enabled = true;
                    }
                    else
                    {
                        Console.Out.WriteLine("not ready");
                        btnStart.Enabled = false;
                    }
                    break;

                default:
                    break;
                }
            }
        }