Пример #1
0
        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);
        }
 // Use this for initialization
 void Start()
 {
     server = new WebSocketServerManager(port);
     client = new WebSocketClientManager("ws://" + ipAddress + ":" + port + "/",
                                         WebSocketClientManager.DataType.Text);
     client.OnWebSocketError   += (ms) => localSting = ms;
     client.ReceiveTextMessage += (ms) => localSting = ms;
 }
Пример #3
0
        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);
        }
Пример #4
0
        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
                };
            }));
        }
Пример #5
0
        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));
            }
        }
Пример #6
0
        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
            });
        }
Пример #7
0
        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
            });
        }
Пример #8
0
        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);
        }
Пример #9
0
        public WebSocketManager(string Host, uint Port)
        {
            string location = "ws://" + Host + ":" + Port;

            _webSocketServer = new WebSocketServer(location);
            FleckLog.Level   = LogLevel.Error;

            _webSocketClientManager  = new WebSocketClientManager();
            _webSocketHandlerManager = new WebSocketHandlerManager();

            _webSocketServer.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    var Uuid = Guid.NewGuid().ToString();
                    log.Info("Connection created -> " + socket.ConnectionInfo.ClientIpAddress + " (" + Uuid + ")");
                    var socketClient = new WebSocketClient(Uuid, socket);
                    _webSocketClientManager.RegisterSocketClient(socketClient);
                    socketClient.Send(new HeyHandler(Uuid));
                };

                socket.OnClose = () =>
                {
                    var socketClient = _webSocketClientManager.GetWebSocketClient(socket);
                    GameEnvironment.GetGameManager().DestroyGame(socketClient.Game);
                    log.Info("Connection destroyed -> " + socket.ConnectionInfo.ClientIpAddress + " (" + socketClient.Uuid + ")");
                    _webSocketClientManager.DeregisterSocketClient(socket);
                };
                socket.OnMessage = (message) =>
                {
                    try
                    {
                        var Payload = JsonConvert.DeserializeObject <MessageObject>(message);
                        if (Payload.Event == null)
                        {
                            throw new Exception("No event handler was passed.");
                        }

                        var Handler = _webSocketHandlerManager.GetIncomingEventHandler(Payload.Event);
                        if (Handler == null)
                        {
                            throw new Exception("No handler was found for specified identifier");
                        }

                        var SocketClient = _webSocketClientManager.GetWebSocketClient(socket);
                        if (SocketClient == null)
                        {
                            throw new Exception("No SocketClient instance was found for the socket connection");
                        }

                        LogMessage(SocketClient.Uuid, message);

                        Handler.Execute(SocketClient, Payload);
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }
                };
            });

            log.Info("WebSocketManager (" + location + ") -> LOADED!");
        }
Пример #10
0
 public override void OnClose()
 {
     WebSocketClientManager.GetInstance().RemoveClient(this);
     Log.InfoFormat("Web socket id: {0} close.", Id);
 }
Пример #11
0
        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 }
                    };
                }
            }));
        }