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.成功); }
async public static Task StandupStatic(Player player) { var sitdownKey = redis.HGet("sitdown_player_ht", player.Id.ToString()); if (!string.IsNullOrEmpty(sitdownKey)) { using (var pipe = redis.StartPipe()) { pipe.HDel("sitdown_player_ht", player.Id.ToString()); pipe.HDel("sitdown_ht", sitdownKey); pipe.EndPipe(); } //通知消息,坐位有用户离开 var dp = sitdownKey.Split('_'); var deskId = int.Parse(dp[0]); var desk = await Desk.FindAsync(deskId); ImHelper.SendChanMessage(Guid.Empty, "ddz_chan", new { type = "Standup", deskId = desk.Id, pos = int.Parse(dp[1]), msg = $"{player.Nick} 离开了座位 ({desk.Title}, POS:{dp[1]})" }); } }
async public Task <APIReturn> SendChannelMsg([FromForm] string channel, [FromForm] string message) { await CheckPlayer(); ImHelper.SendChanMessage(CurrentPlayer.Id, channel, message); return(APIReturn.成功); }
public object sendChannelmsg([FromForm] string websocketId, [FromForm] string channel, [FromForm] string message) { ImHelper.SendChanMessage(websocketId, channel, message); return(new { code = 0 }); }
public static void OnGameOver(GamePlay game) { object[] gpdb = null; using (var pipe = redis.StartPipe()) { pipe.HGet <Player[]>($"ddz_gameplay_ht{game.Id}", "players"); pipe.HGet <Desk>($"ddz_gameplay_ht{game.Id}", "desk"); gpdb = pipe.EndPipe(); } var players = gpdb[0] as Player[]; var desk = gpdb[1] as Desk; ImHelper.LeaveChan(players[0].Id, desk.Title); ImHelper.LeaveChan(players[1].Id, desk.Title); ImHelper.LeaveChan(players[2].Id, desk.Title); using (var pipe = redis.StartPipe()) { pipe.HDel($"ddz_gameplay_ht{game.Id}", "players", "desk"); pipe.HDel("ddz_gameplay_player_ht", players[0].Id.ToString(), players[1].Id.ToString(), players[2].Id.ToString(), players[0].Nick, players[1].Nick, players[2].Nick); pipe.HDel("sitdown_ht", new[] { $"{desk.Id}_1", $"{desk.Id}_2", $"{desk.Id}_3" }); pipe.HDel("sitdown_player_ht", players[0].Id.ToString(), players[1].Id.ToString(), players[2].Id.ToString()); pipe.EndPipe(); } Func <GamePlayer, string> getPlayerStats = pl => $"{pl.id}({pl.score})"; var playerScoreIncr = game.Data.players.Select(a => (long)a.score).ToArray(); lock (updateScoreLock) { BaseEntity.Orm.Update <Player>(players[0]).Set(a => a.Score + playerScoreIncr[0]).ExecuteAffrows(); BaseEntity.Orm.Update <Player>(players[1]).Set(a => a.Score + playerScoreIncr[1]).ExecuteAffrows(); BaseEntity.Orm.Update <Player>(players[2]).Set(a => a.Score + playerScoreIncr[2]).ExecuteAffrows(); } players[0].Score += playerScoreIncr[0]; players[1].Score += playerScoreIncr[1]; players[2].Score += playerScoreIncr[2]; ImHelper.SendChanMessage(Guid.Empty, "ddz_chan", new { type = "GameOvered", deskId = desk.Id, players = players, msg = $"{desk.Title} 【游戏结束】,本局炸弹 {game.Data.bong}个,{game.Data.players[0].id}({game.Data.players[0].score}),{game.Data.players[1].id}({game.Data.players[1].score}),{game.Data.players[2].id}({game.Data.players[2].score})" }); SendGameMessage(game, players); }
public async Task <AjaxResult <object> > SendMsg([FromForm] Guid from, [FromForm] int ope, [FromForm] Guid to, [FromForm] int type, [FromForm] string body, [FromForm] string frominfo) { //判断是否存在 if (!await _userManager.CheckAccid(from.ToString(), Appid)) { return(new AjaxResult <object>("消息发送者 不存在")); } if (ope == 0) { if (!await _userManager.CheckAccid(to.ToString(), Appid)) { return(new AjaxResult <object>("用户id 不存在")); } } else if (ope == 1) { if (!await _channelManager.CheckChannel(to.ToString(), Appid)) { return(new AjaxResult <object>("群id 不存在")); } } else { return(new AjaxResult <object>("ope不存在")); } int id = await _msgManager.Add(Appid, from.ToString(), ope, to.ToString(), type, body); //判断自己是否在线 if (!ImHelper.HasOnline(from)) { return(new AjaxResult <object>("你不在线")); } //发送消息 if (ope == 0)//单聊 { ImHelper.SendMessage(from, new[] { to }, new { id, ope, type, to, body, frominfo, from }, true); } else if (ope == 1)//群聊 { ImHelper.SendChanMessage(from, to.ToString(), new { id, ope, type, to, body, frominfo, from }); } return(new AjaxResult <object>((object)(from + ":" + to))); }
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()); }