示例#1
0
        /// <summary>
        /// 创建链接
        /// </summary>
        /// <param name="httpContext"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        private async static Task Acceptor(HttpContext httpContext, Func <Task> next)
        {
            _boProvider = (BoPriver)httpContext.RequestServices.GetService(typeof(BoPriver)); // 这句可太NB了
            try
            {
                if (!httpContext.WebSockets.IsWebSocketRequest)
                {
                    return;
                }
                UserInfo userInfo = new UserInfo();
                userInfo.IPAddress   = httpContext.Request.Query["userId"].ToArray()[0]; // userId暂时用ip替代
                userInfo.NickName    = httpContext.Request.Query["userName"].ToArray()[0];
                userInfo.HeadPicture = httpContext.Request.Query["userHeadPic"].ToArray()[0];
                var socket = await httpContext.WebSockets.AcceptWebSocketAsync();

                if (dicWebsockets.ContainsKey(userInfo.NickName))
                {
                    dicWebsockets.Remove(userInfo.NickName);
                }
                dicWebsockets.Add(userInfo.NickName, new SocketObject {
                    UserWebsoket = userInfo, WebSocket = socket
                });
                UserInfo user = _boProvider._userInfoRepo.GetByName(userInfo.NickName);
                if (user == null)
                {
                    user             = userInfo;
                    user.MessageLogs = new List <MessageLog>()
                    {
                    };
                    _boProvider._context.UserInfos.Add(user);
                    SaveChange();
                }

                _logger.Debug($"服务端建立websockect链接{userInfo.IPAddress}||{userInfo.NickName}");
                // 建立连接后发送该用户进入聊天室提示信息
                await SendMessage(socket, new SocketMessage
                {
                    WsType      = WsMessageTypeEnum.Enter,
                    UserName    = userInfo.NickName,
                    UserHeadPic = userInfo.HeadPicture,
                }, userInfo.NickName);

                await RecvAsync(user, socket, CancellationToken.None);
            }
            catch (Exception ex)
            {
                _logger.Debug($"又特么异常了啊啊啊啊啊啊:{ex.Message.ToString()}");
            }
        }
示例#2
0
 public IndexController(BoPriver boPriver)
 {
     _boProvider = boPriver;
 }
示例#3
0
 public WeChatController(BoPriver boPriver)
 {
     _boProvider = boPriver;
 }
示例#4
0
 public UserController(BoPriver boPriver)
 {
     _boProvider = boPriver;
 }
示例#5
0
 public MusicController(BoPriver boPriver)
 {
     _boProvider = boPriver;
 }
示例#6
0
 public RoomController(BoPriver boPriver)
 {
     _boProvider = boPriver;
 }