Esempio n. 1
0
 //TODO: test
 public static ValueResult <string> GetRemoteServerIp(Room room)
 {
     try {
         var responseData = WebService.Post <IpResponse, StartGameRequest>(
             $"{MASTER_IP}/start_game/",
             new StartGameRequest(PRIVATE_KEY, room));
         if (!responseData.success)
         {
             return(new ValueResult <string>(responseData.error));
         }
         return(ValueResult <string> .BuildResult(true, responseData.ip));
     }
     catch (Exception ex) {
         return(new ValueResult <string>(ex.ToString()));
     }
 }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            var s = new Server <HBPlayer>(8001);

            s.AddHandler((int)MessageType.CREATE_ROOM, (player, msg, client) => Task.Run(() =>
            {
                var request          = msg.ToObject <CreateRoomRequest>();
                request.Player       = player;
                var validationResult = request.Valdate();
                if (validationResult.Success)
                {
                    request.Process();
                }
                s.Send(new Response((int)MessageType.CREATE_ROOM, player, validationResult));
            }));
            s.AddHandler((int)MessageType.JOIN_ROOM, (player, msg, client) => Task.Run(() =>
            {
                var request          = msg.ToObject <JoinRoomRequest>();
                request.Player       = player;
                var validationResult = request.Valdate();
                if (validationResult.Success)
                {
                    request.Process();
                }
                s.Send(new Response((int)MessageType.JOIN_ROOM, player, validationResult));
            }));
            s.AddHandler((int)MessageType.LEAVE_ROOM, (player, msg, client) => Task.Run(() =>
            {
                var request          = msg.ToObject <LeaveRoomRequest>();
                request.Player       = player;
                var validationResult = request.Valdate();
                if (validationResult.Success)
                {
                    request.Process();
                }
                s.Send(new Response((int)MessageType.LEAVE_ROOM, player, validationResult));
            }));
            s.AddHandler((int)MessageType.START_GAME, (player, msg, client) => Task.Run(() =>
            {
                var request          = msg.ToObject <StartGameRequest>();
                request.Player       = player;
                var validationResult = request.Valdate();
                if (validationResult.Success)
                {
                    var processResult = request.Process();
                    if (processResult.Success)
                    {
                        var room = RoomManager.RemoveRoom(player.RoomToken);
                        s.Send(new StartGameResponse(room.Owner, processResult));
                        s.Send(new StartGameResponse(room.Other, processResult));
                    }
                    else
                    {
                        s.Send(new StartGameResponse(player, processResult));
                    }
                }
                else
                {
                    s.Send(new StartGameResponse(player, validationResult));
                }
            }));
            s.AddHandler((int)MessageType.SHOW_ROOMS, (player, msg, client) => Task.Run(() =>
            {
                var request          = msg.ToObject <ShowRoomsRequest>();
                request.Player       = player;
                var validationResult = request.Valdate();
                if (validationResult.Success)
                {
                    var processResult = request.Process();
                    s.Send(new RoomListResult(player, processResult));
                }
                else
                {
                    s.Send(new RoomListResult(player, validationResult));
                }
            }));
            RoomManager.opponentLeaved = (owner) =>
            {
                s.Send(new Response((int)MessageType.OPPONENT_LEAVED, owner, Result.Ok));
            };
            RoomManager.playerJoined = (owner, oponent) =>
            {
                s.Send(new Response((int)MessageType.PLAYER_JOINED, owner, ValueResult <string> .BuildResult(true, oponent.Token)));
            };
            RoomManager.roomClosed = (opponent) =>
            {
                s.Send(new Response((int)MessageType.ROOM_CLOSED, opponent, Result.Ok));
            };
            var t = new Timer((o) => { s.Tick().Wait(); });

            t.Change(10, 10);
            s.StartListener().Wait();
        }