Esempio n. 1
0
        async public Task <APIReturn> Sitdown([FromForm] int deskId, [FromForm] int pos)
        {
            await CheckPlayer();

            var desk = await Desk.FindAsync(deskId);

            if (desk == null || pos < 1 || pos > 3)
            {
                throw new Exception("桌位或座位不存在");
            }
            await Standup();

            var sitdowned = redis.HGet <Player>("sitdown_ht", $"{desk.Id}_{pos}");

            if (sitdowned != null && sitdowned.Id != CurrentPlayer.Id)
            {
                throw new Exception("该桌位已被其他用户坐下");
            }
            if (!redis.HSetNx("sitdown_ht", $"{desk.Id}_{pos}", CurrentPlayer))
            {
                throw new Exception("该桌位已被其他用户坐下");
            }
            redis.HSet("sitdown_player_ht", CurrentPlayer.Id.ToString(), $"{desk.Id}_{pos}");
            //通知消息,坐位有用户坐下
            ImHelper.SendChanMessage(Guid.Empty, "ddz_chan", new
            {
                type   = "Sitdown",
                deskId = desk.Id,
                pos    = pos,
                player = CurrentPlayer,
                msg    = $"{CurrentPlayer.Nick} 坐下了座位 ({desk.Title}, POS:{pos})"
            });
            //判断三人都在,游戏开始
            var players = redis.HMGet <Player>("sitdown_ht", new[] { $"{desk.Id}_1", $"{desk.Id}_2", $"{desk.Id}_3" });

            if (players.Where(a => a == null).Any() == false)
            {
                var ddz = GamePlay.Create(players.Select(a => a.Nick).ToArray(), 1, 3);
                ddz.Shuffle();
                ImHelper.JoinChan(players[0].Id, desk.Title);
                ImHelper.JoinChan(players[1].Id, desk.Title);
                ImHelper.JoinChan(players[2].Id, desk.Title);
                ImHelper.SendChanMessage(Guid.Empty, "ddz_chan", new
                {
                    type    = "GameStarted",
                    deskId  = desk.Id,
                    players = players,
                    msg     = $"{desk.Title} 三人就位,游戏开始,{players[0].Nick} VS {players[1].Nick} VS {players[2].Nick}"
                });
                using (var pipe = redis.StartPipe())
                {
                    pipe.HMSet($"ddz_gameplay_ht{ddz.Id}", "players", players, "desk", desk);
                    pipe.HMSet("ddz_gameplay_player_ht", players[0].Id.ToString(), ddz.Id, players[1].Id.ToString(), ddz.Id, players[2].Id.ToString(), ddz.Id,
                               players[0].Nick, ddz.Id, players[1].Nick, ddz.Id, players[2].Nick, ddz.Id);
                    pipe.EndPipe();
                }
                SendGameMessage(ddz, players);
            }
            return(APIReturn.成功);
        }
Esempio n. 2
0
 public object subscrChannel([FromForm] string websocketId, [FromForm] string channel)
 {
     ImHelper.JoinChan(websocketId, channel);
     return(new
     {
         code = 0
     });
 }
Esempio n. 3
0
        async public Task <APIReturn> PrevConnectWebsocket()
        {
            await CheckPlayer();

            if (ImHelper.HasOnline(CurrentPlayer.Id))
            {
                return(APIReturn.失败.SetMessage($"用户 {CurrentPlayer.Nick} 已在线,测试请使用多种浏览器模拟真实场景"));
            }
            var wsserver = ImHelper.PrevConnectServer(CurrentPlayer.Id, "nil");

            ImHelper.JoinChan(CurrentPlayer.Id, "ddz_chan");
            return(APIReturn.成功.SetData("server", wsserver));
        }
Esempio n. 4
0
        /// <summary>
        /// 加入群聊
        /// </summary>
        /// <param name="chanName"></param>
        /// <param name="clientId"></param>
        /// <returns></returns>
        public async Task <object> JoinChan(string chanName, string clientId)
        {
            ApiResult <object> result = new ApiResult <object>();

            var(status, msg) = await ImHelper.JoinChan(chanName, clientId);

            if (!status)
            {
                result.Code = 1;
            }
            result.Msg  = msg;
            result.Data = new { };
            return(result);
        }
Esempio n. 5
0
        public async Task <AjaxResult <object> > SubscrChannel([FromForm] Guid accid, [FromForm] Guid channel)
        {
            if (!await _userManager.CheckAccid(accid.ToString(), Appid))
            {
                return(new AjaxResult <object>("accid不存在"));
            }
            //判断群是否存在
            if (!await _channelManager.CheckChannel(channel.ToString(), Appid))
            {
                return(new AjaxResult <object>("channel不存在"));
            }

            ImHelper.JoinChan(accid, channel.ToString());
            return(new AjaxResult <object>
            {
                code = 0
            });
        }
Esempio n. 6
0
        public IEnumerable <WeatherForecast> Get()
        {
            Commont.LogCommont.SerilogActionExtention.CreateInstance().Info($"时间:{DateTime.Now.ToString()}");
            Commont.LogCommont.SerilogActionExtention.CreateInstance().Debug($"时间:{DateTime.Now.ToString()}");
            Commont.LogCommont.SerilogActionExtention.CreateInstance().Error($"时间:{DateTime.Now.ToString()}");
            Commont.LogCommont.SerilogActionExtention.CreateInstance().Warning($"时间:{DateTime.Now.ToString()}");

            string Ip      = this.Request.Headers["X-Real-IP"].FirstOrDefault() ?? this.Request.HttpContext.Connection.RemoteIpAddress.ToString();
            var    newGuid = Guid.NewGuid();

            ImHelper.JoinChan(Guid.NewGuid(), "demoChan");//群聊,绑定消息频道
            ImHelper.PrevConnectServer(newGuid, Ip);

            ImHelper.GetChanList().Select(a => new { a.chan, a.online });
            var temp2 = Guid.NewGuid();

            for (int i = 0; i < 10; i++)
            {
                var temp = Guid.NewGuid();
                temp2 = temp;
                ImHelper.PrevConnectServer(temp, Ip);
                ImHelper.JoinChan(temp, "demoChan");//群聊,绑定消息频道
            }
            ImHelper.SendChanMessage(newGuid, "demoChan", "hello word");
            ImHelper.SendMessage(newGuid, new[] { temp2 }, " SendMessage hello word ", false);

            var rng = new Random();

            return(Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = rng.Next(-20, 55),
                Summary = Summaries[rng.Next(Summaries.Length)]
            })
                   .ToArray());
        }