예제 #1
0
        public void Execute(IPCRequest ipcRequest)
        {
            var repo = Uow.GetRepository <IPCRequest>();

            repo.Update(ipcRequest);
            Uow.SaveChanges();
        }
예제 #2
0
        private IPCRequest CreateIpc(RfIpc oldIpc, int requestId)
        {
            try
            {
                var ipcId = GetObjectId <DicIPC>(oldIpc.TypeId);

                if (ipcId == null || ipcId == 0)
                {
                    return(null);
                }

                var ipc = new IPCRequest
                {
                    DateCreate = new DateTimeOffset(oldIpc.DateCreate.GetValueOrDefault(DateTime.Now)),
                    DateUpdate = DateTimeOffset.Now,
                    ExternalId = oldIpc.Id,
                    IpcId      = ipcId.Value,
                    IsMain     = GenerateHelper.StringToNullableBool(oldIpc.FlIsMain) ?? false,
                    RequestId  = requestId,
                    Timestamp  = BitConverter.GetBytes(DateTime.Now.Ticks)
                };

                return(ipc);
            }
            catch (Exception)
            {
                return(null);
            }
        }
예제 #3
0
        public int Execute(IPCRequest ipcRequest)
        {
            var repo = Uow.GetRepository <IPCRequest>();

            repo.Create(ipcRequest);
            Uow.SaveChanges();
            return(ipcRequest.Id);
        }
예제 #4
0
        public void DeleteClient(Guid clientID)
        {
            IPCRequest request = new IPCRequest();

            request.Method = "DeleteClient";
            request.AddToPayload(clientID);
            SendRequest(request);
        }
예제 #5
0
        public void SetDataFormat(TDataFormat dataFormat)
        {
            IPCRequest request = new IPCRequest();

            request.Method = "SetDataFormat";
            request.AddToPayload((int)dataFormat);
            SendRequest(request);
        }
예제 #6
0
        public void ObserveObjects(Guid clientID, Guid objectDefinitionID)
        {
            IPCRequest request = new IPCRequest();

            request.Method = "ObserveObjects";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            SendRequest(request);
        }
예제 #7
0
        public void CancelObserveObjects(Guid clientID, Guid objectDefinitionID, bool useReset)
        {
            IPCRequest request = new IPCRequest();

            request.Method = "CancelObserveObjects";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(useReset);
            SendRequest(request);
        }
예제 #8
0
        public void ObserveObjectProperty(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyMetadataID)
        {
            IPCRequest request = new IPCRequest();

            request.Method = "ObserveObjectProperty";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(instanceID);
            request.AddToPayload(propertyMetadataID);
            SendRequest(request);
        }
예제 #9
0
        public void SaveObjectProperty(Guid clientID, Guid objectDefinitionID, string instanceID, Property property, Model.TObjectState state)
        {
            IPCRequest request = new IPCRequest();

            request.Method = "SaveObjectProperty";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(instanceID);
            property.Serialise(request.Payload);
            request.AddToPayload((int)state);
            SendRequest(request);
        }
예제 #10
0
        public DeviceConnectedStatus GetDeviceConnectedStatus(Guid clientID)
        {
            DeviceConnectedStatus result  = null;
            IPCRequest            request = new IPCRequest();

            request.Method = "GetDeviceConnectedStatus";
            request.AddToPayload(clientID);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                result = DeviceConnectedStatus.Deserialise(new MemoryStream(_ResponseBytes));
            }
            return(result);
        }
예제 #11
0
        public Imagination.Model.Object GetObject(Guid clientID, Guid objectDefinitionID, string instanceID)
        {
            Imagination.Model.Object result = null;
            IPCRequest request = new IPCRequest();

            request.Method = "GetObject";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(instanceID);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                result = Imagination.Model.Object.Deserialise(new MemoryStream(_ResponseBytes));
            }
            return(result);
        }
예제 #12
0
        public string SaveObject(Guid clientID, Imagination.Model.Object item, Model.TObjectState state)
        {
            string     result  = null;
            IPCRequest request = new IPCRequest();

            request.Method = "SaveObject";
            request.AddToPayload(clientID);
            item.Serialise(request.Payload);
            request.AddToPayload((int)state);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                CheckError();
                result = Encoding.UTF8.GetString(_ResponseBytes, 4, _ResponseBytes.Length - 4);
            }
            return(result);
        }
예제 #13
0
        public Property GetObjectProperty(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyMetadataID)
        {
            Property   result  = null;
            IPCRequest request = new IPCRequest();

            request.Method = "GetObjectProperty";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(instanceID);
            request.AddToPayload(propertyMetadataID);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                result = Property.Deserialise(new MemoryStream(_ResponseBytes));
            }
            return(result);
        }
예제 #14
0
        public bool ExecuteResource(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyMetadataID)
        {
            bool       result  = false;
            IPCRequest request = new IPCRequest();

            request.Method = "ExecuteResource";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(instanceID);
            request.AddToPayload(propertyMetadataID);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                result = _ResponseBytes[0] != 0x00;
            }
            return(result);
        }
예제 #15
0
        public bool SetNotificationParameters(Guid clientID, Guid objectDefinitionID, string instanceID, Guid propertyMetadataID, NotificationParameters notificationParameters)
        {
            bool       result  = false;
            IPCRequest request = new IPCRequest();

            request.Method = "SetNotificationParameters";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            request.AddToPayload(instanceID);
            request.AddToPayload(propertyMetadataID);
            notificationParameters.Serialise(request.Payload);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                result = _ResponseBytes[0] != 0x00;
            }
            return(result);
        }
예제 #16
0
        public List <Imagination.Model.Object> GetObjects(Guid clientID, Guid objectDefinitionID)
        {
            List <Imagination.Model.Object> result = new List <Imagination.Model.Object>();
            IPCRequest request = new IPCRequest();

            request.Method = "GetObjects";
            request.AddToPayload(clientID);
            request.AddToPayload(objectDefinitionID);
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                MemoryStream stream = new MemoryStream(_ResponseBytes);
                while (stream.Position < stream.Length)
                {
                    result.Add(Imagination.Model.Object.Deserialise(stream));
                }
            }
            return(result);
        }
예제 #17
0
 private void SendRequest(IPCRequest request)
 {
     if (!_Connected)
     {
         if (!Connect())
         {
             throw new SocketException();
         }
         _Connected = true;
     }
     byte[] data = request.Serialise();
     _ResponseBytes = null;
     _ResponseWaitHandle.Reset();
     _TCPClient.Send(data, SocketFlags.None);
     _ResponseWaitHandle.WaitOne(20000);
     if (_ResponseBytes == null)
     {
         throw new TimeoutException();
     }
 }
예제 #18
0
        public List <Client> GetClients()
        {
            List <Client> result  = null;
            IPCRequest    request = new IPCRequest();

            request.Method = "GetClients";
            SendRequest(request);
            if (_ResponseBytes.Length > 0)
            {
                result = new List <Client>();
                MemoryStream stream = new MemoryStream(_ResponseBytes);
                int          count  = IPCHelper.ReadInt32(stream);
                if (count > 0)
                {
                    for (int index = 0; index < count; index++)
                    {
                        result.Add(Client.Deserialise(stream));
                    }
                }
            }
            return(result);
        }
예제 #19
0
 private void ProcessRequest(Socket client, IPCRequest request)
 {
     byte[] response = new byte[4];
     try
     {
         if (string.Compare(request.Method, "CancelObserveObject", true) == 0)
         {
             Guid   clientID           = request.ReadGuid();
             Guid   objectDefinitionID = request.ReadGuid();
             string instanceID         = request.ReadString();
             bool   useReset           = request.ReadBoolean();
             _ServerAPI.CancelObserveObject(clientID, objectDefinitionID, instanceID, useReset);
         }
         else if (string.Compare(request.Method, "CancelObserveObjectProperty", true) == 0)
         {
             Guid   clientID             = request.ReadGuid();
             Guid   objectDefinitionID   = request.ReadGuid();
             string instanceID           = request.ReadString();
             Guid   propertyDefinitionID = request.ReadGuid();
             bool   useReset             = request.ReadBoolean();
             _ServerAPI.CancelObserveObjectProperty(clientID, objectDefinitionID, instanceID, propertyDefinitionID, useReset);
         }
         else if (string.Compare(request.Method, "CancelObserveObjects", true) == 0)
         {
             Guid clientID           = request.ReadGuid();
             Guid objectDefinitionID = request.ReadGuid();
             bool useReset           = request.ReadBoolean();
             _ServerAPI.CancelObserveObjects(clientID, objectDefinitionID, useReset);
         }
         else if (string.Compare(request.Method, "DeleteClient", true) == 0)
         {
             Guid clientID = request.ReadGuid();
             _ServerAPI.DeleteClient(clientID);
         }
         else if (string.Compare(request.Method, "ExecuteResource", true) == 0)
         {
             Guid         clientID             = request.ReadGuid();
             Guid         objectDefinitionID   = request.ReadGuid();
             string       instanceID           = request.ReadString();
             Guid         propertyDefinitionID = request.ReadGuid();
             bool         success = _ServerAPI.ExecuteResource(clientID, objectDefinitionID, instanceID, propertyDefinitionID);
             MemoryStream data    = new MemoryStream(4096);
             data.Position = 4;
             IPCHelper.Write(data, success);
             data.Position = 0;
             NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
             response = data.ToArray();
         }
         if (string.Compare(request.Method, "GetClients", true) == 0)
         {
             List <Client> clients = _ServerAPI.GetClients();
             if (clients != null)
             {
                 MemoryStream data = new MemoryStream(4096);
                 data.Position = 4;
                 IPCHelper.Write(data, clients.Count);
                 foreach (Client item in clients)
                 {
                     item.Serialise(data);
                 }
                 data.Position = 0;
                 NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
                 response = data.ToArray();
             }
         }
         else if (string.Compare(request.Method, "GetDeviceConnectedStatus", true) == 0)
         {
             Guid clientID = request.ReadGuid();
             DeviceConnectedStatus responseObject = _ServerAPI.GetDeviceConnectedStatus(clientID);
             if (responseObject != null)
             {
                 MemoryStream data = new MemoryStream(4096);
                 data.Position = 4;
                 responseObject.Serialise(data);
                 data.Position = 0;
                 NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
                 response = data.ToArray();
             }
         }
         else if (string.Compare(request.Method, "GetObject", true) == 0)
         {
             Guid         clientID           = request.ReadGuid();
             Guid         objectDefinitionID = request.ReadGuid();
             string       instanceID         = request.ReadString();
             Model.Object responseObject     = _ServerAPI.GetObject(clientID, objectDefinitionID, instanceID);
             if (responseObject != null)
             {
                 MemoryStream data = new MemoryStream(4096);
                 data.Position = 4;
                 responseObject.Serialise(data);
                 data.Position = 0;
                 NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
                 response = data.ToArray();
             }
         }
         else if (string.Compare(request.Method, "GetObjectProperty", true) == 0)
         {
             Guid     clientID             = request.ReadGuid();
             Guid     objectDefinitionID   = request.ReadGuid();
             string   instanceID           = request.ReadString();
             Guid     propertyDefinitionID = request.ReadGuid();
             Property responseProperty     = _ServerAPI.GetObjectProperty(clientID, objectDefinitionID, instanceID, propertyDefinitionID);
             if (responseProperty != null)
             {
                 MemoryStream data = new MemoryStream(4096);
                 data.Position = 4;
                 responseProperty.Serialise(data);
                 data.Position = 0;
                 NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
                 response = data.ToArray();
             }
         }
         else if (string.Compare(request.Method, "GetObjects", true) == 0)
         {
             Guid clientID                       = request.ReadGuid();
             Guid objectDefinitionID             = request.ReadGuid();
             List <Model.Object> responseObjects = _ServerAPI.GetObjects(clientID, objectDefinitionID);
             if (responseObjects != null)
             {
                 MemoryStream data = new MemoryStream(4096);
                 data.Position = 4;
                 foreach (Model.Object responseObject in responseObjects)
                 {
                     responseObject.Serialise(data);
                 }
                 data.Position = 0;
                 NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
                 response = data.ToArray();
             }
         }
         else if (string.Compare(request.Method, "ObserveObject", true) == 0)
         {
             Guid   clientID           = request.ReadGuid();
             Guid   objectDefinitionID = request.ReadGuid();
             string instanceID         = request.ReadString();
             _ServerAPI.ObserveObject(clientID, objectDefinitionID, instanceID);
         }
         else if (string.Compare(request.Method, "ObserveObjectProperty", true) == 0)
         {
             Guid   clientID             = request.ReadGuid();
             Guid   objectDefinitionID   = request.ReadGuid();
             string instanceID           = request.ReadString();
             Guid   propertyDefinitionID = request.ReadGuid();
             _ServerAPI.ObserveObjectProperty(clientID, objectDefinitionID, instanceID, propertyDefinitionID);
         }
         else if (string.Compare(request.Method, "ObserveObjects", true) == 0)
         {
             Guid clientID           = request.ReadGuid();
             Guid objectDefinitionID = request.ReadGuid();
             _ServerAPI.ObserveObjects(clientID, objectDefinitionID);
         }
         else if (string.Compare(request.Method, "SaveObject", true) == 0)
         {
             Guid         clientID   = request.ReadGuid();
             Model.Object item       = Model.Object.Deserialise(request.Payload);
             TObjectState state      = (TObjectState)request.ReadInt32();
             string       responseID = _ServerAPI.SaveObject(clientID, item, state);
             if (responseID != null)
             {
                 MemoryStream data   = new MemoryStream(4096);
                 byte[]       buffer = Encoding.UTF8.GetBytes(responseID);
                 NetworkByteOrderConverter.WriteInt32(data, (int)(buffer.Length + 4));
                 NetworkByteOrderConverter.WriteInt32(data, buffer.Length);
                 data.Write(buffer, 0, buffer.Length);
                 response = data.ToArray();
             }
         }
         else if (string.Compare(request.Method, "SaveObjectProperty", true) == 0)
         {
             Guid         clientID           = request.ReadGuid();
             Guid         objectDefinitionID = request.ReadGuid();
             string       instanceID         = request.ReadString();
             Property     property           = Property.Deserialise(request.Payload);
             TObjectState state = (TObjectState)request.ReadInt32();
             _ServerAPI.SaveObjectProperty(clientID, objectDefinitionID, instanceID, property, state);
         }
         else if (string.Compare(request.Method, "SetDataFormat", true) == 0)
         {
             TDataFormat dataFormat = (TDataFormat)request.ReadInt32();
             _ServerAPI.SetDataFormat(dataFormat);
         }
         else if (string.Compare(request.Method, "SetNotificationParameters", true) == 0)
         {
             Guid   clientID             = request.ReadGuid();
             Guid   objectDefinitionID   = request.ReadGuid();
             string instanceID           = request.ReadString();
             Guid   propertyDefinitionID = request.ReadGuid();
             NotificationParameters notificationParameters = NotificationParameters.Deserialise(request.Payload);
             bool         success = _ServerAPI.SetNotificationParameters(clientID, objectDefinitionID, instanceID, propertyDefinitionID, notificationParameters);
             MemoryStream data    = new MemoryStream(4096);
             data.Position = 4;
             IPCHelper.Write(data, success);
             data.Position = 0;
             NetworkByteOrderConverter.WriteInt32(data, (int)data.Length - 4);
             response = data.ToArray();
         }
     }
     catch (Exception ex)
     {
         MemoryStream data = new MemoryStream(4096);
         data.Position = 4;
         IPCHelper.Write(data, ex.GetType().AssemblyQualifiedName);
         IPCHelper.Write(data, ex.Message);
         data.Position = 0;
         NetworkByteOrderConverter.WriteInt32(data, -((int)data.Length - 4));
         response = data.ToArray();
     }
     client.Send(response, SocketFlags.None);
 }
예제 #20
0
        private void DoReceiveCallback(IAsyncResult asyncResult)
        {
            ReceiveStateObject stateObject = asyncResult.AsyncState as ReceiveStateObject;

            try
            {
                int  readCount       = stateObject.Client.EndReceive(asyncResult);
                bool continueReceive = true;
                if (readCount > 0)
                {
                    stateObject.Data.Write(stateObject.Buffer, 0, readCount);
                    if ((stateObject.RequestLength == 0) && (stateObject.Data.Length > 4))
                    {
                        long position = stateObject.Data.Position;
                        stateObject.Data.Position = 0;
                        stateObject.RequestLength = NetworkByteOrderConverter.ToInt32(stateObject.Data) + 4;
                        stateObject.Data.Position = position;
                    }
                    if (stateObject.RequestLength == stateObject.Data.Position)
                    {
                        stateObject.Data.Position = 4;
                        IPCRequest request = IPCRequest.Deserialise(stateObject.Data);
                        ThreadPool.QueueUserWorkItem(new WaitCallback((s) => { ProcessRequest(stateObject.Client, request); }));
                        stateObject.Data.Position = 0;
                        stateObject.Data.SetLength(0);
                        stateObject.RequestLength = 0;
                    }
                }
                else
                {
                    if (stateObject.Client.ReceiveTimeout <= 0)
                    {
                        continueReceive = false;
                    }
                    else
                    {
                        TimeSpan diff = DateTime.Now.Subtract(stateObject.StartReceive);
                        if (diff.TotalMilliseconds < stateObject.Client.ReceiveTimeout)
                        {
                            continueReceive = false;
                        }
                    }
                }
                if (continueReceive)
                {
                    stateObject.StartReceive = DateTime.Now;
                    SocketError socketError;
                    stateObject.Client.BeginReceive(stateObject.Buffer, 0, ReceiveStateObject.BufferSize, SocketFlags.None, out socketError, new AsyncCallback(DoReceiveCallback), stateObject);
                }
                else
                {
                    stateObject.Client.Close();
                }
            }
#pragma warning disable 0168
            catch (Exception ex)
#pragma warning restore 0168
            {
                stateObject.Client.Close();
            }
        }