Esempio n. 1
0
        public void Configure(IApplicationBuilder app)
        {
            app.UseResponseCompression();

            app.UseDeveloperExceptionPage();

            app.UseImServer(new ImServerOptions
            {
                Redis   = RedisHelper.Instance,
                Servers = new[] { Configuration["imserver"] }, //¼¯ÈºÅäÖÃ
                Server  = Configuration["imserver"]
            });

            app.UseStaticFiles();
            app.UseClientSideBlazorFiles <WasmClient.Program>();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
                endpoints.MapFallbackToClientSideBlazor <WasmClient.Program>("index.html");
            });
            //app.UseDefaultFiles();
            //app.UseStaticFiles();

            ImHelper.Initialization(new ImClientOptions
            {
                Redis   = RedisHelper.Instance,
                Servers = Configuration["imserver"].Split(';')
            });

            ImHelper.Instance.OnSend += (s, e) =>
                                        Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonConvert.SerializeObject(e.Message)})");
        }
Esempio n. 2
0
        public void Configure(IApplicationBuilder app)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Console.OutputEncoding = Encoding.GetEncoding("GB2312");
            Console.InputEncoding  = Encoding.GetEncoding("GB2312");

            app.UseDeveloperExceptionPage();

            app.UseRouting();
            app.UseEndpoints(config => config.MapControllers());
            app.UseDefaultFiles();
            app.UseStaticFiles();

            ImHelper.Initialization(new ImClientOptions
            {
                Redis   = new CSRedis.CSRedisClient("118.25.209.177:26379,idleTimeout=3000,poolsize=5"),
                Servers = new[] { "127.0.0.1:6001" }
            });

            ImHelper.Instance.OnSend += (s, e) =>
                                        Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonConvert.SerializeObject(e.Message)})");

            ImHelper.EventBus(
                t =>
            {
                Console.WriteLine(t.clientId + "上线了");
                var onlineUids = ImHelper.GetClientListByOnline();
                ImHelper.SendMessage(t.clientId, onlineUids, $"用户{t.clientId}上线了");
            },
                t => Console.WriteLine(t.clientId + "下线了"));
        }
Esempio n. 3
0
        public void Configure(IApplicationBuilder app)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Console.OutputEncoding = Encoding.GetEncoding("GB2312");
            Console.InputEncoding  = Encoding.GetEncoding("GB2312");

            app.UseDeveloperExceptionPage();

            app.UseRouting();
            app.UseEndpoints(config => config.MapControllers());
            app.UseDefaultFiles();
            app.UseStaticFiles();

            ImHelper.Initialization(new ImClientOptions
            {
                Redis   = new FreeRedis.RedisClient("127.0.0.1:6379,password=cTelHhQMFrw4R699rts00du8JW0CKF,defaultDatabase=0,poolsize=500,ssl=false,writeBuffer=10240"),
                Servers = new[] { "127.0.0.1:5000" }
            });

            ImHelper.Instance.OnSend += (s, e) =>
                                        Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonConvert.SerializeObject(e.Message)})");

            ImHelper.EventBus(
                t =>
            {
                Console.WriteLine(t.clientId + "上线了");
                //var onlineUids = ImHelper.GetClientListByOnline();
                //ImHelper.SendMessage(t.clientId, onlineUids, $"用户{t.clientId}上线了");
            },
                t => Console.WriteLine(t.clientId + "下线了"));
        }
Esempio n. 4
0
File: Startup.cs Progetto: sososu/im
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Console.OutputEncoding = Encoding.GetEncoding("GB2312");
            Console.InputEncoding  = Encoding.GetEncoding("GB2312");
            loggerFactory.AddConsole(LogLevel.Error);

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.UseMvc();
            app.UseSwagger().UseSwaggerUI();

            ImHelper.Initialization(new ImClientOptions
            {
                Redis   = new CSRedis.CSRedisClient("127.0.0.1:6379,poolsize=5"),
                Servers = new[] { "127.0.0.1:6001" }
            });

            ImHelper.Instance.OnSend += (s, e) =>
                                        Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonConvert.SerializeObject(e.Message)})");

            ImHelper.EventBus(
                t =>
            {
                Console.WriteLine(t.clientId + "上线了");
                var onlineUids = ImHelper.GetClientListByOnline();
                ImHelper.SendMessage(t.clientId, onlineUids, $"用户{t.clientId}上线了");
            },
                t => Console.WriteLine(t.clientId + "下线了"));
        }
Esempio n. 5
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. 6
0
        public APIReturn 出牌([FromForm] string id, [FromForm] string playerId, [FromForm] int[] poker)
        {
            var ddz = DDZGet(id);

            ddz.Play(playerId, poker);

            object[] gpdb = null;
            using (var pipe = redis.StartPipe())
            {
                pipe.HGet <Player[]>($"ddz_gameplay_ht{ddz.Id}", "players");
                pipe.HGet <Desk>($"ddz_gameplay_ht{ddz.Id}", "desk");
                gpdb = pipe.EndPipe();
            }
            var players = gpdb[0] as Player[];
            var desk    = gpdb[1] as Desk;

            SendGameMessage(ddz, gpdb[0] as Player[]);
            if (ddz.Data.stage == GameStage.游戏结束)
            {
                ImHelper.LeaveChan(players[0].Id, desk.Title);
                ImHelper.LeaveChan(players[1].Id, desk.Title);
                ImHelper.LeaveChan(players[2].Id, desk.Title);
            }
            return(APIReturn.成功);
        }
Esempio n. 7
0
        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]})"
                });
            }
        }
Esempio n. 8
0
        async public Task <APIReturn> SendChannelMsg([FromForm] string channel, [FromForm] string message)
        {
            await CheckPlayer();

            ImHelper.SendChanMessage(CurrentPlayer.Id, channel, message);
            return(APIReturn.成功);
        }
Esempio n. 9
0
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Console.OutputEncoding = Encoding.GetEncoding("GB2312");
            Console.InputEncoding  = Encoding.GetEncoding("GB2312");
            loggerFactory.AddConsole(LogLevel.Error);

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseDefaultFiles();
            app.UseStaticFiles();
            app.UseMvc();
            app.UseSwagger().UseSwaggerUI();

            ImHelper.Initialization(new ImClientOptions
            {
                Redis   = new CSRedis.CSRedisClient("127.0.0.1:6379,poolsize=5"),
                Servers = new[] { "127.0.0.1:6001" }
            });

            ImHelper.EventBus(t => Console.WriteLine(t.clientId + "上线了"), t => Console.WriteLine(t.clientId + "下线了"));
        }
Esempio n. 10
0
 public async Task <AjaxResult <object> > GetChannels()
 {
     return(new AjaxResult <object>
     {
         code = 0,
         data = new { channels = ImHelper.GetChanList().Select(a => new { a.chan, a.online }) }
     });
 }
Esempio n. 11
0
 public object sendmsg([FromForm] Guid senderWebsocketId, [FromForm] Guid receiveWebsocketId, [FromForm] string message, [FromForm] bool isReceipt = false)
 {
     ImHelper.SendMessage(senderWebsocketId, new[] { receiveWebsocketId }, message, isReceipt);
     return(new
     {
         code = 0
     });
 }
Esempio n. 12
0
 public object getChannels()
 {
     return(new
     {
         code = 0,
         channels = ImHelper.GetChanList().Select(a => new { a.chan, a.online })
     });
 }
Esempio n. 13
0
 public object subscrChannel([FromForm] string websocketId, [FromForm] string channel)
 {
     ImHelper.JoinChan(websocketId, channel);
     return(new
     {
         code = 0
     });
 }
Esempio n. 14
0
 public object sendChannelmsg([FromForm] string websocketId, [FromForm] string channel, [FromForm] string message)
 {
     ImHelper.SendChanMessage(websocketId, channel, message);
     return(new
     {
         code = 0
     });
 }
Esempio n. 15
0
 public object getChannels()
 {
     return(new
     {
         code = 0,
         channels = ImHelper.GetChanList()
     });
 }
Esempio n. 16
0
        /// <summary>
        /// 添加朋友
        /// </summary>
        /// <param name="clientId"></param>
        /// <param name="friendId"></param>
        /// <returns></returns>
        public async Task <object> AddFriend(string clientId, string friendId)
        {
            ApiResult <object> result = new ApiResult <object>();
            await ImHelper.AddFriend(clientId, friendId);

            result.Msg  = "success";
            result.Data = new { };
            return(result);
        }
Esempio n. 17
0
        /// <summary>
        /// 获取用户群聊列表
        /// </summary>
        /// <param name="clientId"></param>
        /// <returns></returns>
        public async Task <object> GetUserChanList(string clientId)
        {
            ApiResult <object> result = new ApiResult <object>();
            var data = await ImHelper.GetUserChanList(clientId);

            result.Msg  = "success";
            result.Data = data;
            return(result);
        }
Esempio n. 18
0
        /// <summary>
        /// 处理消息
        /// </summary>
        /// <param name="message"></param>
        public bool HandleMessage(string message, string queenName)
        {
            bool isSuccess = true;

            try
            {
                var(senderClientId, receiveClientId, content, receipt) = JsonConvert.DeserializeObject <(string senderClientId, string[] receiveClientId, string content, bool receipt)>(message as string);
                var outgoing = new ArraySegment <byte>(Encoding.UTF8.GetBytes(content));
                foreach (var clientId in receiveClientId)
                {
                    if (ImServer._clients.TryGetValue(clientId, out var wslist) == false)
                    {
                        //Console.WriteLine($"websocket{clientId} 离线了,{data.content}" + (data.receipt ? "【需回执】" : ""));
                        if (!string.IsNullOrWhiteSpace(senderClientId) && clientId != senderClientId && receipt)
                        {
                            ImHelper.SendMessage(clientId, new[] { senderClientId }, queenName, new
                            {
                                content,
                                receipt = "用户不在线"
                            });
                        }
                        continue;
                    }

                    ImServer.ImServerClient[] sockarray = wslist.Values.ToArray();

                    //如果接收消息人是发送者,并且接收者只有1个以下,则不发送
                    //只有接收者为多端时,才转发消息通知其他端
                    if (clientId == senderClientId && sockarray.Length <= 1)
                    {
                        continue;
                    }

                    foreach (var sh in sockarray)
                    {
                        sh.socket.SendAsync(outgoing, WebSocketMessageType.Text, true, CancellationToken.None);
                    }

                    if (string.IsNullOrWhiteSpace(senderClientId) && clientId != senderClientId && receipt)
                    {
                        ImHelper.SendMessage(clientId, new[] { senderClientId }, queenName, new
                        {
                            content,
                            receipt = "发送成功"
                        });
                    }
                    Log.Information(message);
                }
            }
            catch (Exception ex)
            {
                isSuccess = false;
                Log.Error(message, "发送失败", ex.Message);
            }
            return(isSuccess);
        }
Esempio n. 19
0
        public async Task <AjaxResult <object> > MsgRead([FromForm] Guid from, [FromForm] Guid to)
        {
            await _msgManager.Read(Appid, from.ToString(), to.ToString());

            int ope = -1;

            ImHelper.SendMessage(from, new[] { to }, new { ope, to, from }, false);

            return(new AjaxResult <object>());
        }
Esempio n. 20
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. 21
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. 22
0
        public object preConnect([FromForm] string websocketId)
        {
            if (websocketId == null)
            {
                websocketId = Guid.NewGuid().ToString();
            }
            var wsserver = ImHelper.PrevConnectServer(websocketId, this.Ip);

            return(new
            {
                code = 0,
                server = wsserver,
                websocketId = websocketId
            });
        }
Esempio n. 23
0
        public async Task <object> SendMessage([FromBody] Packet packet)
        {
            ApiResult <object> result = new ApiResult <object>();
            var grain = _client.GetGrain <IChatGrain>(packet.SendId);

            var(status, msg) = await ImHelper.SendMessage(packet);

            if (!status)
            {
                result.Code = 1;
            }
            result.Msg  = msg;
            result.Data = new { };
            return(result);
        }
Esempio n. 24
0
 public async Task <AjaxResult <bool> > HasOnline([FromForm] Guid accid)
 {
     if (accid == Guid.Empty)
     {
         return(new AjaxResult <bool>("accid未空"));
     }
     if (!ImHelper.HasOnline(accid))
     {
         return(new AjaxResult <bool>(false));
     }
     else
     {
         return(new AjaxResult <bool>(true));
     }
 }
Esempio n. 25
0
        public async Task <AjaxResult <object> > ConnectServer([FromForm] Guid accid)
        {
            if (accid == Guid.Empty)
            {
                return(new AjaxResult <object>("accid未空"));
            }
            //判断是否存在
            if (!await _userManager.CheckAccid(accid.ToString(), Appid))
            {
                return(new AjaxResult <object>("accid不存在"));
            }
            //获取token
            var wsserver = ImHelper.PrevConnectServer(accid, this.Ip);

            return(new AjaxResult <object>((object)wsserver));
        }
Esempio n. 26
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);
        }
Esempio n. 27
0
        public object sendmsg([FromForm] string senderWebsocketId, [FromForm] string receiveWebsocketId, [FromForm] string message, [FromForm] bool isReceipt = false)
        {
            //var loginUser = 发送者;
            //var recieveUser = User.Get(receiveWebsocketId);

            //if (loginUser.好友 != recieveUser) throw new Exception("不是好友");

            ImHelper.SendMessage(senderWebsocketId, new[] { receiveWebsocketId }, message, isReceipt);

            //loginUser.保存记录(message);
            //recieveUser.保存记录(message);

            return(new
            {
                code = 0
            });
        }
Esempio n. 28
0
        //游戏环节
        public static void SendGameMessage(GamePlay game, Player[] players)
        {
            if (players == null)
            {
                players = redis.HGet <Player[]>($"ddz_gameplay_ht{game.Id}", "players");
            }

            foreach (var player in players)
            {
                ImHelper.SendMessage(Guid.Empty, new[] { player.Id }, new
                {
                    type  = "GamePlay",
                    ddzid = game.Id,
                    data  = game.Data.CloneToPlayer(player.Nick)
                });
            }
        }
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseStaticFiles();
            app.UseSwagger().UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
                c.DocExpansion(DocExpansion.None);
            });
            ImHelper.Initialization(new ImClientOptions
            {
                Redis   = new CSRedis.CSRedisClient("127.0.0.1:6379,poolsize=5"),
                Servers = new[] { "127.0.0.1:6001" }
            });


            ImHelper.Instance.OnSend += (s, e) =>
                                        Console.WriteLine($"ImClient.SendMessage(server={e.Server},data={JsonConvert.SerializeObject(e.Message)})");

            ImHelper.EventBus(
                t =>
            {
                Console.WriteLine(t.clientId + "上线了");
                var onlineUids = ImHelper.GetClientListByOnline();
                ImHelper.SendMessage(t.clientId, onlineUids, $"用户{t.clientId}上线了");
            },
                t => Console.WriteLine(t.clientId + "下线了"));

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
Esempio n. 30
0
        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)));
        }