Пример #1
0
        private void OnClientMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            switch (e.Tag)
            {
            case (ushort)Tags.Tag.SET_NAME:

                // new player registering

                using (Message message = e.GetMessage()) {
                    using (DarkRiftReader reader = message.GetReader()) {
                        string name = reader.ReadString();
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("hey mister " + name);
                        Console.ForegroundColor = ConsoleColor.White;

                        PlayerModel newPlayer = new PlayerModel(e.Client, name);

                        if (pendingPlayer == null)
                        {
                            // new player is pending for a match
                            pendingPlayer = newPlayer;
                        }
                        else
                        {
                            // there is already a pending player. lets start a new match

                            MatchModel match = new MatchModel(pendingPlayer, newPlayer);
                            matches.Add(match.id, match);

                            // report clients of the new match
                            using (DarkRiftWriter writer = DarkRiftWriter.Create()) {
                                writer.Write(match.id);
                                writer.Write(match.CurrentPlayerClientID);
                                using (Message msg = Message.Create((ushort)Tags.Tag.GOT_MATCH, writer)) {
                                    pendingPlayer.Client.SendMessage(msg, SendMode.Reliable);
                                    newPlayer.Client.SendMessage(msg, SendMode.Reliable);
                                }
                            }

                            pendingPlayer = null;
                        }
                    }
                }
                break;

            case (ushort)Tags.Tag.SLATE_TAKEN:

                using (Message message = e.GetMessage()) {
                    using (DarkRiftReader reader = message.GetReader()) {
                        ushort matchId    = reader.ReadUInt16();
                        ushort slateIndex = reader.ReadUInt16();

                        if (matches.ContainsKey(matchId))
                        {
                            MatchModel match = matches[matchId];
                            match.PlayerTakesSlate(slateIndex, e.Client);
                            if (match.MatchOver)
                            {
                                // match is over
                                Console.WriteLine($"match over. had: {matches.Count} matches");
                                matches.Remove(matchId);
                                Console.WriteLine($"match over. now have: {matches.Count} matches");
                            }
                        }
                    }
                }

                break;
            }
        }
        private void OnClientMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            switch (e.Tag)
            {
            case (ushort)Tags.Tag.SET_NAME:

                using (Message message = e.GetMessage())
                {
                    using (DarkRiftReader reader = message.GetReader())
                    {
                        string name = reader.ReadString();
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Hey Mr " + name, ConsoleColor.Red);
                        Console.ForegroundColor = ConsoleColor.White;

                        PlayerModel newPlayer = new PlayerModel(e.Client, name);

                        if (pendingPlayer == null)
                        {
                            pendingPlayer = newPlayer;
                        }
                        else
                        {
                            MatchModel match = new MatchModel(pendingPlayer, newPlayer);
                            matches.Add(match.id, match);


                            using (DarkRiftWriter writer = DarkRiftWriter.Create())
                            {
                                writer.Write(match.id);
                                using (Message msg = Message.Create((ushort)Tags.Tag.GOT_MTACH, writer))
                                {
                                    pendingPlayer.Client.SendMessage(msg, SendMode.Reliable);
                                    newPlayer.Client.SendMessage(msg, SendMode.Reliable);
                                }
                            }

                            pendingPlayer = null;
                        }
                    }
                }

                break;

            case (ushort)Tags.Tag.SLATE_TAKEN:

                using (Message message = e.GetMessage())
                {
                    using (DarkRiftReader reader = message.GetReader())
                    {
                        ushort matchId    = reader.ReadUInt16();
                        ushort slateIndex = reader.ReadUInt16();

                        if (matches.ContainsKey(matchId))
                        {
                            MatchModel match = matches[matchId];
                            match.PlayerTakesSlate(slateIndex, e.Client);
                        }
                    }
                }

                break;
            }
        }