Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public override async Task OnConnectedAsync()
        {
            var httpContext = Context.GetHttpContext();
            var query       = httpContext.Request.QueryString.Value.Split('?', '&').ToList();

            query.RemoveAll(f => String.IsNullOrEmpty(f));
            IDictionary <string, string> headers = new Dictionary <string, string>();

            foreach (var q in query)
            {
                var pieces = q.Split('=');
                headers.Add(pieces[0], pieces[1]);
            }
            if (headers.TryGetValue("token", out string token))
            {
                httpContext.Request.Headers.Add("Authorization", $"Bearer {token}");
                var userId = JWTManager.GetUserId(httpContext, uow);
                user = JWTManager.GetUser(userId, uow);
                if (user == null)
                {
                    Context.Abort();
                    return;
                }

                if (headers.TryGetValue("sensorId", out string sensorId))
                {
                    var sensor = uow.DeviceDetail.GetDeviceDetail(int.Parse(sensorId));
                    if (!sensor.Success)
                    {
                        Context.Abort();
                        return;
                    }

                    var sensorDetail = sensor.Data;
                    var deviceId     = sensorDetail.DeviceId;
                    var device       = uow.Device.FindById(deviceId);
                    if (!device.Success)
                    {
                        Context.Abort();
                        return;
                    }

                    var deviceItem = device.Data;
                    if (deviceItem.UserId != user.Id)
                    {
                        Context.Abort();
                        return;
                    }

                    Groups.AddToGroupAsync(Context.ConnectionId, sensorDetail.Id.ToString());
                }
                else
                {
                    Context.Abort();
                    return;
                }
            }
            else
            {
                Context.Abort();
                return;
            }
        }