コード例 #1
0
 private void SendRequest(ResourceMessage request)
 {
     if (m_gatewaySocket == null || m_gatewaySocket.ReadyState == WebSocketState.Closed)
     {
         Connect();
     }
     m_gatewaySocket.Send(JsonConvert.SerializeObject(request));
 }
コード例 #2
0
        private ResourceMessage CreateDefaultResponse(string message)
        {
            var response = new ResourceMessage()
            {
                Command     = "default",
                Data        = message,
                SenderGuid  = m_serverGuid.ToString(),
                RequestGuid = Guid.NewGuid().ToString()
            };

            return(response);
        }
コード例 #3
0
        private void SendPushMessage(IResource resource, string resData)
        {
            var message = new ResourceMessage()
            {
                Command    = "push-response",
                Data       = resData,
                DataType   = resource.GetResourceDataType(),
                DataUnits  = resource.GetResourceDataUnits(),
                SenderGuid = resource.Guid.ToString()
            };

            Send(JsonConvert.SerializeObject((message)));
        }
コード例 #4
0
        public static void Test()
        {
            var gwsc = new GatewaySocketClient("ws://localhost:9300/resources");

            gwsc.Connect();
            var request = new ResourceMessage()
            {
                Command    = "get",
                SenderGuid = Guid.NewGuid().ToString(),
                TargetGuid = (new Guid("e16c519e-d5f1-494d-b1ba-ed546a6bf199")).ToString()
            };

            gwsc.SendRequest(request);
        }
コード例 #5
0
        private ResourceMessage CreateResponse(IResource r, string id)
        {
            var response = new ResourceMessage()
            {
                Command = "response",
                // Resources that are write-only (e.g. most actuators) will return nothing here
                Data        = r.GetResourceData(),
                DataType    = r.GetResourceDataType(),
                DataUnits   = r.GetResourceDataUnits(),
                SenderGuid  = r.Guid.ToString(),
                RequestGuid = id
            };

            return(response);
        }
コード例 #6
0
        public Guid SendSetCommunicationMode(Guid resourceId, CommunicationMode mode)
        {
            var requestGuid = Guid.NewGuid();
            var request     = new ResourceMessage()
            {
                Command     = "mode",
                Data        = mode.ToString().ToLower(),
                TargetGuid  = resourceId.ToString(),
                SenderGuid  = m_clientId.ToString(),
                RequestGuid = requestGuid.ToString()
            };

            SendRequest(request);
            return(requestGuid);
        }
コード例 #7
0
        private void HandleModeChangeRequest(ResourceMessage message)
        {
            var newMode  = message.Data;
            var resource = m_boundResources.Where(r => r.Guid == Guid.Parse(message.TargetGuid)).First();

            if (newMode == "push" && resource.CommunicationMode == CommunicationMode.Poll)
            {
                resource.OnDataChanged    += OnResourceDataChanged;
                resource.CommunicationMode = CommunicationMode.Push;
            }
            else if (newMode == "poll" && resource.CommunicationMode == CommunicationMode.Push)
            {
                resource.OnDataChanged    -= OnResourceDataChanged;
                resource.CommunicationMode = CommunicationMode.Poll;
            }
        }
コード例 #8
0
        public Guid SendGetResourceDataRequest(Guid resourceId, INotifiableRequester sender)
        {
            Guid requestGuid = Guid.NewGuid();
            var  request     = new ResourceMessage()
            {
                Command     = "get",
                SenderGuid  = m_clientId.ToString(),
                TargetGuid  = resourceId.ToString(),
                RequestGuid = requestGuid.ToString(),
            };

            m_requestList.Add(requestGuid, new Request {
                Id = requestGuid, Sender = sender
            });
            SendRequest(request);
            return(requestGuid);
        }
コード例 #9
0
        private ResourceMessage PerformRequest(ResourceMessage request)
        {
            var resourceGuid = new Guid(request.TargetGuid);
            var resource     = GetResourceByGuid(resourceGuid);

            if (resource != null && resource.IsInitialized)
            {
                if (request.Command.Contains("set"))
                {
                    resource.SetResourceData(request.Data);
                }
                else if (request.Command.Contains("mode"))
                {
                    HandleModeChangeRequest(request);
                    return(CreateDefaultResponse("OK"));
                }
                return(CreateResponse(resource, request.RequestGuid));
            }
            else
            {
                return(CreateDefaultResponse(String.Format("No resource with guid: '{0}' exists.", request.TargetGuid.ToString())));
            }
        }