public void ProcessRequest(HttpContext context) { var clients = WebSocketClientManager.GetInstance().GetAllClients(); Log.Debug("Read Http Request.."); String requestBody = ""; using (var reader = new System.IO.StreamReader(context.Request.InputStream, System.Text.Encoding.UTF8)) { requestBody = reader.ReadToEnd(); Log.DebugFormat("Raw request: {0}", requestBody); } var response = "response"; var token = ParseToken(requestBody); if (string.IsNullOrWhiteSpace(token)) { return; } if (clients.Any()) { var deviceID = clients.First().Id; var operation = new WebSocketOperation(deviceID); operation.Token = token; response = operation.Execute(requestBody); } context.Response.ContentType = "text/plain"; context.Response.Write(response); }
public override void OnOpen() { int deviceId = WebSocketContext.QueryString["Id"].ToInt32(); if (deviceId != ConvertorExtension.ConvertionFailureValue) { this.Id = deviceId; WebSocketClientManager.GetInstance().AddClient(this); } Log.InfoFormat("Web socket id: {0} opened.", Id); }
public QueryDeviceUsersResponse QueryDeviceUsers(QueryDeviceUsersRequest request) { return(PersistenceOperation.Process(request, () => { if (WebSocketClientManager.GetInstance().GetClientById(request.Device.Code.ToInt32()) == null) { var msg = string.Format("设备:[{0}]未连接", string.Join(",", request.Device.Name)); return new QueryDeviceUsersResponse() { ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg } }; } var userDtos = new List <DeviceUserDto>(); var deviceUsers = new List <UserInfo>(); var op = new DeviceUserOp(); if (!string.IsNullOrWhiteSpace(request.UserCode)) { var userRepo = RepositoryManager.GetRepository <IUserRepository>(); var userInfo = userRepo.QueryUsersForSummaryData(new Hashtable() { { "UserCode", request.UserCode } }).FirstOrDefault(); if (userInfo != null) { var deviceUser = op.TryGetUesrInfo(userInfo, request.Device); if (deviceUser != null) { deviceUsers.Add(deviceUser); } } } else { deviceUsers = op.QueryUsersByDevice(request.Device); } if (deviceUsers != null) { deviceUsers.ForEach(x => userDtos.Add(new DeviceUserDto() { UserCode = x.UserId, UserName = string.IsNullOrWhiteSpace(x.UserName) ? "未命名人员" : x.UserName, })); } return new QueryDeviceUsersResponse() { ResultType = ResultTypes.Ok, Users = userDtos }; })); }
public void ProcessRequest(HttpContext context) { if (context.IsWebSocketRequest || context.IsWebSocketRequestUpgrading) { context.AcceptWebSocketRequest(new DeviceWebSocketHandler()); } else { var clients = WebSocketClientManager.GetInstance().GetAllClients(); context.Response.ContentType = "text/plain"; context.Response.Write(string.Format("Getting {0} clients:", clients.Count) + Environment.NewLine); clients.ForEach(d => context.Response.Write(d.Id + Environment.NewLine)); } }
public GetDoorStateResponse GetDoorState(GetDoorStateRequest request) { if (WebSocketClientManager.GetInstance().GetClientById(request.DeviceCode) == null) { var msg = string.Format("设备:[{0}]未连接", string.Join(",", request.DeviceCode)); return(new GetDoorStateResponse() { ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg } }); } var bOpened = new DoorStateOp().GetDoorState(request.DeviceCode, request.DoorIndex); return(new GetDoorStateResponse() { ResultType = ResultTypes.Ok, IsOpened = bOpened }); }
public UpdateDoorStateResponse UpdateDoorState(UpdateDoorStateRequest request) { if (WebSocketClientManager.GetInstance().GetClientById(request.DeviceCode) == null) { var msg = string.Format("设备:[{0}]未连接", string.Join(",", request.DeviceCode)); return(new UpdateDoorStateResponse() { ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg } }); } var op = new DoorStateOp(); var resultTypes = op.UpdateDoorState(request.DeviceCode, request.DoorIndex, request.Option); return(new UpdateDoorStateResponse() { ResultType = (resultTypes == ResultType.NotSupport) ? ResultTypes.NotSupportError : ResultTypes.Ok }); }
public List <int> SearchNewDevices() { var newDeviceIds = new List <int>(); var registerClients = WebSocketClientManager.GetInstance().GetAllClients(); if (registerClients.Any()) { var repo = RepositoryManager.GetRepository <IDeviceControllerRepository>(); var existDevices = repo.Query(new Hashtable() { { "Status", "1" } }); var registerDeviceIds = registerClients.Select(x => x.Id); var existDeviceIds = existDevices.Select(x => x.Code.ToInt32()); newDeviceIds = registerDeviceIds.Except(existDeviceIds).ToList(); } return(newDeviceIds); }
public override void OnClose() { WebSocketClientManager.GetInstance().RemoveClient(this); Log.InfoFormat("Web socket id: {0} close.", Id); }
public SyncDeviceUsersResponse SyncDeviceUsers(SyncDeviceUsersRequest request) { return(PersistenceOperation.Process(request, () => { try { var userRepo = RepositoryManager.GetRepository <IUserRepository>(); var deviceRepo = RepositoryManager.GetRepository <IDeviceControllerRepository>(); Log.Info("Check offline devices"); var allDevices = deviceRepo.QuerySummaryData(new Hashtable() { { "Status", (int)GeneralStatus.Enabled } }); var offlineDevices = allDevices.FindAll(d => WebSocketClientManager.GetInstance().GetClientById(d.Code.ToInt32()) == null); var onlineDevices = allDevices.Except(offlineDevices); var requestOfflineDevice = offlineDevices.FindAll(x => request.Devices.Select(xx => xx.DeviceID).Contains(x.DeviceID)); if (requestOfflineDevice.Any()) { var msg = string.Format("设备:[{0}]未连接", string.Join(",", requestOfflineDevice.Select(x => x.Name))); return new SyncDeviceUsersResponse() { ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg } }; } //if (offlineDevices.Any()) //{ // var msg = string.Format("设备:[{0}]未连接", string.Join(",", offlineDevices.Select(x => x.Name))); // return new SyncDBUsersResponse() { ResultType = ResultTypes.DeviceNotConnected, Messages = new[] { msg } }; //} Log.Info("Load data for request devices..."); var requestDevices = new List <DeviceController>(); request.Devices.ForEach(x => { var d = onlineDevices.FirstOrDefault(e => e.DeviceID == x.DeviceID); if (d != null) { requestDevices.Add(d); } }); request.Devices = requestDevices; Log.Info("Load data for request users..."); var requestUsers = new List <User>(); request.Users.ForEach(x => { if (x.UserID != 0) { x = userRepo.GetByKey(x.UserID); } requestUsers.Add(x); }); request.Users = requestUsers; Log.Info("Process business..."); request.Users.ForEach(user => request.Devices.ForEach(device => { new DeviceUserOp().SyncUser(request.Option, user, device); })); return new SyncDeviceUsersResponse() { ResultType = ResultTypes.Ok }; } catch (Exception ex) { return new SyncDeviceUsersResponse() { ResultType = ResultTypes.UnknownError, Messages = new[] { ex.Message } }; } })); }