コード例 #1
0
        public async Task Join(PlayerViewModel request)
        {
            string errorMsg = string.Empty;

            request.ConnectionId = Context.ConnectionId;
            if (!string.IsNullOrEmpty(request.UID))
            {
                var expiredRooms = rooms.Where(r => r.TimeRemain < 300).ToList();
                expiredRooms.ForEach(r => rooms.Remove(r));

                var connectingUser = await PlayerViewModel.JoinGameAsync(request, rooms);

                if (connectingUser.IsSucceed)
                {
                    string ip = Context.Connection.RemoteIpAddress.ToString();
                    connectingUser.Data.IsOnline = true;
                    connectingUser.Data.Ip       = ip;

                    var data = new ConnectViewModel()
                    {
                        Player = connectingUser.Data,
                        Others = PlayerViewModel.Repository.GetModelListBy(p => p.Uid != connectingUser.Data.UID &&
                                                                           p.Room == connectingUser.Data.Room && !string.IsNullOrEmpty(p.ConnectionId)).Data
                    };
                    SendToClient(data, GameReponseKey.Connect, Context.ConnectionId);
                    await UpdateOnlineStatus(connectingUser.Data);
                }
                else
                {
                    await Clients.Client(Context.ConnectionId).SendAsync(receiveMethod, connectingUser);
                }
            }
        }