Ejemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NPCChatDialogForm"/> class.
        /// </summary>
        /// <param name="position">The position.</param>
        /// <param name="parent">The parent.</param>
        public NPCChatDialogForm(Vector2 position, Control parent) : base(parent, position, new Vector2(400, 300))
        {
            IsVisible = false;

            // NOTE: We want to use a scrollable textbox here... when we finally make one

            float spacing = Font.GetLineSpacing();

            var responseStartY = ClientSize.Y - (_numDisplayedResponses * spacing);
            var textboxSize    = ClientSize - new Vector2(0, ClientSize.Y - responseStartY);

            _dialogTextControl = new TextBox(this, Vector2.Zero, textboxSize)
            {
                IsEnabled = false, CanFocus = false, IsMultiLine = true, Font = GameScreenHelper.DefaultChatFont
            };
            _dialogTextControl.ClientSize -= _dialogTextControl.Border.Size;

            for (byte i = 0; i < _numDisplayedResponses; i++)
            {
                var r = new ResponseText(this, new Vector2(5, responseStartY + (spacing * i)))
                {
                    IsVisible = true, Font = GameScreenHelper.DefaultChatFont
                };
                r.Clicked += ResponseText_Clicked;
                _responseTextControls[i] = r;
            }
        }
Ejemplo n.º 2
0
        public override void WriteXML(XElement ele, ElderScrollsPlugin master)
        {
            XElement subEle;

            if (ResponseData != null)
            {
                ele.TryPathTo("ResponseData", true, out subEle);
                ResponseData.WriteXML(subEle, master);
            }
            if (ResponseText != null)
            {
                ele.TryPathTo("ResponseText", true, out subEle);
                ResponseText.WriteXML(subEle, master);
            }
            if (ScriptNotes != null)
            {
                ele.TryPathTo("ScriptNotes", true, out subEle);
                ScriptNotes.WriteXML(subEle, master);
            }
            if (Edits != null)
            {
                ele.TryPathTo("Edits", true, out subEle);
                Edits.WriteXML(subEle, master);
            }
            if (SpeakerAnimation != null)
            {
                ele.TryPathTo("SpeakerAnimation", true, out subEle);
                SpeakerAnimation.WriteXML(subEle, master);
            }
            if (ListenerAnimation != null)
            {
                ele.TryPathTo("ListenerAnimation", true, out subEle);
                ListenerAnimation.WriteXML(subEle, master);
            }
        }
Ejemplo n.º 3
0
        void ReleaseDesignerOutlets()
        {
            if (PickerView != null)
            {
                PickerView.Dispose();
                PickerView = null;
            }

            if (ResponseText != null)
            {
                ResponseText.Dispose();
                ResponseText = null;
            }

            if (SendButton != null)
            {
                SendButton.Dispose();
                SendButton = null;
            }

            if (SRDOText != null)
            {
                SRDOText.Dispose();
                SRDOText = null;
            }
        }
Ejemplo n.º 4
0
        private ResponseText GetResponseValue(byte nodeNumber, string eventPath)
        {
            ResponseText returnValue = new ResponseText("ERR_TIMEOUT");
            InterfacePropertyChangedEventHandler eventHandler = new InterfacePropertyChangedEventHandler((sender, property) =>
            {
                if (property.EventData.Source == nodeNumber.ToString() && property.EventData.Property == eventPath)
                {
                    returnValue = new ResponseText(property.EventData.Value.ToString());
                }
            });

            InterfacePropertyChanged += eventHandler;
            Thread t = new Thread(() =>
            {
                int timeout = 0;
                int delay   = 100;
                while (returnValue.ResponseValue == "ERR_TIMEOUT" && timeout < ZWaveMessage.SendMessageTimeoutMs / delay)
                {
                    Thread.Sleep(delay);
                    timeout++;
                }
            });

            t.Start();
            t.Join(ZWaveMessage.SendMessageTimeoutMs);
            InterfacePropertyChanged -= eventHandler;
            return(returnValue);
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Here we actually make the request to the web server and
 /// retrieve it's response into a text buffer.
 /// </summary>
 public virtual void getResponse()
 {
     if (null == coFileStream)
     {
         System.IO.Stream io;
         WebResponse      oResponse;
         try
         {
             oResponse = coRequest.GetResponse();
         }
         catch (WebException web)
         {
             System.Windows.Forms.MessageBox.Show("Caught web exception: " + web.ToString());
             oResponse = web.Response;
         }
         if (null != oResponse)
         {
             io = oResponse.GetResponseStream();
             StreamReader sr = new StreamReader(io);
             string       str;
             ResponseText.Length = 0;
             while ((str = sr.ReadLine()) != null)
             {
                 ResponseText.Append(str);
             }
             oResponse.Close();
         }
         else
         {
             throw new Exception("MultipartForm: Error retrieving server response");
         }
     }
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Here we actually make the request to the web server and
 /// retrieve it's response into a text buffer.
 /// </summary>
 public virtual void GetResponse()
 {
     if (null == coFileStream)
     {
         Stream      stream;
         WebResponse response;
         try
         {
             response = coRequest.GetResponse();
         }
         catch (WebException web)
         {
             response = web.Response;
         }
         if (null != response)
         {
             stream = response.GetResponseStream();
             StreamReader sr = new StreamReader(stream);
             string       str;
             ResponseText.Length = 0;
             while ((str = sr.ReadLine()) != null)
             {
                 ResponseText.Append(str);
             }
             response.Close();
         }
         else
         {
             throw new Exception("MultipartForm: Error retrieving server response");
         }
     }
 }
Ejemplo n.º 7
0
 public override void WriteBinary(ESPWriter writer)
 {
     if (ResponseData != null)
     {
         ResponseData.WriteBinary(writer);
     }
     if (ResponseText != null)
     {
         ResponseText.WriteBinary(writer);
     }
     if (ScriptNotes != null)
     {
         ScriptNotes.WriteBinary(writer);
     }
     if (Edits != null)
     {
         Edits.WriteBinary(writer);
     }
     if (SpeakerAnimation != null)
     {
         SpeakerAnimation.WriteBinary(writer);
     }
     if (ListenerAnimation != null)
     {
         ListenerAnimation.WriteBinary(writer);
     }
 }
Ejemplo n.º 8
0
        public override void ReadXML(XElement ele, ElderScrollsPlugin master)
        {
            XElement subEle;

            if (ele.TryPathTo("ResponseData", false, out subEle))
            {
                if (ResponseData == null)
                {
                    ResponseData = new ResponseData();
                }

                ResponseData.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("ResponseText", false, out subEle))
            {
                if (ResponseText == null)
                {
                    ResponseText = new SimpleSubrecord <String>();
                }

                ResponseText.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("ScriptNotes", false, out subEle))
            {
                if (ScriptNotes == null)
                {
                    ScriptNotes = new SimpleSubrecord <String>();
                }

                ScriptNotes.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("Edits", false, out subEle))
            {
                if (Edits == null)
                {
                    Edits = new SimpleSubrecord <String>();
                }

                Edits.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("SpeakerAnimation", false, out subEle))
            {
                if (SpeakerAnimation == null)
                {
                    SpeakerAnimation = new RecordReference();
                }

                SpeakerAnimation.ReadXML(subEle, master);
            }
            if (ele.TryPathTo("ListenerAnimation", false, out subEle))
            {
                if (ListenerAnimation == null)
                {
                    ListenerAnimation = new RecordReference();
                }

                ListenerAnimation.ReadXML(subEle, master);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 响应文本信息
        /// </summary>
        /// <param name="info">基类</param>
        /// <param name="content">返回的内容</param>
        /// <returns></returns>
        public string GetresponseText(BaseMessage info, string content)
        {
            ResponseText model = new ResponseText(info);

            model.Content = content;

            return(model.ToXml());
        }
Ejemplo n.º 10
0
        public Task <BaseMessage> HandleLink(RequestLink info)
        {
            BaseMessage response = new ResponseText(info)
            {
                Content = Msg
            };

            return(Task.FromResult(response));
        }
Ejemplo n.º 11
0
        public AskPassDialog(Window owner)
        {
            Owner = owner;
            InitializeComponent();

            viewModel   = new AskPassDialogViewModel();
            DataContext = viewModel;
            ResponseText.Focus();
        }
Ejemplo n.º 12
0
        public Task <BaseMessage> UnsubscribeEvent(RequestEvent request)
        {
            BaseMessage response = new ResponseText(request)
            {
                Content = ""
            };

            _userService.Unsubscribe(request.FromUserName);
            return(Task.FromResult(response));
        }
Ejemplo n.º 13
0
 virtual protected void GradeQuestion()
 {
     if (IsCaseSensitive)
     {
         Correctness = (ResponseText == CorrectResponse) ? 1.0 : 0.0;
     }
     else
     {
         Correctness = (ResponseText.ToLower() == CorrectResponse.ToLower()) ? 1.0 : 0.0;
     }
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Method to ask the question to grade itself. Marked virtual because different
 /// types of question may have different types of grading.
 /// </summary>
 virtual protected void GradeQuestion()
 {
     // By default, simply compare the user's response to the correct response
     if (IsCaseSensitive)
     {
         Correctness = (ResponseText == CorrectResponse) ? 1.0 : 0.0;
     }
     else
     {
         Correctness = (ResponseText.ToLower() == CorrectResponse.ToLower()) ? 1.0 : 0.0;
     }
 }
        /// <summary>
        /// Handles the control of the interface from the Mig / HG web interface
        /// </summary>
        /// <param name="request">request body</param>
        /// <returns>object</returns>
        /// <exception cref="ArgumentOutOfRangeException">Argument out of range</exception>
        public object InterfaceControl(MigInterfaceCommand request)
        {
            var response = new ResponseText("OK"); // default success value

            Commands command;

            Enum.TryParse <Commands>(request.Command.Replace(".", "_"), out command);

            var module = this.modules.Find(m => m.Address.Equals(request.Address));

            if (module != null)
            {
                switch (command)
                {
                case Commands.Control_On:
                    this.OnInterfacePropertyChanged(this.GetDomain(), request.Address, "Test Interface", "Status.Level",
                                                    1);
                    break;

                case Commands.Control_Off:
                    this.OnInterfacePropertyChanged(this.GetDomain(), request.Address, "Test Interface", "Status.Level",
                                                    0);
                    break;

                case Commands.Temperature_Get:
                    this.OnInterfacePropertyChanged(this.GetDomain(), request.Address, "Test Interface",
                                                    "Sensor.Temperature", 19.75);
                    break;

                case Commands.Greet_Hello:
                    this.OnInterfacePropertyChanged(this.GetDomain(), request.Address, "Test Interface",
                                                    "Sensor.Message", string.Format("Hello {0}", request.GetOption(0)));
                    response = new ResponseText("Hello World!");
                    break;

                case Commands.NotSet:
                    break;

                default:
                    Log.Error(new ArgumentOutOfRangeException(), "Command [{0}] not recognised", command);
                    break;
                }
            }
            else
            {
                response = new ResponseText("ERROR: invalid module address");
            }

            return(response);
        }
Ejemplo n.º 16
0
        public Task <BaseMessage> SubscribeEvent(RequestEvent request)
        {
            BaseMessage response = new ResponseText(request)
            {
                Content = "欢迎订阅燕枢宝。"
            };

            var recommendCode = string.Empty;

            if (!string.IsNullOrWhiteSpace(request.EventKey))
            {
                var array = request.EventKey.Split('|');
                if (array[0].ToLower().Contains("register"))
                {
                    recommendCode = array[1];
                }
            }
            _userService.Subscribe(request.FromUserName, recommendCode);
            return(Task.FromResult(response));
        }
Ejemplo n.º 17
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            var response = new ResponseText("OK"); //default success value

            Commands command;

            Enum.TryParse(request.Command.Replace(".", "_"), out command);

            var module = _modules.Find(m => m.Address.Equals(request.Address));

            if (module != null)
            {
                switch (command)
                {
                case Commands.Control_On:
                    _connection.Action(module.Address.Replace(".", "/"), true);
                    break;

                case Commands.Control_Off:
                    _connection.Action(module.Address.Replace(".", "/"), false);
                    // TODO: ...
                    break;

                case Commands.Dimmer_Up:
                    _connection.Action(module.Address.Replace(".", "/"), _connection.ToDataPoint("3.008", 3));
                    // TODO: ...
                    break;

                case Commands.Dimmer_Down:
                    _connection.Action(module.Address.Replace(".", "/"), _connection.ToDataPoint("3.008", -3));
                    // TODO: ...
                    break;
                }
            }
            else
            {
                response = new ResponseText("ERROR: invalid module address");
            }

            return(response);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// 响应文本
        /// </summary>
        /// <param name="context"></param>
        /// <param name="responseText"></param>
        private void SendResponseText(HttpContext context, ResponseText responseText)
        {
            string data = @"
<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[{3}]]></MsgType>
<Content><![CDATA[{4}]]></Content>
</xml>";

            data = string.Format(data,
                                 responseText.ToUserName,                   //{0}
                                 responseText.FromUserName,                 //{1}
                                 responseText.CreateTime.Ticks,             //{2}
                                 responseText.MsgType.ToString().ToLower(), //{3}
                                 responseText.Content                       //{4}
                                 );

            SendResponse(context, data);
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NPCChatDialogForm"/> class.
        /// </summary>
        /// <param name="position">The position.</param>
        /// <param name="parent">The parent.</param>
        public NPCChatDialogForm(Vector2 position, Control parent) : base(parent, position, new Vector2(400, 300))
        {
            IsVisible = false;

            // NOTE: We want to use a scrollable textbox here... when we finally make one

            float spacing = Font.GetLineSpacing();

            var responseStartY = ClientSize.Y - (_numDisplayedResponses * spacing);
            var textboxSize = ClientSize - new Vector2(0, ClientSize.Y - responseStartY);
            _dialogTextControl = new TextBox(this, Vector2.Zero, textboxSize)
            { IsEnabled = false, CanFocus = false, IsMultiLine = true, Font = GameScreenHelper.DefaultChatFont };
            _dialogTextControl.ClientSize -= _dialogTextControl.Border.Size;

            for (byte i = 0; i < _numDisplayedResponses; i++)
            {
                var r = new ResponseText(this, new Vector2(5, responseStartY + (spacing * i))) { IsVisible = true, Font = GameScreenHelper.DefaultChatFont };
                r.Clicked += ResponseText_Clicked;
                _responseTextControls[i] = r;
            }
        }
        public object InterfaceControl(MigInterfaceCommand request)
        {
            var response = new ResponseText("OK"); //default success value

            //Commands command;
            //Enum.TryParse<Commands>(request.Command.Replace(".", "_"), out command);

            //var module = interfaceModules.Find (m => m.Address.Equals (request.Address));

            //if (module != null) {
            //    switch (command) {
            //    case Commands.Control_On:
            //    // TODO: ...
            //        OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Status.Level", 1);
            //        break;
            //    case Commands.Control_Off:
            //        OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Status.Level", 0);
            //    // TODO: ...
            //        break;
            //    case Commands.Temperature_Get:
            //        OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Sensor.Temperature", 19.75);
            //    // TODO: ...
            //        break;
            //    case Commands.Greet_Hello:
            //    // TODO: ...
            //        OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Sensor.Message", string.Format ("Hello {0}", request.GetOption (0)));
            //        response = new ResponseText ("Hello World!");
            //        break;
            //    }
            //}
            //else
            //{
            //    response = new ResponseText ("ERROR: invalid module address");
            //}

            return(response);
        }
Ejemplo n.º 21
0
        public BaseMessage GetResponseByEvent(RequestEvent request)
        {
            if (string.Equals(request.Event, EventType.Click.ToString(), StringComparison.CurrentCultureIgnoreCase))
            {
                var eventContext = GetContextByKey(request.EventKey);
                if (eventContext == null)
                {
                    return(null);
                }
                switch (eventContext.MsgType)
                {
                case (int)ResponseType.News:
                    var newsResponse = new ResponseNews(request)
                    {
                        ArticleCount = eventContext.ArticleContent.Count,
                        Articles     =
                            eventContext.ArticleContent.OrderBy(m => m.Sort).Select(content => new ArticleEntity()
                        {
                            Title       = content.Content.Title,
                            PicUrl      = content.Content.Image,
                            Description = content.Content.Description,
                            Url         = content.Content.Url,
                        }).ToList()
                    };
                    return(newsResponse);

                case (int)ResponseType.Text:
                    var textResponse = new ResponseText(request);
                    var articles     = eventContext.ArticleContent.FirstOrDefault();
                    var text         = articles == null ? "" : articles.Content.Description;
                    textResponse.Content = text;
                    return(textResponse);
                }
            }
            return(null);
        }
        public object InterfaceControl(MigInterfaceCommand request)
        {
            var response = new ResponseText("OK"); //default success value

            Commands command;
            Enum.TryParse<Commands>(request.Command.Replace(".", "_"), out command);

            var module = modules.Find (m => m.Address.Equals (request.Address));

            if (module != null) {
                switch (command) {
                case Commands.Control_On:
                // TODO: ...
                    OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Status.Level", 1);
                    break;
                case Commands.Control_Off:
                    OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Status.Level", 0);
                // TODO: ...
                    break;
                case Commands.Temperature_Get:
                    OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Sensor.Temperature", 19.75);
                // TODO: ...
                    break;
                case Commands.Greet_Hello:
                // TODO: ...
                    OnInterfacePropertyChanged (this.GetDomain (), request.Address, "Test Interface", "Sensor.Message", String.Format ("Hello {0}", request.GetOption (0)));
                    response = new ResponseText ("Hello World!");
                    break;
                }
            }
            else 
            {
                response = new ResponseText ("ERROR: invalid module address");
            }

            return response;
        }
Ejemplo n.º 23
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            object returnValue = null;
            bool raiseEvent = false;
            string eventParameter = "Status.Unhandled";
            string eventValue = "";
            //
            var device = GetUpnpDevice(request.Address);

            Commands command;
            Enum.TryParse<Commands>(request.Command.Replace(".", "_"), out command);

            // TODO: ??? Commands: SwitchPower, Dimming

            switch (command)
            {
            case Commands.Control_On:
            case Commands.Control_Off:
                {
                    bool commandValue = (command == Commands.Control_On ? true : false);
                    var newValue = new UPnPArgument("newTargetValue", commandValue);
                    var args = new UPnPArgument[] { 
                        newValue
                    };
                    InvokeUpnpDeviceService(device, "SwitchPower", "SetTarget", args);
                    //
                    raiseEvent = true;
                    eventParameter = "Status.Level";
                    eventValue = (commandValue ? "1" : "0");
                }
                break;
            case Commands.Control_Level:
                {
                    var newvalue = new UPnPArgument("NewLoadLevelTarget", (byte)uint.Parse(request.GetOption(0)));
                    var args = new UPnPArgument[] { 
                        newvalue
                    };
                    InvokeUpnpDeviceService(device, "Dimming", "SetLoadLevelTarget", args);
                    //
                    raiseEvent = true;
                    eventParameter = "Status.Level";
                    eventValue = (double.Parse(request.GetOption(0)) / 100d).ToString(System.Globalization.CultureInfo.InvariantCulture);
                }
                break;
            case Commands.Control_Toggle:
                // TODO: not implemented yet
                break;
            case Commands.AvMedia_GetItem:
                {
                    string deviceId = request.Address;
                    string id = request.GetOption(0);
                    //
                    var objectId = new UPnPArgument("ObjectID", id);
                    var flags = new UPnPArgument("BrowseFlag", "BrowseMetadata");
                    var filter = new UPnPArgument("Filter", "upnp:album,upnp:artist,upnp:genre,upnp:title,res@size,res@duration,res@bitrate,res@sampleFrequency,res@bitsPerSample,res@nrAudioChannels,res@protocolInfo,res@protection,res@importUri");
                    var startIndex = new UPnPArgument("StartingIndex", (uint)0);
                    var requestedCount = new UPnPArgument("RequestedCount", (uint)1);
                    var sortCriteria = new UPnPArgument("SortCriteria", "");
                    //
                    var result = new UPnPArgument("Result", "");
                    var returnedNumber = new UPnPArgument("NumberReturned", "");
                    var totalMatches = new UPnPArgument("TotalMatches", "");
                    var updateId = new UPnPArgument("UpdateID", "");
                    //
                    InvokeUpnpDeviceService(device, "ContentDirectory", "Browse", new UPnPArgument[] { 
                        objectId,
                        flags,
                        filter,
                        startIndex,
                        requestedCount,
                        sortCriteria,
                        result,
                        returnedNumber,
                        totalMatches,
                        updateId
                    });
                    //
                    try
                    {
                        string ss = result.DataValue.ToString();
                        var item = XDocument.Parse(ss, LoadOptions.SetBaseUri).Descendants().Where(ii => ii.Name.LocalName == "item").First();
                        returnValue = MIG.Utility.Serialization.JsonSerialize(item, true);
                    }
                    catch
                    {
                        // TODO: MigService.Log.Error(e);
                    }
                }
                break;
            case Commands.AvMedia_GetUri:
                {
                    string deviceId = request.Address;
                    string id = request.GetOption(0);
                    //
                    var objectId = new UPnPArgument("ObjectID", id);
                    var flags = new UPnPArgument("BrowseFlag", "BrowseMetadata");
                    var filter = new UPnPArgument("Filter", "upnp:album,upnp:artist,upnp:genre,upnp:title,res@size,res@duration,res@bitrate,res@sampleFrequency,res@bitsPerSample,res@nrAudioChannels,res@protocolInfo,res@protection,res@importUri");
                    var startIndex = new UPnPArgument("StartingIndex", (uint)0);
                    var requestedCount = new UPnPArgument("RequestedCount", (uint)1);
                    var sortCriteria = new UPnPArgument("SortCriteria", "");
                    //
                    var result = new UPnPArgument("Result", "");
                    var returnedNumber = new UPnPArgument("NumberReturned", "");
                    var totalMatches = new UPnPArgument("TotalMatches", "");
                    var updateId = new UPnPArgument("UpdateID", "");
                    //
                    InvokeUpnpDeviceService(device, "ContentDirectory", "Browse", new UPnPArgument[] { 
                        objectId,
                        flags,
                        filter,
                        startIndex,
                        requestedCount,
                        sortCriteria,
                        result,
                        returnedNumber,
                        totalMatches,
                        updateId
                    });
                    //
                    try
                    {
                        string ss = result.DataValue.ToString();
                        var item = XDocument.Parse(ss, LoadOptions.SetBaseUri).Descendants().Where(ii => ii.Name.LocalName == "item").First();
                        //
                        foreach (var i in item.Elements())
                        {
                            var protocolUri = i.Attribute("protocolInfo");
                            if (protocolUri != null)
                            {
                                returnValue = new ResponseText(i.Value);
                                break;
                            }
                        }
                    }
                    catch
                    {
                        // TODO: MigService.Log.Error(e);
                    }
                }
                break;
            case Commands.AvMedia_Browse:
                {
                    string deviceId = request.Address;
                    string id = request.GetOption(0);
                    //
                    var objectId = new UPnPArgument("ObjectID", id);
                    var flags = new UPnPArgument("BrowseFlag", "BrowseDirectChildren");
                    var filter = new UPnPArgument("Filter", "upnp:album,upnp:artist,upnp:genre,upnp:title,res@size,res@duration,res@bitrate,res@sampleFrequency,res@bitsPerSample,res@nrAudioChannels,res@protocolInfo,res@protection,res@importUri");
                    var startIndex = new UPnPArgument("StartingIndex", (uint)0);
                    var requestedCount = new UPnPArgument("RequestedCount", (uint)0);
                    var sortCriteria = new UPnPArgument("SortCriteria", "");
                    //
                    var result = new UPnPArgument("Result", "");
                    var returnedNumber = new UPnPArgument("NumberReturned", "");
                    var totalMatches = new UPnPArgument("TotalMatches", "");
                    var updateId = new UPnPArgument("UpdateID", "");
                    //
                    InvokeUpnpDeviceService(device, "ContentDirectory", "Browse", new UPnPArgument[] { 
                        objectId,
                        flags,
                        filter,
                        startIndex,
                        requestedCount,
                        sortCriteria,
                        result,
                        returnedNumber,
                        totalMatches,
                        updateId
                    });
                    //
                    try
                    {
                        string ss = result.DataValue.ToString();
                        var root = XDocument.Parse(ss, LoadOptions.SetBaseUri).Elements();
                        //
                        string jsonres = "[";
                        foreach (var i in root.Elements())
                        {
                            string itemId = i.Attribute("id").Value;
                            string itemTitle = i.Descendants().Where(n => n.Name.LocalName == "title").First().Value;
                            string itemClass = i.Descendants().Where(n => n.Name.LocalName == "class").First().Value;
                            jsonres += "{ \"Id\" : \"" + itemId + "\", \"Title\" : \"" + itemTitle.Replace("\"", "\\\"") + "\", \"Class\" : \"" + itemClass + "\" },\n";
                        }
                        jsonres = jsonres.TrimEnd(',', '\n') + "]";
                        //
                        returnValue = jsonres;
                    }
                    catch
                    {
                        // TODO: MigService.Log.Error(e);
                    }
                }
                break;
            case Commands.AvMedia_GetTransportInfo:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var transportState = new UPnPArgument("CurrentTransportState", "");
                    var transportStatus = new UPnPArgument("CurrentTransportStatus", "");
                    var currentSpeed = new UPnPArgument("CurrentSpeed", "");
                    var args = new UPnPArgument[] { 
                        instanceId,
                        transportState,
                        transportStatus,
                        currentSpeed
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "GetTransportInfo", args);
                    //
                    string jsonres = "{ ";
                    jsonres += "\"CurrentTransportState\" : \"" + transportState.DataValue + "\", ";
                    jsonres += "\"CurrentTransportStatus\" : \"" + transportStatus.DataValue + "\", ";
                    jsonres += "\"CurrentSpeed\" : \"" + currentSpeed.DataValue + "\"";
                    jsonres += " }";
                    //
                    returnValue = jsonres;
                }
                break;
            case Commands.AvMedia_GetMediaInfo:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var nrTracks = new UPnPArgument("NrTracks", (uint)0);
                    var mediaDuration = new UPnPArgument("MediaDuration", "");
                    var currentUri = new UPnPArgument("CurrentURI", "");
                    var currentUriMetadata = new UPnPArgument("CurrentURIMetaData", "");
                    var nextUri = new UPnPArgument("NextURI", "");
                    var nextUriMetadata = new UPnPArgument("NextURIMetaData", "");
                    var playMedium = new UPnPArgument("PlayMedium", "");
                    var recordMedium = new UPnPArgument("RecordMedium", "");
                    var writeStatus = new UPnPArgument("WriteStatus", "");
                    var args = new UPnPArgument[] { 
                        instanceId,
                        nrTracks,
                        mediaDuration,
                        currentUri,
                        currentUriMetadata,
                        nextUri,
                        nextUriMetadata,
                        playMedium,
                        recordMedium,
                        writeStatus
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "GetMediaInfo", args);
                    //
                    string jsonres = "{ ";
                    jsonres += "\"NrTracks\" : \"" + nrTracks.DataValue + "\", ";
                    jsonres += "\"MediaDuration\" : \"" + mediaDuration.DataValue + "\", ";
                    jsonres += "\"CurrentURI\" : \"" + currentUri.DataValue + "\", ";
                    jsonres += "\"CurrentURIMetaData\" : " + MIG.Utility.Serialization.JsonSerialize(GetJsonFromXmlItem(currentUriMetadata.DataValue.ToString())) + ", ";
                    jsonres += "\"NextURI\" : \"" + nextUri.DataValue + "\", ";
                    jsonres += "\"NextURIMetaData\" : " + MIG.Utility.Serialization.JsonSerialize(GetJsonFromXmlItem(nextUriMetadata.DataValue.ToString())) + ", ";
                    jsonres += "\"PlayMedium\" : \"" + playMedium.DataValue + "\", ";
                    jsonres += "\"RecordMedium\" : \"" + recordMedium.DataValue + "\", ";
                    jsonres += "\"WriteStatus\" : \"" + writeStatus.DataValue + "\"";
                    jsonres += " }";
                    //
                    returnValue = jsonres;
                }
                break;
            case Commands.AvMedia_GetPositionInfo:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var currentTrack = new UPnPArgument("Track", (uint)0);
                    var trackDuration = new UPnPArgument("TrackDuration", "");
                    var trackMetadata = new UPnPArgument("TrackMetaData", "");
                    var trackUri = new UPnPArgument("TrackURI", "");
                    var relativeTime = new UPnPArgument("RelTime", "");
                    var absoluteTime = new UPnPArgument("AbsTime", "");
                    var relativeCount = new UPnPArgument("RelCount", (uint)0);
                    var absoluteCount = new UPnPArgument("AbsCount", (uint)0);
                    var args = new UPnPArgument[] { 
                        instanceId,
                        currentTrack,
                        trackDuration,
                        trackMetadata,
                        trackUri,
                        relativeTime,
                        absoluteTime,
                        relativeCount,
                        absoluteCount
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "GetPositionInfo", args);
                    //
                    string jsonres = "{";
                    jsonres += "\"Track\" : \"" + currentTrack.DataValue + "\",";
                    jsonres += "\"TrackDuration\" : \"" + trackDuration.DataValue + "\",";
                    jsonres += "\"TrackMetaData\" : " + MIG.Utility.Serialization.JsonSerialize(GetJsonFromXmlItem(trackMetadata.DataValue.ToString())) + ",";
                    jsonres += "\"TrackURI\" : \"" + trackUri.DataValue + "\",";
                    jsonres += "\"RelTime\" : \"" + relativeTime.DataValue + "\",";
                    jsonres += "\"AbsTime\" : \"" + absoluteTime.DataValue + "\",";
                    jsonres += "\"RelCount\" : \"" + relativeCount.DataValue + "\",";
                    jsonres += "\"AbsCount\" : \"" + absoluteCount.DataValue + "\"";
                    jsonres += "}";
                    //
                    returnValue = jsonres;
                }
                break;
            case Commands.AvMedia_SetUri:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var currentUri = new UPnPArgument("CurrentURI", request.GetOption(0));
                    var uriMetadata = new UPnPArgument("CurrentURIMetaData", "");
                    var args = new UPnPArgument[] { 
                        instanceId,
                        currentUri,
                        uriMetadata
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "SetAVTransportURI", args);
                }
                break;
            case Commands.AvMedia_Play:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var speed = new UPnPArgument("Speed", "1");
                    var args = new UPnPArgument[] { 
                        instanceId,
                        speed
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "Play", args);
                }
                break;
            case Commands.AvMedia_Pause:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var args = new UPnPArgument[] { 
                        instanceId
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "Pause", args);
                }
                break;
            case Commands.AvMedia_Seek:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var unit = new UPnPArgument("Unit", "REL_TIME");
                    var target = new UPnPArgument("Target", request.GetOption(0));
                    var args = new UPnPArgument[] { 
                        instanceId,
                        unit,
                        target
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "Seek", args);
                }
                break;
            case Commands.AvMedia_Stop:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var args = new UPnPArgument[] { 
                        instanceId
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "Stop", args);
                }
                break;
            case Commands.AvMedia_Prev:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var args = new UPnPArgument[] { 
                        instanceId
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "Previous", args);
                }
                break;
            case Commands.AvMedia_Next:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var args = new UPnPArgument[] { 
                        instanceId
                    };
                    InvokeUpnpDeviceService(device, "AVTransport", "Next", args);
                }
                break;
            case Commands.AvMedia_GetMute:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var channel = new UPnPArgument("Channel", "Master");
                    var currentMute = new UPnPArgument("CurrentMute", "");
                    var args = new UPnPArgument[] { 
                        instanceId,
                        channel,
                        currentMute
                    };
                    InvokeUpnpDeviceService(device, "RenderingControl", "GetMute", args);
                    returnValue = new ResponseText(currentMute.DataValue.ToString());
                }
                break;
            case Commands.AvMedia_SetMute:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var channel = new UPnPArgument("Channel", "Master");
                    var mute = new UPnPArgument("DesiredMute", request.GetOption(0) == "1" ? true : false);
                    var args = new UPnPArgument[] { 
                        instanceId,
                        channel,
                        mute
                    };
                    InvokeUpnpDeviceService(device, "RenderingControl", "SetMute", args);
                }
                break;
            case Commands.AvMedia_GetVolume:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var channel = new UPnPArgument("Channel", "Master");
                    var currentVolume = new UPnPArgument("CurrentVolume", "");
                    var args = new UPnPArgument[] { 
                        instanceId,
                        channel,
                        currentVolume
                    };
                    InvokeUpnpDeviceService(device, "RenderingControl", "GetVolume", args);
                    returnValue = new ResponseText(currentVolume.DataValue.ToString());
                }
                break;
            case Commands.AvMedia_SetVolume:
                {
                    var instanceId = new UPnPArgument("InstanceID", (uint)0);
                    var channel = new UPnPArgument("Channel", "Master");
                    var volume = new UPnPArgument("DesiredVolume", UInt16.Parse(request.GetOption(0)));
                    var args = new UPnPArgument[] { 
                        instanceId,
                        channel,
                        volume
                    };
                    InvokeUpnpDeviceService(device, "RenderingControl", "SetVolume", args);
                }
                break;
            }

            // raise event
            if (raiseEvent)
            {
                OnInterfacePropertyChanged(this.GetDomain(), device.UniqueDeviceName, "UPnP " + (device != null ? device.StandardDeviceType : "device"), eventParameter, eventValue);
            }

            return returnValue;
        }
Ejemplo n.º 24
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            ResponseText response = new ResponseText("OK");

            string nodeId = request.Address;
            string option = request.GetOption(0);

            Commands command;
            Enum.TryParse<Commands>(request.Command.Replace(".", "_"), out command);

            // Parse house/unit
            var houseCode = XTenLib.Utility.HouseCodeFromString(nodeId);
            var unitCode = XTenLib.Utility.UnitCodeFromString(nodeId);

            switch (command)
            {
            case Commands.Parameter_Status:
                x10lib.StatusRequest(houseCode, unitCode);
                break;
            case Commands.Control_On:
                x10lib.UnitOn(houseCode, unitCode);
                break;
            case Commands.Control_Off:
                x10lib.UnitOff(houseCode, unitCode);
                break;
            case Commands.Control_Bright:
                x10lib.Bright(houseCode, unitCode, int.Parse(option));
                break;
            case Commands.Control_Dim:
                x10lib.Dim(houseCode, unitCode, int.Parse(option));
                break;
            case Commands.Control_Level_Adjust:
                int adjvalue = int.Parse(option);
                //x10lib.Modules[nodeId].Level = ((double)adjvalue/100D);
                OnInterfacePropertyChanged(this.GetDomain(), nodeId, "X10 Module", ModuleEvents.Status_Level, x10lib.Modules[nodeId].Level);
                throw(new NotImplementedException("X10 CONTROL_LEVEL_ADJUST Not Implemented"));
                break;
            case Commands.Control_Level:
                int dimvalue = int.Parse(option) - (int)(x10lib.Modules[nodeId].Level * 100.0);
                if (dimvalue > 0)
                {
                    x10lib.Bright(houseCode, unitCode, dimvalue);
                }
                else if (dimvalue < 0)
                {
                    x10lib.Dim(houseCode, unitCode, -dimvalue);
                }
                break;
            case Commands.Control_Toggle:
                string huc = XTenLib.Utility.HouseUnitCodeFromEnum(houseCode, unitCode);
                if (x10lib.Modules[huc].Level == 0)
                {
                    x10lib.UnitOn(houseCode, unitCode);
                }
                else
                {
                    x10lib.UnitOff(houseCode, unitCode);
                }
                break;
            case Commands.Control_AllLightsOn:
                x10lib.AllLightsOn(houseCode);
                break;
            case Commands.Control_AllLightsOff:
                x10lib.AllUnitsOff(houseCode);
                break;
            }

            return response;
        }
Ejemplo n.º 25
0
            private void ZInvokeWorker(cTrace.cContext pParentContext)
            {
                var lContext = pParentContext.NewMethod(nameof(cCallbackSynchroniser), nameof(ZInvokeWorker));

                while (mInvokes.TryDequeue(out var lInvoke))
                {
                    try
                    {
                        switch (lInvoke.EventArgs)
                        {
                        case cMessagePropertyChangedEventArgs lEventArgs:

                            MessagePropertyChanged?.Invoke(mSender, lEventArgs);
                            break;

                        case cMailboxPropertyChangedEventArgs lEventArgs:

                            MailboxPropertyChanged?.Invoke(mSender, lEventArgs);
                            break;

                        case PropertyChangedEventArgs lEventArgs:

                            PropertyChanged?.Invoke(mSender, lEventArgs);
                            break;

                        case cResponseTextEventArgs lEventArgs:

                            ResponseText?.Invoke(mSender, lEventArgs);
                            break;

                        case cNetworkReceiveEventArgs lEventArgs:

                            NetworkReceive?.Invoke(mSender, lEventArgs);
                            break;

                        case cNetworkSendEventArgs lEventArgs:

                            NetworkSend?.Invoke(mSender, lEventArgs);
                            break;

                        case cMailboxMessageDeliveryEventArgs lEventArgs:

                            MailboxMessageDelivery?.Invoke(mSender, lEventArgs);
                            break;

                        case cActionIntEventArgs lEventArgs:

                            lEventArgs.Action(lEventArgs.Int);
                            break;

                        default:

                            lContext.TraceError("unknown event type", lInvoke.EventArgs);
                            break;
                        }
                    }
                    catch (Exception e)
                    {
                        lContext.TraceException("error when invoking event handler", e);
                        try { CallbackException?.Invoke(mSender, new cCallbackExceptionEventArgs(e)); }
                        catch { }
                    }

                    if (lInvoke.Releaser != null)
                    {
                        lInvoke.Releaser.Release(lContext);
                    }
                }
            }
Ejemplo n.º 26
0
 public void Init()
 {
     instance = new ResponseText();
 }
Ejemplo n.º 27
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            var response = new ResponseText("OK");

            string nodeId = lastAddressedModule = request.Address;
            string option = request.GetOption(0);

            Commands command;

            Enum.TryParse <Commands>(request.Command.Replace(".", "_"), out command);

            if (portName == Cm19LibDriverPort)
            {
                // Parse house/unit
                var houseCode = CM19Lib.Utility.HouseCodeFromString(nodeId);
                var unitCode  = CM19Lib.Utility.UnitCodeFromString(nodeId);
                var module    = GetSecurityModuleByAddress(nodeId, ModuleTypes.Switch);
                // module.CustomData is used to store the current level
                switch (command)
                {
                case Commands.Control_On:
                    cm19Lib.UnitOn(houseCode, unitCode);
                    module.CustomData = 1D;
                    UpdateModuleLevel(module);
                    break;

                case Commands.Control_Off:
                    cm19Lib.UnitOff(houseCode, unitCode);
                    module.CustomData = 0D;
                    UpdateModuleLevel(module);
                    break;

                case Commands.Control_Bright:
                    cm19Lib.Bright(houseCode);
                    module.CustomData = module.CustomData + (5 / 100D);
                    if (module.CustomData > 1)
                    {
                        module.CustomData = 1D;
                    }
                    UpdateModuleLevel(module);
                    break;

                case Commands.Control_Dim:
                    cm19Lib.Dim(houseCode);
                    module.CustomData = module.CustomData - (5 / 100D);
                    if (module.CustomData < 0)
                    {
                        module.CustomData = 0D;
                    }
                    UpdateModuleLevel(module);
                    break;

                case Commands.Control_Level:
                    int dimValue = (int.Parse(option) - (int)(module.CustomData * 100.0)) / 5;
                    if (dimValue > 0)
                    {
                        cm19Lib.Bright(houseCode);
                        for (int i = 0; i < (dimValue / Cm19Manager.SendRepeatCount); i++)
                        {
                            cm19Lib.Bright(houseCode);
                        }
                    }
                    else if (dimValue < 0)
                    {
                        cm19Lib.Dim(houseCode);
                        for (int i = 0; i < -(dimValue / Cm19Manager.SendRepeatCount); i++)
                        {
                            cm19Lib.Dim(houseCode);
                        }
                    }
                    module.CustomData = module.CustomData + (dimValue * 5 / 100D);
                    UpdateModuleLevel(module);
                    break;

                case Commands.Control_Toggle:
                    if (module.CustomData == 0D)
                    {
                        cm19Lib.UnitOn(houseCode, unitCode);
                        UpdateModuleLevel(module);
                    }
                    else
                    {
                        cm19Lib.UnitOff(houseCode, unitCode);
                        UpdateModuleLevel(module);
                    }
                    break;

                case Commands.Control_AllLightsOn:
                    cm19Lib.AllLightsOn(houseCode);
                    // TODO: update modules status
                    break;

                case Commands.Control_AllUnitsOff:
                    cm19Lib.AllUnitsOff(houseCode);
                    // TODO: update modules status
                    break;

                case Commands.Control_RfSend:
                    byte[] data = CM19Lib.Utility.StringToByteArray(option.Replace(" ", ""));
                    cm19Lib.SendMessage(data);
                    break;
                }
            }
            else
            {
                // Parse house/unit
                var houseCode = XTenLib.Utility.HouseCodeFromString(nodeId);
                var unitCode  = XTenLib.Utility.UnitCodeFromString(nodeId);
                switch (command)
                {
                case Commands.Parameter_Status:
                    x10Lib.StatusRequest(houseCode, unitCode);
                    break;

                case Commands.Control_On:
                    x10Lib.UnitOn(houseCode, unitCode);
                    break;

                case Commands.Control_Off:
                    x10Lib.UnitOff(houseCode, unitCode);
                    break;

                case Commands.Control_Bright:
                    x10Lib.Bright(houseCode, unitCode, int.Parse(option));
                    break;

                case Commands.Control_Dim:
                    x10Lib.Dim(houseCode, unitCode, int.Parse(option));
                    break;

                case Commands.Control_Level_Adjust:
                    //int adjvalue = int.Parse(option);
                    //x10Lib.Modules[nodeId].Level = ((double)adjvalue/100D);
                    OnInterfacePropertyChanged(this.GetDomain(), nodeId, "X10 Module", ModuleEvents.Status_Level, x10Lib.Modules[nodeId].Level);
                    throw(new NotImplementedException("X10 CONTROL_LEVEL_ADJUST Not Implemented"));
                    break;

                case Commands.Control_Level:
                    int dimvalue = int.Parse(option) - (int)(x10Lib.Modules[nodeId].Level * 100.0);
                    if (dimvalue > 0)
                    {
                        x10Lib.Bright(houseCode, unitCode, dimvalue);
                    }
                    else if (dimvalue < 0)
                    {
                        x10Lib.Dim(houseCode, unitCode, -dimvalue);
                    }
                    break;

                case Commands.Control_Toggle:
                    string huc = XTenLib.Utility.HouseUnitCodeFromEnum(houseCode, unitCode);
                    if (x10Lib.Modules[huc].Level == 0)
                    {
                        x10Lib.UnitOn(houseCode, unitCode);
                    }
                    else
                    {
                        x10Lib.UnitOff(houseCode, unitCode);
                    }
                    break;

                case Commands.Control_AllLightsOn:
                    x10Lib.AllLightsOn(houseCode);
                    break;

                case Commands.Control_AllUnitsOff:
                    x10Lib.AllUnitsOff(houseCode);
                    break;

                case Commands.Control_RfSend:
                    byte[] data = CM19Lib.Utility.StringToByteArray("EB" + option.Replace(" ", ""));
                    // SendRepeatCount is not implemented in XTenLib, so a for loop in required here
                    for (int i = 0; i < Cm19Manager.SendRepeatCount; i++)
                    {
                        x10Lib.SendMessage(data);
                        Thread.Sleep(Cm19Manager.SendPauseMs);
                    }
                    break;
                }
            }

            return(response);
        }
Ejemplo n.º 28
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            ResponseText response = new ResponseText("OK");

            string nodeId = request.Address;
            string option = request.GetOption(0);

            Commands command;

            Enum.TryParse <Commands>(request.Command.Replace(".", "_"), out command);

            // Parse house/unit
            var houseCode = XTenLib.Utility.HouseCodeFromString(nodeId);
            var unitCode  = XTenLib.Utility.UnitCodeFromString(nodeId);

            switch (command)
            {
            case Commands.Parameter_Status:
                x10lib.StatusRequest(houseCode, unitCode);
                break;

            case Commands.Control_On:
                x10lib.UnitOn(houseCode, unitCode);
                break;

            case Commands.Control_Off:
                x10lib.UnitOff(houseCode, unitCode);
                break;

            case Commands.Control_Bright:
                x10lib.Bright(houseCode, unitCode, int.Parse(option));
                break;

            case Commands.Control_Dim:
                x10lib.Dim(houseCode, unitCode, int.Parse(option));
                break;

            case Commands.Control_Level_Adjust:
                int adjvalue = int.Parse(option);
                //x10lib.Modules[nodeId].Level = ((double)adjvalue/100D);
                OnInterfacePropertyChanged(this.GetDomain(), nodeId, "X10 Module", ModuleEvents.Status_Level, x10lib.Modules[nodeId].Level);
                throw(new NotImplementedException("X10 CONTROL_LEVEL_ADJUST Not Implemented"));
                break;

            case Commands.Control_Level:
                int dimvalue = int.Parse(option) - (int)(x10lib.Modules[nodeId].Level * 100.0);
                if (dimvalue > 0)
                {
                    x10lib.Bright(houseCode, unitCode, dimvalue);
                }
                else if (dimvalue < 0)
                {
                    x10lib.Dim(houseCode, unitCode, -dimvalue);
                }
                break;

            case Commands.Control_Toggle:
                string huc = XTenLib.Utility.HouseUnitCodeFromEnum(houseCode, unitCode);
                if (x10lib.Modules[huc].Level == 0)
                {
                    x10lib.UnitOn(houseCode, unitCode);
                }
                else
                {
                    x10lib.UnitOff(houseCode, unitCode);
                }
                break;

            case Commands.Control_AllLightsOn:
                x10lib.AllLightsOn(houseCode);
                break;

            case Commands.Control_AllLightsOff:
                x10lib.AllUnitsOff(houseCode);
                break;
            }

            return(response);
        }
Ejemplo n.º 29
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            object returnValue    = null;
            bool   raiseEvent     = false;
            string eventParameter = "Status.Unhandled";
            string eventValue     = "";
            //
            var device = GetUpnpDevice(request.Address);

            Commands command;

            Enum.TryParse <Commands>(request.Command.Replace(".", "_"), out command);

            // TODO: ??? Commands: SwitchPower, Dimming

            switch (command)
            {
            case Commands.Control_On:
            case Commands.Control_Off:
            {
                bool commandValue = (command == Commands.Control_On ? true : false);
                var  newValue     = new UPnPArgument("newTargetValue", commandValue);
                var  args         = new UPnPArgument[] {
                    newValue
                };
                InvokeUpnpDeviceService(device, "SwitchPower", "SetTarget", args);
                //
                raiseEvent     = true;
                eventParameter = "Status.Level";
                eventValue     = (commandValue ? "1" : "0");
            }
            break;

            case Commands.Control_Level:
            {
                var newvalue = new UPnPArgument("NewLoadLevelTarget", (byte)uint.Parse(request.GetOption(0)));
                var args     = new UPnPArgument[] {
                    newvalue
                };
                InvokeUpnpDeviceService(device, "Dimming", "SetLoadLevelTarget", args);
                //
                raiseEvent     = true;
                eventParameter = "Status.Level";
                eventValue     = (double.Parse(request.GetOption(0)) / 100d).ToString(System.Globalization.CultureInfo.InvariantCulture);
            }
            break;

            case Commands.Control_Toggle:
                // TODO: not implemented yet
                break;

            case Commands.AvMedia_GetItem:
            {
                string deviceId = request.Address;
                string id       = request.GetOption(0);
                //
                var objectId       = new UPnPArgument("ObjectID", id);
                var flags          = new UPnPArgument("BrowseFlag", "BrowseMetadata");
                var filter         = new UPnPArgument("Filter", "upnp:album,upnp:artist,upnp:genre,upnp:title,res@size,res@duration,res@bitrate,res@sampleFrequency,res@bitsPerSample,res@nrAudioChannels,res@protocolInfo,res@protection,res@importUri");
                var startIndex     = new UPnPArgument("StartingIndex", (uint)0);
                var requestedCount = new UPnPArgument("RequestedCount", (uint)1);
                var sortCriteria   = new UPnPArgument("SortCriteria", "");
                //
                var result         = new UPnPArgument("Result", "");
                var returnedNumber = new UPnPArgument("NumberReturned", "");
                var totalMatches   = new UPnPArgument("TotalMatches", "");
                var updateId       = new UPnPArgument("UpdateID", "");
                //
                InvokeUpnpDeviceService(device, "ContentDirectory", "Browse", new UPnPArgument[] {
                        objectId,
                        flags,
                        filter,
                        startIndex,
                        requestedCount,
                        sortCriteria,
                        result,
                        returnedNumber,
                        totalMatches,
                        updateId
                    });
                //
                try
                {
                    string ss   = result.DataValue.ToString();
                    var    item = XDocument.Parse(ss, LoadOptions.SetBaseUri).Descendants().Where(ii => ii.Name.LocalName == "item").First();
                    returnValue = MIG.Utility.Serialization.JsonSerialize(item, true);
                }
                catch
                {
                    // TODO: MigService.Log.Error(e);
                }
            }
            break;

            case Commands.AvMedia_GetUri:
            {
                string deviceId = request.Address;
                string id       = request.GetOption(0);
                //
                var objectId       = new UPnPArgument("ObjectID", id);
                var flags          = new UPnPArgument("BrowseFlag", "BrowseMetadata");
                var filter         = new UPnPArgument("Filter", "upnp:album,upnp:artist,upnp:genre,upnp:title,res@size,res@duration,res@bitrate,res@sampleFrequency,res@bitsPerSample,res@nrAudioChannels,res@protocolInfo,res@protection,res@importUri");
                var startIndex     = new UPnPArgument("StartingIndex", (uint)0);
                var requestedCount = new UPnPArgument("RequestedCount", (uint)1);
                var sortCriteria   = new UPnPArgument("SortCriteria", "");
                //
                var result         = new UPnPArgument("Result", "");
                var returnedNumber = new UPnPArgument("NumberReturned", "");
                var totalMatches   = new UPnPArgument("TotalMatches", "");
                var updateId       = new UPnPArgument("UpdateID", "");
                //
                InvokeUpnpDeviceService(device, "ContentDirectory", "Browse", new UPnPArgument[] {
                        objectId,
                        flags,
                        filter,
                        startIndex,
                        requestedCount,
                        sortCriteria,
                        result,
                        returnedNumber,
                        totalMatches,
                        updateId
                    });
                //
                try
                {
                    string ss   = result.DataValue.ToString();
                    var    item = XDocument.Parse(ss, LoadOptions.SetBaseUri).Descendants().Where(ii => ii.Name.LocalName == "item").First();
                    //
                    foreach (var i in item.Elements())
                    {
                        var protocolUri = i.Attribute("protocolInfo");
                        if (protocolUri != null)
                        {
                            returnValue = new ResponseText(i.Value);
                            break;
                        }
                    }
                }
                catch
                {
                    // TODO: MigService.Log.Error(e);
                }
            }
            break;

            case Commands.AvMedia_Browse:
            {
                string deviceId = request.Address;
                string id       = request.GetOption(0);
                //
                var objectId       = new UPnPArgument("ObjectID", id);
                var flags          = new UPnPArgument("BrowseFlag", "BrowseDirectChildren");
                var filter         = new UPnPArgument("Filter", "upnp:album,upnp:artist,upnp:genre,upnp:title,res@size,res@duration,res@bitrate,res@sampleFrequency,res@bitsPerSample,res@nrAudioChannels,res@protocolInfo,res@protection,res@importUri");
                var startIndex     = new UPnPArgument("StartingIndex", (uint)0);
                var requestedCount = new UPnPArgument("RequestedCount", (uint)0);
                var sortCriteria   = new UPnPArgument("SortCriteria", "");
                //
                var result         = new UPnPArgument("Result", "");
                var returnedNumber = new UPnPArgument("NumberReturned", "");
                var totalMatches   = new UPnPArgument("TotalMatches", "");
                var updateId       = new UPnPArgument("UpdateID", "");
                //
                InvokeUpnpDeviceService(device, "ContentDirectory", "Browse", new UPnPArgument[] {
                        objectId,
                        flags,
                        filter,
                        startIndex,
                        requestedCount,
                        sortCriteria,
                        result,
                        returnedNumber,
                        totalMatches,
                        updateId
                    });
                //
                try
                {
                    string ss   = result.DataValue.ToString();
                    var    root = XDocument.Parse(ss, LoadOptions.SetBaseUri).Elements();
                    //
                    string jsonres = "[";
                    foreach (var i in root.Elements())
                    {
                        string itemId    = i.Attribute("id").Value;
                        string itemTitle = i.Descendants().Where(n => n.Name.LocalName == "title").First().Value;
                        string itemClass = i.Descendants().Where(n => n.Name.LocalName == "class").First().Value;
                        jsonres += "{ \"Id\" : \"" + itemId + "\", \"Title\" : \"" + itemTitle.Replace("\"", "\\\"") + "\", \"Class\" : \"" + itemClass + "\" },\n";
                    }
                    jsonres = jsonres.TrimEnd(',', '\n') + "]";
                    //
                    returnValue = jsonres;
                }
                catch
                {
                    // TODO: MigService.Log.Error(e);
                }
            }
            break;

            case Commands.AvMedia_GetTransportInfo:
            {
                var instanceId      = new UPnPArgument("InstanceID", (uint)0);
                var transportState  = new UPnPArgument("CurrentTransportState", "");
                var transportStatus = new UPnPArgument("CurrentTransportStatus", "");
                var currentSpeed    = new UPnPArgument("CurrentSpeed", "");
                var args            = new UPnPArgument[] {
                    instanceId,
                    transportState,
                    transportStatus,
                    currentSpeed
                };
                InvokeUpnpDeviceService(device, "AVTransport", "GetTransportInfo", args);
                //
                string jsonres = "{ ";
                jsonres += "\"CurrentTransportState\" : \"" + transportState.DataValue + "\", ";
                jsonres += "\"CurrentTransportStatus\" : \"" + transportStatus.DataValue + "\", ";
                jsonres += "\"CurrentSpeed\" : \"" + currentSpeed.DataValue + "\"";
                jsonres += " }";
                //
                returnValue = jsonres;
            }
            break;

            case Commands.AvMedia_GetMediaInfo:
            {
                var instanceId         = new UPnPArgument("InstanceID", (uint)0);
                var nrTracks           = new UPnPArgument("NrTracks", (uint)0);
                var mediaDuration      = new UPnPArgument("MediaDuration", "");
                var currentUri         = new UPnPArgument("CurrentURI", "");
                var currentUriMetadata = new UPnPArgument("CurrentURIMetaData", "");
                var nextUri            = new UPnPArgument("NextURI", "");
                var nextUriMetadata    = new UPnPArgument("NextURIMetaData", "");
                var playMedium         = new UPnPArgument("PlayMedium", "");
                var recordMedium       = new UPnPArgument("RecordMedium", "");
                var writeStatus        = new UPnPArgument("WriteStatus", "");
                var args = new UPnPArgument[] {
                    instanceId,
                    nrTracks,
                    mediaDuration,
                    currentUri,
                    currentUriMetadata,
                    nextUri,
                    nextUriMetadata,
                    playMedium,
                    recordMedium,
                    writeStatus
                };
                InvokeUpnpDeviceService(device, "AVTransport", "GetMediaInfo", args);
                //
                string jsonres = "{ ";
                jsonres += "\"NrTracks\" : \"" + nrTracks.DataValue + "\", ";
                jsonres += "\"MediaDuration\" : \"" + mediaDuration.DataValue + "\", ";
                jsonres += "\"CurrentURI\" : \"" + currentUri.DataValue + "\", ";
                jsonres += "\"CurrentURIMetaData\" : " + MIG.Utility.Serialization.JsonSerialize(GetJsonFromXmlItem(currentUriMetadata.DataValue.ToString())) + ", ";
                jsonres += "\"NextURI\" : \"" + nextUri.DataValue + "\", ";
                jsonres += "\"NextURIMetaData\" : " + MIG.Utility.Serialization.JsonSerialize(GetJsonFromXmlItem(nextUriMetadata.DataValue.ToString())) + ", ";
                jsonres += "\"PlayMedium\" : \"" + playMedium.DataValue + "\", ";
                jsonres += "\"RecordMedium\" : \"" + recordMedium.DataValue + "\", ";
                jsonres += "\"WriteStatus\" : \"" + writeStatus.DataValue + "\"";
                jsonres += " }";
                //
                returnValue = jsonres;
            }
            break;

            case Commands.AvMedia_GetPositionInfo:
            {
                var instanceId    = new UPnPArgument("InstanceID", (uint)0);
                var currentTrack  = new UPnPArgument("Track", (uint)0);
                var trackDuration = new UPnPArgument("TrackDuration", "");
                var trackMetadata = new UPnPArgument("TrackMetaData", "");
                var trackUri      = new UPnPArgument("TrackURI", "");
                var relativeTime  = new UPnPArgument("RelTime", "");
                var absoluteTime  = new UPnPArgument("AbsTime", "");
                var relativeCount = new UPnPArgument("RelCount", (uint)0);
                var absoluteCount = new UPnPArgument("AbsCount", (uint)0);
                var args          = new UPnPArgument[] {
                    instanceId,
                    currentTrack,
                    trackDuration,
                    trackMetadata,
                    trackUri,
                    relativeTime,
                    absoluteTime,
                    relativeCount,
                    absoluteCount
                };
                InvokeUpnpDeviceService(device, "AVTransport", "GetPositionInfo", args);
                //
                string jsonres = "{";
                jsonres += "\"Track\" : \"" + currentTrack.DataValue + "\",";
                jsonres += "\"TrackDuration\" : \"" + trackDuration.DataValue + "\",";
                jsonres += "\"TrackMetaData\" : " + MIG.Utility.Serialization.JsonSerialize(GetJsonFromXmlItem(trackMetadata.DataValue.ToString())) + ",";
                jsonres += "\"TrackURI\" : \"" + trackUri.DataValue + "\",";
                jsonres += "\"RelTime\" : \"" + relativeTime.DataValue + "\",";
                jsonres += "\"AbsTime\" : \"" + absoluteTime.DataValue + "\",";
                jsonres += "\"RelCount\" : \"" + relativeCount.DataValue + "\",";
                jsonres += "\"AbsCount\" : \"" + absoluteCount.DataValue + "\"";
                jsonres += "}";
                //
                returnValue = jsonres;
            }
            break;

            case Commands.AvMedia_SetUri:
            {
                var instanceId  = new UPnPArgument("InstanceID", (uint)0);
                var currentUri  = new UPnPArgument("CurrentURI", request.GetOption(0));
                var uriMetadata = new UPnPArgument("CurrentURIMetaData", "");
                var args        = new UPnPArgument[] {
                    instanceId,
                    currentUri,
                    uriMetadata
                };
                InvokeUpnpDeviceService(device, "AVTransport", "SetAVTransportURI", args);
            }
            break;

            case Commands.AvMedia_Play:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var speed      = new UPnPArgument("Speed", "1");
                var args       = new UPnPArgument[] {
                    instanceId,
                    speed
                };
                InvokeUpnpDeviceService(device, "AVTransport", "Play", args);
            }
            break;

            case Commands.AvMedia_Pause:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var args       = new UPnPArgument[] {
                    instanceId
                };
                InvokeUpnpDeviceService(device, "AVTransport", "Pause", args);
            }
            break;

            case Commands.AvMedia_Seek:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var unit       = new UPnPArgument("Unit", "REL_TIME");
                var target     = new UPnPArgument("Target", request.GetOption(0));
                var args       = new UPnPArgument[] {
                    instanceId,
                    unit,
                    target
                };
                InvokeUpnpDeviceService(device, "AVTransport", "Seek", args);
            }
            break;

            case Commands.AvMedia_Stop:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var args       = new UPnPArgument[] {
                    instanceId
                };
                InvokeUpnpDeviceService(device, "AVTransport", "Stop", args);
            }
            break;

            case Commands.AvMedia_Prev:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var args       = new UPnPArgument[] {
                    instanceId
                };
                InvokeUpnpDeviceService(device, "AVTransport", "Previous", args);
            }
            break;

            case Commands.AvMedia_Next:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var args       = new UPnPArgument[] {
                    instanceId
                };
                InvokeUpnpDeviceService(device, "AVTransport", "Next", args);
            }
            break;

            case Commands.AvMedia_GetMute:
            {
                var instanceId  = new UPnPArgument("InstanceID", (uint)0);
                var channel     = new UPnPArgument("Channel", "Master");
                var currentMute = new UPnPArgument("CurrentMute", "");
                var args        = new UPnPArgument[] {
                    instanceId,
                    channel,
                    currentMute
                };
                InvokeUpnpDeviceService(device, "RenderingControl", "GetMute", args);
                returnValue = new ResponseText(currentMute.DataValue.ToString());
            }
            break;

            case Commands.AvMedia_SetMute:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var channel    = new UPnPArgument("Channel", "Master");
                var mute       = new UPnPArgument("DesiredMute", request.GetOption(0) == "1" ? true : false);
                var args       = new UPnPArgument[] {
                    instanceId,
                    channel,
                    mute
                };
                InvokeUpnpDeviceService(device, "RenderingControl", "SetMute", args);
            }
            break;

            case Commands.AvMedia_GetVolume:
            {
                var instanceId    = new UPnPArgument("InstanceID", (uint)0);
                var channel       = new UPnPArgument("Channel", "Master");
                var currentVolume = new UPnPArgument("CurrentVolume", "");
                var args          = new UPnPArgument[] {
                    instanceId,
                    channel,
                    currentVolume
                };
                InvokeUpnpDeviceService(device, "RenderingControl", "GetVolume", args);
                returnValue = new ResponseText(currentVolume.DataValue.ToString());
            }
            break;

            case Commands.AvMedia_SetVolume:
            {
                var instanceId = new UPnPArgument("InstanceID", (uint)0);
                var channel    = new UPnPArgument("Channel", "Master");
                var volume     = new UPnPArgument("DesiredVolume", UInt16.Parse(request.GetOption(0)));
                var args       = new UPnPArgument[] {
                    instanceId,
                    channel,
                    volume
                };
                InvokeUpnpDeviceService(device, "RenderingControl", "SetVolume", args);
            }
            break;
            }

            // raise event
            if (raiseEvent)
            {
                OnInterfacePropertyChanged(this.GetDomain(), device.UniqueDeviceName, "UPnP " + (device != null ? device.StandardDeviceType : "device"), eventParameter, eventValue);
            }

            return(returnValue);
        }
        /// <summary>
        /// Handles the control of the interface from the Mig / HG web interface
        /// </summary>
        /// <param name="request">request body</param>
        /// <returns>object</returns>
        /// <exception cref="ArgumentOutOfRangeException">Argument out of range</exception>
        public object InterfaceControl(MigInterfaceCommand request)
        {
            var returnValue = new ResponseText("OK");

            var raiseEvent = false;

            // TODO use / update this param
            var eventParameter = "Status.Level";

            var eventValue = string.Empty;

            Enum.TryParse(request.Command.Replace(".", "_"), out Commands command);
            var dc = new DeviceController(Convert.ToInt64(request.Address), this.gatewayConnection.Client);

            Log.Debug("Command: {0}", command);

            switch (command)
            {
            case Commands.Control_On:
                raiseEvent = true;
                dc.TurnOn();
                break;

            case Commands.Control_Off:
                raiseEvent = true;
                dc.TurnOff();
                break;

            case Commands.Control_Toggle:
                throw new NotImplementedException();

            case Commands.Control_Colour:
                raiseEvent = true;
                var colour = request.GetOption(0);

                // todo parse enum
                Log.Debug("Setting Colour to {0}", colour);
                dc.SetColor(colour);
                break;

            case Commands.Controller_Reboot:
                this.gatewayController.Reboot();
                Log.Info("Rebooting controller");
                break;

            case Commands.Battery_Get:
                var dev = dc.GetTradFriDevice();
                returnValue = new ResponseText(dev.Info.Battery.ToString());
                break;

            default:
                Log.Error(new ArgumentOutOfRangeException(), "Command [{0}] not recognised", command);
                break;
            }

            if (raiseEvent)
            {
                this.OnInterfacePropertyChanged(this.GetDomain(), request.Address, "Tradfri Node", eventParameter, eventValue);
            }

            return(returnValue);
        }
Ejemplo n.º 31
0
 private ResponseText GetResponseValue(byte nodeNumber, string eventPath)
 {
     ResponseText returnValue = new ResponseText("ERR_TIMEOUT");
     InterfacePropertyChangedEventHandler eventHandler = new InterfacePropertyChangedEventHandler((sender, property) =>
     {
         if (property.EventData.Source == nodeNumber.ToString() && property.EventData.Property == eventPath)
         {
             returnValue = new ResponseText(property.EventData.Value.ToString());
         }
     });
     InterfacePropertyChanged += eventHandler;
     Thread t = new Thread(() =>
     {
         int timeout = 0;
         int delay = 100;
         while (returnValue.ResponseValue == "ERR_TIMEOUT" && timeout < ZWaveMessage.SendMessageTimeoutMs / delay)
         {
             Thread.Sleep(delay);
             timeout++;
         }
     });
     t.Start();
     t.Join(ZWaveMessage.SendMessageTimeoutMs);
     InterfacePropertyChanged -= eventHandler;
     return returnValue;
 }
Ejemplo n.º 32
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            ResponseText returnValue = new ResponseText("OK");
            bool raiseEvent = false;
            string eventParameter = ModuleEvents.Status_Level;
            string eventValue = "";

            string nodeId = request.Address;
            Commands command;
            Enum.TryParse<Commands>(request.Command.Replace(".", "_"), out command);
            ZWaveNode node = null;

            byte nodeNumber = 0;
            if (byte.TryParse(nodeId, out nodeNumber))
            {
                if (nodeNumber > 0)
                    node = controller.GetNode(nodeNumber);
                switch (command)
                {

                case Commands.Controller_Discovery:
                    controller.Discovery();
                    break;

                case Commands.Controller_SoftReset:
                    controller.SoftReset();
                    break;

                case Commands.Controller_HardReset:
                    controller.HardReset();
                    controller.Discovery();
                    break;

                case Commands.Controller_HealNetwork:
                    controller.HealNetwork();
                    break;

                case Commands.Controller_NodeNeighborUpdate:
                    controller.RequestNeighborsUpdateOptions(nodeNumber);
                    controller.RequestNeighborsUpdate(nodeNumber);
                    controller.GetNeighborsRoutingInfo(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_RoutingInfo);
                    break;

                case Commands.Controller_NodeRoutingInfo:
                    controller.GetNeighborsRoutingInfo(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_RoutingInfo);
                    break;

                case Commands.Controller_NodeAdd:
                    lastAddedNode = 0;
                    controller.BeginNodeAdd();
                    for (int i = 0; i < 20; i++)
                    {
                        if (lastAddedNode > 0)
                        {
                            break;
                        }
                        Thread.Sleep(500);
                    }
                    controller.StopNodeAdd();
                    returnValue = new ResponseText(lastAddedNode.ToString());
                    break;

                case Commands.Controller_NodeRemove:
                    lastRemovedNode = 0;
                    controller.BeginNodeRemove();
                    for (int i = 0; i < 20; i++)
                    {
                        if (lastRemovedNode > 0)
                        {
                            break;
                        }
                        Thread.Sleep(500);
                    }
                    controller.StopNodeRemove();
                    returnValue = new ResponseText(lastRemovedNode.ToString());
                    break;

                case Commands.Basic_Set:
                    {
                        raiseEvent = true;
                        var level = int.Parse(request.GetOption(0));
                        eventValue = level.ToString(CultureInfo.InvariantCulture);
                        Basic.Set(node, (byte)level);
                    }
                    break;

                case Commands.Basic_Get:
                    Basic.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Basic);
                    break;

                case Commands.SwitchBinary_Set:
                    {
                        raiseEvent = true;
                        var level = int.Parse(request.GetOption(0));
                        eventValue = level.ToString(CultureInfo.InvariantCulture);
                        SwitchBinary.Set(node, (byte)level);
                    }
                    break;

                case Commands.SwitchBinary_Get:
                    SwitchBinary.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_SwitchBinary);
                    break;

                case Commands.SwitchMultilevel_Set:
                    {
                        raiseEvent = true;
                        var level = int.Parse(request.GetOption(0));
                        eventValue = level.ToString(CultureInfo.InvariantCulture);
                        SwitchMultilevel.Set(node, (byte)level);
                    }
                    break;

                case Commands.SwitchMultilevel_Get:
                    SwitchMultilevel.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_SwitchMultilevel);
                    break;

                case Commands.MultiInstance_GetCount:
                    {
                        string commandType = request.GetOption(0).Replace(".", "");
                        switch (commandType)
                        {
                        case "SwitchBinary":
                            MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SwitchBinary);
                            break;
                        case "SwitchMultiLevel":
                            MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SwitchMultilevel);
                            break;
                        case "SensorBinary":
                            MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SensorBinary);
                            break;
                        case "SensorMultiLevel":
                            MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SensorMultilevel);
                            break;
                        }
                        returnValue = GetResponseValue(nodeNumber, EventPath_MultiInstance + "." + commandType + ".Count");
                    }
                    break;

                case Commands.MultiInstance_Get:
                    {
                        byte instance = (byte)int.Parse(request.GetOption(1));
                        string commandType = request.GetOption(0).Replace(".", "");
                        switch (commandType)
                        {
                        case "SwitchBinary":
                            MultiInstance.SwitchBinaryGet(node, instance);
                            break;
                        case "SwitchMultiLevel":
                            MultiInstance.SwitchMultiLevelGet(node, instance);
                            break;
                        case "SensorBinary":
                            MultiInstance.SensorBinaryGet(node, instance);
                            break;
                        case "SensorMultiLevel":
                            MultiInstance.SensorMultiLevelGet(node, instance);
                            break;
                        }
                        returnValue = GetResponseValue(nodeNumber, EventPath_MultiInstance + "." + commandType + "." + instance);
                    }
                    break;

                case Commands.MultiInstance_Set:
                    {
                        byte instance = (byte)int.Parse(request.GetOption(1));
                        int value = int.Parse(request.GetOption(2));
                        //
                        //raisepropchanged = true;
                        //parampath += "." + instance; // Status.Level.<instance>
                        //
                        switch (request.GetOption(0))
                        {
                        case "Switch.Binary":
                            MultiInstance.SwitchBinarySet(node, instance, value);
                        //raiseparam = (double.Parse(request.GetOption(2)) / 255).ToString();
                            break;
                        case "Switch.MultiLevel":
                            MultiInstance.SwitchMultiLevelSet(node, instance, value);
                        //raiseparam = (double.Parse(request.GetOption(2)) / 100).ToString(); // TODO: should it be 99 ?
                            break;
                        }
                    }
                    break;

                case Commands.SensorBinary_Get:
                    SensorBinary.Get(node);
                    break;

                case Commands.SensorMultiLevel_Get:
                    SensorMultilevel.Get(node);
                    break;

                case Commands.Meter_Get:
                // see ZWaveLib Sensor.cs for EnergyMeterScale options
                    int scaleType = 0;
                    int.TryParse(request.GetOption(0), out scaleType);
                    Meter.Get(node, (byte)(scaleType << 0x03));
                    break;

                case Commands.Meter_SupportedGet:
                    Meter.GetSupported(node);
                    break;

                case Commands.Meter_Reset:
                    Meter.Reset(node);
                    break;

                case Commands.NodeInfo_Get:
                    controller.GetNodeInformationFrame(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_NodeInfo);
                    break;

                case Commands.Version_Report:
                    ZWaveLib.CommandClasses.Version.Report(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_VersionReport);
                    break;

                case Commands.Battery_Get:
                    Battery.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Battery);
                    break;

                case Commands.Association_Set:
                    Association.Set(node, (byte)int.Parse(request.GetOption(0)), (byte)int.Parse(request.GetOption(1)));
                    break;

                case Commands.Association_Get:
                    byte group = (byte)int.Parse(request.GetOption(0));
                    Association.Get(node, group);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Associations + "." + group);
                    break;

                case Commands.Association_Remove:
                    Association.Remove(node, (byte)int.Parse(request.GetOption(0)), (byte)int.Parse(request.GetOption(1)));
                    break;

                case Commands.ManufacturerSpecific_Get:
                    ManufacturerSpecific.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_ManufacturerSpecific);
                    break;

                case Commands.Config_ParameterSet:
                    Configuration.Set(node, (byte)int.Parse(request.GetOption(0)), int.Parse(request.GetOption(1)));
                    break;

                case Commands.Config_ParameterGet:
                    byte position = (byte)int.Parse(request.GetOption(0));
                    Configuration.Get(node, position);
                    returnValue = GetResponseValue(nodeNumber, EventPath_ConfigVariables + "." + position);
                    break;

                case Commands.WakeUp_Get:
                    WakeUp.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_WakeUpInterval);
                    break;

                case Commands.WakeUp_Set:
                    WakeUp.Set(node, uint.Parse(request.GetOption(0)));
                    break;

                case Commands.WakeUp_SendToSleep:
                    WakeUp.SendToSleep(node);
                    break;

                case Commands.WakeUp_GetAlwaysAwake:
                    returnValue = new ResponseText(WakeUp.GetAlwaysAwake(node) ? "1" : "0");
                    break;

                case Commands.WakeUp_SetAlwaysAwake:
                    WakeUp.SetAlwaysAwake(node, uint.Parse(request.GetOption(0)) == 1 ? true : false);
                    break;

                case Commands.Version_Get:
                    returnValue = new ResponseText("ERROR");
                    CommandClass cclass;
                    Enum.TryParse<CommandClass>(request.GetOption(0), out cclass);
                    if (cclass != CommandClass.NotSet)
                    {
                        var nodeCclass = node.GetCommandClass(cclass);
                        if (nodeCclass != null && nodeCclass.Version != 0)
                        {
                            returnValue = new ResponseText(nodeCclass.Version.ToString());
                        }
                        else
                        {
                            ZWaveLib.CommandClasses.Version.Get(node, cclass);
                            returnValue = GetResponseValue(nodeNumber, "ZWaveNode.Version." + cclass);
                        }
                    }
                    break;

                case Commands.Version_GetAll:
                    controller.GetNodeCcsVersion(node);
                    break;

                case Commands.Control_On:
                    raiseEvent = true;
                    double lastLevel = GetNormalizedValue((double)GetNodeLastLevel(node));
                    eventValue = lastLevel > 0 ? lastLevel.ToString(CultureInfo.InvariantCulture) : "1";
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                        SwitchMultilevel.Set(node, 0xFF);
                    else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                        SwitchBinary.Set(node, 0xFF);
                    else
                        Basic.Set(node, 0xFF);
                    SetNodeLevel(node, 0xFF);
                    break;

                case Commands.Control_Off:
                    raiseEvent = true;
                    eventValue = "0";
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                        SwitchMultilevel.Set(node, 0x00);
                    else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                        SwitchBinary.Set(node, 0x00);
                    else
                        Basic.Set(node, 0x00);
                    SetNodeLevel(node, 0x00);
                    break;

                case Commands.Control_Level:
                    {
                        raiseEvent = true;
                        var level = int.Parse(request.GetOption(0));
                        eventValue = Math.Round(level / 100D, 2).ToString(CultureInfo.InvariantCulture);
                        // the max value should be obtained from node parameters specifications,
                        // here we assume that the commonly used interval is [0-99] for most multilevel switches
                        if (level >= 100)
                            level = 99;
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                            SwitchMultilevel.Set(node, (byte)level);
                        else
                            Basic.Set(node, (byte)level);
                        SetNodeLevel(node, (byte)level);
                    }
                    break;

                case Commands.Control_Toggle:
                    raiseEvent = true;
                    if (GetNodeLevel(node) == 0)
                    {
                        double lastOnLevel = GetNormalizedValue((double)GetNodeLastLevel(node));
                        eventValue = lastOnLevel > 0 ? lastOnLevel.ToString(CultureInfo.InvariantCulture) : "1";
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                            SwitchMultilevel.Set(node, 0xFF);
                        else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                            SwitchBinary.Set(node, 0xFF);
                        else
                            Basic.Set(node, 0xFF);
                        SetNodeLevel(node, 0xFF);
                    }
                    else
                    {
                        eventValue = "0";
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                            SwitchMultilevel.Set(node, 0x00);
                        else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                            SwitchBinary.Set(node, 0x00);
                        else
                            Basic.Set(node, 0x00);
                        SetNodeLevel(node, 0x00);
                    }
                    break;

                case Commands.Thermostat_ModeGet:
                    ThermostatMode.Get(node);
                    break;

                case Commands.Thermostat_ModeSet:
                    {
                        ThermostatMode.Value mode = (ThermostatMode.Value)Enum.Parse(typeof(ThermostatMode.Value), request.GetOption(0));
                        //
                        raiseEvent = true;
                        eventParameter = "Thermostat.Mode";
                        eventValue = request.GetOption(0);
                        //
                        ThermostatMode.Set(node, mode);
                    }
                    break;

                case Commands.Thermostat_SetPointGet:
                    {
                        ThermostatSetPoint.Value mode = (ThermostatSetPoint.Value)Enum.Parse(typeof(ThermostatSetPoint.Value), request.GetOption(0));
                        ThermostatSetPoint.Get(node, mode);
                    }
                    break;

                case Commands.Thermostat_SetPointSet:
                    {
                        ThermostatSetPoint.Value mode = (ThermostatSetPoint.Value)Enum.Parse(typeof(ThermostatSetPoint.Value), request.GetOption(0));
                        double temperature = double.Parse(request.GetOption(1).Replace(',', '.'), CultureInfo.InvariantCulture);
                        //
                        raiseEvent = true;
                        eventParameter = "Thermostat.SetPoint." + request.GetOption(0);
                        eventValue = temperature.ToString(CultureInfo.InvariantCulture);
                        //
                        ThermostatSetPoint.Set(node, mode, temperature);
                    }
                    break;

                case Commands.Thermostat_FanModeGet:
                    ThermostatFanMode.Get(node);
                    break;

                case Commands.Thermostat_FanModeSet:
                    {
                        ThermostatFanMode.Value mode = (ThermostatFanMode.Value)Enum.Parse(typeof(ThermostatFanMode.Value), request.GetOption(0));
                        //
                        raiseEvent = true;
                        eventParameter = "Thermostat.FanMode";
                        eventValue = request.GetOption(0);
                        //
                        ThermostatFanMode.Set(node, mode);
                    }
                    break;

                case Commands.Thermostat_FanStateGet:
                    ThermostatFanState.Get(node);
                    break;

                case Commands.Thermostat_OperatingStateGet:
                    ThermostatOperatingState.GetOperatingState(node);
                    break;

                case Commands.UserCode_Set:
                    byte userId = byte.Parse(request.GetOption(0));
                    byte userIdStatus = byte.Parse(request.GetOption(1));
                    byte[] tagCode = ZWaveLib.Utility.HexStringToByteArray(request.GetOption(2));
                    UserCode.Set(node, new ZWaveLib.Values.UserCodeValue(userId, userIdStatus, tagCode));
                    break;

                case Commands.DoorLock_Get:
                    DoorLock.Get(node);
                    returnValue = GetResponseValue(nodeNumber, ModuleEvents.Status_DoorLock);
                    break;

                case Commands.DoorLock_Set:
                    {
                        DoorLock.Value mode = (DoorLock.Value)Enum.Parse(typeof(DoorLock.Value), request.GetOption(0));
                        DoorLock.Set(node, mode);
                    }
                    break;

                case Commands.Db_Update:
                    {
                        var p1db = new Pepper1Db();
                        p1db.Update(request.GetOption(0));
                        break;
                    }
                case Commands.Db_GetDevice:
                    {
                        var p1db = new Pepper1Db();
                        returnValue = new ResponseText(p1db.GetDeviceInfo(request.GetOption(0), request.GetOption(1)));
                        break;
                    }
                }
            }

            if (raiseEvent)
            {
                //ZWaveNode node = _controller.GetDevice ((byte)int.Parse (nodeid));
                OnInterfacePropertyChanged(this.GetDomain(), nodeId, "ZWave Node", eventParameter, eventValue);
            }
            //
            return returnValue;
        }
Ejemplo n.º 33
0
        public object InterfaceControl(MigInterfaceCommand request)
        {
            ResponseText returnValue    = new ResponseText("OK");
            bool         raiseEvent     = false;
            string       eventParameter = ModuleEvents.Status_Level;
            string       eventValue     = "";

            string   nodeId = request.Address;
            Commands command;

            Enum.TryParse <Commands>(request.Command.Replace(".", "_"), out command);
            ZWaveNode node = null;

            byte nodeNumber = 0;

            if (byte.TryParse(nodeId, out nodeNumber))
            {
                if (nodeNumber > 0)
                {
                    node = controller.GetNode(nodeNumber);
                }
                switch (command)
                {
                case Commands.Controller_Discovery:
                    controller.Discovery();
                    break;

                case Commands.Controller_SoftReset:
                    controller.SoftReset();
                    break;

                case Commands.Controller_HardReset:
                    controller.HardReset();
                    controller.Discovery();
                    break;

                case Commands.Controller_HealNetwork:
                    controller.HealNetwork();
                    break;

                case Commands.Controller_NodeNeighborUpdate:
                    controller.RequestNeighborsUpdateOptions(nodeNumber);
                    controller.RequestNeighborsUpdate(nodeNumber);
                    controller.GetNeighborsRoutingInfo(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_RoutingInfo);
                    break;

                case Commands.Controller_NodeRoutingInfo:
                    controller.GetNeighborsRoutingInfo(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_RoutingInfo);
                    break;

                case Commands.Controller_NodeAdd:
                    lastAddedNode = 0;
                    controller.BeginNodeAdd();
                    for (int i = 0; i < 20; i++)
                    {
                        if (lastAddedNode > 0)
                        {
                            break;
                        }
                        Thread.Sleep(500);
                    }
                    controller.StopNodeAdd();
                    returnValue = new ResponseText(lastAddedNode.ToString());
                    break;

                case Commands.Controller_NodeRemove:
                    lastRemovedNode = 0;
                    controller.BeginNodeRemove();
                    for (int i = 0; i < 20; i++)
                    {
                        if (lastRemovedNode > 0)
                        {
                            break;
                        }
                        Thread.Sleep(500);
                    }
                    controller.StopNodeRemove();
                    returnValue = new ResponseText(lastRemovedNode.ToString());
                    break;

                case Commands.Basic_Set:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = level.ToString(CultureInfo.InvariantCulture);
                    Basic.Set(node, (byte)level);
                }
                break;

                case Commands.Basic_Get:
                    Basic.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Basic);
                    break;

                case Commands.SwitchBinary_Set:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = level.ToString(CultureInfo.InvariantCulture);
                    SwitchBinary.Set(node, (byte)level);
                }
                break;

                case Commands.SwitchBinary_Get:
                    SwitchBinary.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_SwitchBinary);
                    break;

                case Commands.SwitchMultilevel_Set:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = level.ToString(CultureInfo.InvariantCulture);
                    SwitchMultilevel.Set(node, (byte)level);
                }
                break;

                case Commands.SwitchMultilevel_Get:
                    SwitchMultilevel.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_SwitchMultilevel);
                    break;

                case Commands.MultiInstance_GetCount:
                {
                    string commandType = request.GetOption(0).Replace(".", "");
                    switch (commandType)
                    {
                    case "SwitchBinary":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SwitchBinary);
                        break;

                    case "SwitchMultiLevel":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SwitchMultilevel);
                        break;

                    case "SensorBinary":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SensorBinary);
                        break;

                    case "SensorMultiLevel":
                        MultiInstance.GetCount(node, (byte)ZWaveLib.CommandClass.SensorMultilevel);
                        break;
                    }
                    returnValue = GetResponseValue(nodeNumber, EventPath_MultiInstance + "." + commandType + ".Count");
                }
                break;

                case Commands.MultiInstance_Get:
                {
                    byte   instance    = (byte)int.Parse(request.GetOption(1));
                    string commandType = request.GetOption(0).Replace(".", "");
                    switch (commandType)
                    {
                    case "SwitchBinary":
                        MultiInstance.SwitchBinaryGet(node, instance);
                        break;

                    case "SwitchMultiLevel":
                        MultiInstance.SwitchMultiLevelGet(node, instance);
                        break;

                    case "SensorBinary":
                        MultiInstance.SensorBinaryGet(node, instance);
                        break;

                    case "SensorMultiLevel":
                        MultiInstance.SensorMultiLevelGet(node, instance);
                        break;
                    }
                    returnValue = GetResponseValue(nodeNumber, EventPath_MultiInstance + "." + commandType + "." + instance);
                }
                break;

                case Commands.MultiInstance_Set:
                {
                    byte instance = (byte)int.Parse(request.GetOption(1));
                    int  value    = int.Parse(request.GetOption(2));
                    //
                    //raisepropchanged = true;
                    //parampath += "." + instance; // Status.Level.<instance>
                    //
                    switch (request.GetOption(0))
                    {
                    case "Switch.Binary":
                        MultiInstance.SwitchBinarySet(node, instance, value);
                        //raiseparam = (double.Parse(request.GetOption(2)) / 255).ToString();
                        break;

                    case "Switch.MultiLevel":
                        MultiInstance.SwitchMultiLevelSet(node, instance, value);
                        //raiseparam = (double.Parse(request.GetOption(2)) / 100).ToString(); // TODO: should it be 99 ?
                        break;
                    }
                }
                break;

                case Commands.SensorBinary_Get:
                    SensorBinary.Get(node);
                    break;

                case Commands.SensorMultiLevel_Get:
                    SensorMultilevel.Get(node);
                    break;

                case Commands.Meter_Get:
                    // see ZWaveLib Sensor.cs for EnergyMeterScale options
                    int scaleType = 0;
                    int.TryParse(request.GetOption(0), out scaleType);
                    Meter.Get(node, (byte)(scaleType << 0x03));
                    break;

                case Commands.Meter_SupportedGet:
                    Meter.GetSupported(node);
                    break;

                case Commands.Meter_Reset:
                    Meter.Reset(node);
                    break;

                case Commands.NodeInfo_Get:
                    controller.GetNodeInformationFrame(nodeNumber);
                    returnValue = GetResponseValue(nodeNumber, EventPath_NodeInfo);
                    break;

                case Commands.Battery_Get:
                    Battery.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Battery);
                    break;

                case Commands.Association_Set:
                    Association.Set(node, (byte)int.Parse(request.GetOption(0)), (byte)int.Parse(request.GetOption(1)));
                    break;

                case Commands.Association_Get:
                    byte group = (byte)int.Parse(request.GetOption(0));
                    Association.Get(node, group);
                    returnValue = GetResponseValue(nodeNumber, EventPath_Associations + "." + group);
                    break;

                case Commands.Association_Remove:
                    Association.Remove(node, (byte)int.Parse(request.GetOption(0)), (byte)int.Parse(request.GetOption(1)));
                    break;

                case Commands.ManufacturerSpecific_Get:
                    ManufacturerSpecific.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_ManufacturerSpecific);
                    break;

                case Commands.Config_ParameterSet:
                    Configuration.Set(node, (byte)int.Parse(request.GetOption(0)), int.Parse(request.GetOption(1)));
                    break;

                case Commands.Config_ParameterGet:
                    byte position = (byte)int.Parse(request.GetOption(0));
                    Configuration.Get(node, position);
                    returnValue = GetResponseValue(nodeNumber, EventPath_ConfigVariables + "." + position);
                    break;

                case Commands.WakeUp_Get:
                    WakeUp.Get(node);
                    returnValue = GetResponseValue(nodeNumber, EventPath_WakeUpInterval);
                    break;

                case Commands.WakeUp_Set:
                    WakeUp.Set(node, uint.Parse(request.GetOption(0)));
                    break;

                case Commands.WakeUp_SendToSleep:
                    WakeUp.SendToSleep(node);
                    break;

                case Commands.WakeUp_GetAlwaysAwake:
                    returnValue = new ResponseText(WakeUp.GetAlwaysAwake(node) ? "1" : "0");
                    break;

                case Commands.WakeUp_SetAlwaysAwake:
                    WakeUp.SetAlwaysAwake(node, uint.Parse(request.GetOption(0)) == 1 ? true : false);
                    break;

                case Commands.Version_Get:
                    returnValue = new ResponseText("ERROR");
                    CommandClass cclass;
                    Enum.TryParse <CommandClass>(request.GetOption(0), out cclass);
                    if (cclass != CommandClass.NotSet)
                    {
                        var nodeCclass = node.GetCommandClass(cclass);
                        if (nodeCclass != null && nodeCclass.Version != 0)
                        {
                            returnValue = new ResponseText(nodeCclass.Version.ToString());
                        }
                        else
                        {
                            ZWaveLib.CommandClasses.Version.Get(node, cclass);
                            returnValue = GetResponseValue(nodeNumber, "ZWaveNode.Version." + cclass);
                        }
                    }
                    break;

                case Commands.Version_GetAll:
                    controller.GetNodeCcsVersion(node);
                    break;

                case Commands.Control_On:
                    raiseEvent = true;
                    double lastLevel = GetNormalizedValue((double)GetNodeLastLevel(node));
                    eventValue = lastLevel > 0 ? lastLevel.ToString(CultureInfo.InvariantCulture) : "1";
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                    {
                        SwitchMultilevel.Set(node, 0xFF);
                    }
                    else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                    {
                        SwitchBinary.Set(node, 0xFF);
                    }
                    else
                    {
                        Basic.Set(node, 0xFF);
                    }
                    SetNodeLevel(node, 0xFF);
                    break;

                case Commands.Control_Off:
                    raiseEvent = true;
                    eventValue = "0";
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                    {
                        SwitchMultilevel.Set(node, 0x00);
                    }
                    else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                    {
                        SwitchBinary.Set(node, 0x00);
                    }
                    else
                    {
                        Basic.Set(node, 0x00);
                    }
                    SetNodeLevel(node, 0x00);
                    break;

                case Commands.Control_Level:
                {
                    raiseEvent = true;
                    var level = int.Parse(request.GetOption(0));
                    eventValue = Math.Round(level / 100D, 2).ToString(CultureInfo.InvariantCulture);
                    // the max value should be obtained from node parameters specifications,
                    // here we assume that the commonly used interval is [0-99] for most multilevel switches
                    if (level >= 100)
                    {
                        level = 99;
                    }
                    if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                    {
                        SwitchMultilevel.Set(node, (byte)level);
                    }
                    else
                    {
                        Basic.Set(node, (byte)level);
                    }
                    SetNodeLevel(node, (byte)level);
                }
                break;

                case Commands.Control_Toggle:
                    raiseEvent = true;
                    if (GetNodeLevel(node) == 0)
                    {
                        double lastOnLevel = GetNormalizedValue((double)GetNodeLastLevel(node));
                        eventValue = lastOnLevel > 0 ? lastOnLevel.ToString(CultureInfo.InvariantCulture) : "1";
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                        {
                            SwitchMultilevel.Set(node, 0xFF);
                        }
                        else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                        {
                            SwitchBinary.Set(node, 0xFF);
                        }
                        else
                        {
                            Basic.Set(node, 0xFF);
                        }
                        SetNodeLevel(node, 0xFF);
                    }
                    else
                    {
                        eventValue = "0";
                        if (node.SupportCommandClass(CommandClass.SwitchMultilevel))
                        {
                            SwitchMultilevel.Set(node, 0x00);
                        }
                        else if (node.SupportCommandClass(CommandClass.SwitchBinary))
                        {
                            SwitchBinary.Set(node, 0x00);
                        }
                        else
                        {
                            Basic.Set(node, 0x00);
                        }
                        SetNodeLevel(node, 0x00);
                    }
                    break;

                case Commands.Thermostat_ModeGet:
                    ThermostatMode.Get(node);
                    break;

                case Commands.Thermostat_ModeSet:
                {
                    ThermostatMode.Value mode = (ThermostatMode.Value)Enum.Parse(typeof(ThermostatMode.Value), request.GetOption(0));
                    //
                    raiseEvent     = true;
                    eventParameter = "Thermostat.Mode";
                    eventValue     = request.GetOption(0);
                    //
                    ThermostatMode.Set(node, mode);
                }
                break;

                case Commands.Thermostat_SetPointGet:
                {
                    ThermostatSetPoint.Value mode = (ThermostatSetPoint.Value)Enum.Parse(typeof(ThermostatSetPoint.Value), request.GetOption(0));
                    ThermostatSetPoint.Get(node, mode);
                }
                break;

                case Commands.Thermostat_SetPointSet:
                {
                    ThermostatSetPoint.Value mode = (ThermostatSetPoint.Value)Enum.Parse(typeof(ThermostatSetPoint.Value), request.GetOption(0));
                    double temperature            = double.Parse(request.GetOption(1).Replace(',', '.'), CultureInfo.InvariantCulture);
                    //
                    raiseEvent     = true;
                    eventParameter = "Thermostat.SetPoint." + request.GetOption(0);
                    eventValue     = temperature.ToString(CultureInfo.InvariantCulture);
                    //
                    ThermostatSetPoint.Set(node, mode, temperature);
                }
                break;

                case Commands.Thermostat_FanModeGet:
                    ThermostatFanMode.Get(node);
                    break;

                case Commands.Thermostat_FanModeSet:
                {
                    ThermostatFanMode.Value mode = (ThermostatFanMode.Value)Enum.Parse(typeof(ThermostatFanMode.Value), request.GetOption(0));
                    //
                    raiseEvent     = true;
                    eventParameter = "Thermostat.FanMode";
                    eventValue     = request.GetOption(0);
                    //
                    ThermostatFanMode.Set(node, mode);
                }
                break;

                case Commands.Thermostat_FanStateGet:
                    ThermostatFanState.Get(node);
                    break;

                case Commands.Thermostat_OperatingStateGet:
                    ThermostatOperatingState.GetOperatingState(node);
                    break;

                case Commands.UserCode_Set:
                    byte   userId       = byte.Parse(request.GetOption(0));
                    byte   userIdStatus = byte.Parse(request.GetOption(1));
                    byte[] tagCode      = ZWaveLib.Utility.HexStringToByteArray(request.GetOption(2));
                    UserCode.Set(node, new ZWaveLib.Values.UserCodeValue(userId, userIdStatus, tagCode));
                    break;

                case Commands.DoorLock_Get:
                    DoorLock.Get(node);
                    returnValue = GetResponseValue(nodeNumber, ModuleEvents.Status_DoorLock);
                    break;

                case Commands.DoorLock_Set:
                {
                    DoorLock.Value mode = (DoorLock.Value)Enum.Parse(typeof(DoorLock.Value), request.GetOption(0));
                    DoorLock.Set(node, mode);
                }
                break;
                }
            }

            if (raiseEvent)
            {
                //ZWaveNode node = _controller.GetDevice ((byte)int.Parse (nodeid));
                OnInterfacePropertyChanged(this.GetDomain(), nodeId, "ZWave Node", eventParameter, eventValue);
            }
            //
            return(returnValue);
        }
Ejemplo n.º 34
0
        public override void ReadBinary(ESPReader reader)
        {
            List <string> readTags = new List <string>();

            while (reader.BaseStream.Position < reader.BaseStream.Length)
            {
                string subTag = reader.PeekTag();

                switch (subTag)
                {
                case "TRDT":
                    if (readTags.Contains("TRDT"))
                    {
                        return;
                    }
                    if (ResponseData == null)
                    {
                        ResponseData = new ResponseData();
                    }

                    ResponseData.ReadBinary(reader);
                    break;

                case "NAM1":
                    if (readTags.Contains("NAM1"))
                    {
                        return;
                    }
                    if (ResponseText == null)
                    {
                        ResponseText = new SimpleSubrecord <String>();
                    }

                    ResponseText.ReadBinary(reader);
                    break;

                case "NAM2":
                    if (readTags.Contains("NAM2"))
                    {
                        return;
                    }
                    if (ScriptNotes == null)
                    {
                        ScriptNotes = new SimpleSubrecord <String>();
                    }

                    ScriptNotes.ReadBinary(reader);
                    break;

                case "NAM3":
                    if (readTags.Contains("NAM3"))
                    {
                        return;
                    }
                    if (Edits == null)
                    {
                        Edits = new SimpleSubrecord <String>();
                    }

                    Edits.ReadBinary(reader);
                    break;

                case "SNAM":
                    if (readTags.Contains("SNAM"))
                    {
                        return;
                    }
                    if (SpeakerAnimation == null)
                    {
                        SpeakerAnimation = new RecordReference();
                    }

                    SpeakerAnimation.ReadBinary(reader);
                    break;

                case "LNAM":
                    if (readTags.Contains("LNAM"))
                    {
                        return;
                    }
                    if (ListenerAnimation == null)
                    {
                        ListenerAnimation = new RecordReference();
                    }

                    ListenerAnimation.ReadBinary(reader);
                    break;

                default:
                    return;
                }

                readTags.Add(subTag);
            }
        }
Ejemplo n.º 35
0
        public ActionResult GetResponse(string DR)
        {
            logger.Info("GetResponse Method Start" + " at " + DateTime.UtcNow);
            Order order = (Order)Session["order"];

            //Order order = db.Orders.Include("UserProfile").First(t => t.OrderId == oldOrder.OrderId);

            ResponseText responseString = new ResponseText();

            responseString.OrderId = order.OrderId;
            //esponseString.OrderId = 1;
            responseString.ResponseString = DR;
            db.ResponseText.Add(responseString);
            db.SaveChanges();

            string sQS;

            string[] aQS;
            string   pwd = WebConfigurationManager.AppSettings["SecretKey"].ToString();

            DR  = DR.Replace(' ', '+');
            sQS = Base64Decode(DR);
            DR  = EasyPay.Models.RC4.Decrypt(pwd, sQS, false);
            aQS = DR.Split('&');

            TransactionResponse response = new TransactionResponse();

            foreach (string param in aQS)
            {
                string[] aParam = param.Split('=');
                switch (aParam[0])
                {
                case "ResponseCode":
                    response.ResponseCode = aParam[1];
                    break;

                case "ResponseMessage":
                    response.ResponseMessage = aParam[1];
                    break;

                case "DateCreated":
                    response.DateCreated = Convert.ToDateTime(aParam[1]);
                    break;

                case "PaymentID":
                    response.PaymentID = Convert.ToInt32(aParam[1]);
                    break;

                case "MerchantRefNo":
                    response.MerchantRefNo = Convert.ToInt32(aParam[1]);
                    break;

                case "Amount":
                    response.Amount = Convert.ToDecimal(aParam[1]);
                    break;

                case "Mode":
                    response.Mode = aParam[1];
                    break;

                case "BillingName":
                    response.BillingName = aParam[1];
                    break;

                case "TransactionID":
                    response.TransactionID = Convert.ToInt32(aParam[1]);
                    break;

                case "IsFlagged":
                    response.IsFlagged = aParam[1].ToString();
                    break;
                }
            }

            response.OrderId = response.MerchantRefNo;
            db.Responses.Add(response);
            order = db.Orders.FirstOrDefault(x => x.OrderId == response.OrderId);
            db.Entry(order).State = EntityState.Modified;
            logger.Info("Response Code" + response.ResponseCode + " at " + DateTime.UtcNow);
            if (response.ResponseCode != null || response.ResponseCode != string.Empty)
            {
                if (response.ResponseCode == "0")
                {
                    logger.Info("Response Code is 0" + " at " + DateTime.UtcNow);
                    //successful transaction
                    if (response.IsFlagged.ToLower().Equals("no"))
                    {
                        logger.Info("Response IsFlagged" + response.IsFlagged + " at " + DateTime.UtcNow);
                        //successful transaction
                        if (response.MerchantRefNo == order.OrderId && response.Amount == order.Amount)
                        {
                            logger.Info("Merchant Reference No " + response.MerchantRefNo + " Merchant Amount " + response.Amount + " at " + DateTime.UtcNow);
                            order.Status = (int)OrderStatus.PaymentSuceess;
                            logger.Info("Order Status " + order.Status + " at " + DateTime.UtcNow);
                            //order.Remarks = "Payment Successfull";
                            order.comments = response.ResponseMessage;
                        }
                        else
                        {
                            order.Status = (int)OrderStatus.WrongOrderId;
                            logger.Info("Order Status " + order.Status + " at " + DateTime.UtcNow);
                            // response with wrong orderid
                            //order.Status = (int)OrderStatus.Pending;
                            //order.Remarks = "Payment Pending";
                            order.comments = response.ResponseMessage;
                        }
                    }
                    else
                    {
                        logger.Info("Response IsFlagged" + response.IsFlagged + " at " + DateTime.UtcNow);
                        if (response.MerchantRefNo == order.OrderId && response.Amount == order.Amount)
                        {
                            order.Status = (int)OrderStatus.PaymentSuceess;
                            logger.Info("Order Status " + order.Status + " at " + DateTime.UtcNow);
                            //order.Remarks = "Payment Successfull";
                            order.comments = response.ResponseMessage;
                        }
                        //Temporary
                        ////pending trasaction
                        //order.Status = (int)OrderStatus.IsFlaggedPayment;
                        ////order.Remarks = "Payment Pending";
                        //order.comments = response.ResponseMessage;
                    }
                }
                else
                {
                    //declined trasaction or erroroccured
                    order.Status = (int)OrderStatus.PaymentFailed;
                    logger.Info("Order Status " + order.Status + " at " + DateTime.UtcNow);
                    //order.Remarks = "Payment Failed";
                    order.comments = response.ResponseMessage;
                }
            }
            else
            {
                logger.Info("Response code is null or empty at " + DateTime.UtcNow);
                //error occured in transaction
                order.Status = (int)OrderStatus.PaymentFailed;
                logger.Info("Order Status " + order.Status + " at " + DateTime.UtcNow);
                //order.Remarks = "Payment Failed";
                order.comments = response.ResponseMessage;
            }
            db.SaveChanges();
            ViewData.Model = order;
            logger.Info("GetResponse Method End" + " at " + DateTime.UtcNow);
            return(View());
        }