示例#1
0
        static void Main(string[] args)
        {
            var WebSocketClientManager = new Dictionary <IWebSocketConnection, Player>();

            IWebSocketServer gameServer = new WebSocketServer("ws://0.0.0.0:8765");

            gameServer.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Open!");
                    Console.WriteLine("detail: " + socket.ConnectionInfo.Id);
                };
                socket.OnClose = () =>
                {
                    if (WebSocketClientManager.Remove(socket, out Player pl))
                    {
                        //pl.playerWebsocketList.Remove(socket);
                        pl.AllConnections.Remove(socket);
                        if (pl.AllConnections.Count < 1)
                        {
                            pl.playerRoom.removePlayer(pl);
                        }
                        Console.WriteLine("WebsocketManager count: {0}", WebSocketClientManager.Count);
                    }
                };

                socket.OnMessage = message =>
                {
                    //Console.WriteLine(message);

                    try
                    {
                        // https://weblog.west-wind.com/posts/2012/Aug/30/Using-JSONNET-for-dynamic-JSON-parsing
                        Player pl       = JsonConvert.DeserializeObject <Player>(message);
                        dynamic expando = JsonConvert.DeserializeObject <ExpandoObject>(message);
                        //JOIN_OR_CREATE_ROOM_CLIENT_to_SERVER
                        if (expando.msgEvent == StaticEvent.JOIN_OR_CREATE_ROOM_CLIENT_to_SERVER)
                        {
                            if (pl != null)
                            {
                                Player player = StaticEvent.CreateOrJoin_Handler(pl, socket);
                                WebSocketClientManager.TryAdd(socket, player);
                                Console.WriteLine("WebsocketManager count: {0} Room {1}", WebSocketClientManager.Count, player.playerRoom.ID);
                            }
                        }
                        if (expando.msgEvent == StaticEvent.START_NEW_GAME_CLIENT_to_SERVER)
                        {
                            Console.WriteLine("Iam here..");
                            // Get player, room from socket
                            Player player;
                            WebSocketClientManager.TryGetValue(socket, out player);
                            Room room = player.playerRoom;

                            Console.WriteLine("In room {0} and player {1}", room.Name, player.playerName);
                            room.StartGame(player);
                        }
                        //PLACING_CARD_CLIENT_to_SERVER
                        if (expando.msgEvent == StaticEvent.PLACING_CARD_CLIENT_to_SERVER)
                        {
                            Player player;
                            WebSocketClientManager.TryGetValue(socket, out player);
                            Room room = player.playerRoom;
                            Console.WriteLine("Player {0} placing card {1}", player.playerName, expando.cardVal);
                            room.PlacingCard(player, (int)expando.cardVal);
                        }
                        //TAKE_CARD_FROM_DESK_CLIENT_to_SERVER
                        if (expando.msgEvent == StaticEvent.TAKE_CARD_FROM_DESK_CLIENT_to_SERVER)
                        {
                            Player player;
                            WebSocketClientManager.TryGetValue(socket, out player);
                            Room room = player.playerRoom;
                            Console.WriteLine("Player {0} need a new Card", player.playerName);
                            room.TakeNewCard(player);
                        }
                        //
                        if (expando.msgEvent == StaticEvent.TAKE_CARD_FROM_OTHER_CLIENT_to_SERVER)
                        {
                            Player player;
                            WebSocketClientManager.TryGetValue(socket, out player);
                            Room room = player.playerRoom;
                            Console.WriteLine("Player {0} earn Card form other", player.playerName);
                            room.EarnCardFromOther(player);
                        }
                    }
                    catch (Exception ext)
                    {
                        Console.WriteLine(ext.ToString());
                    }
                };
            });

            var input = Console.ReadLine();

            while (input != "exit")
            {
                input = Console.ReadLine();
            }
        }