/// <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 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); } }
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; } }
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); }
/// <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"); } } }
/// <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"); } } }
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); } }
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); } }
/// <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()); }
public Task <BaseMessage> HandleLink(RequestLink info) { BaseMessage response = new ResponseText(info) { Content = Msg }; return(Task.FromResult(response)); }
public AskPassDialog(Window owner) { Owner = owner; InitializeComponent(); viewModel = new AskPassDialogViewModel(); DataContext = viewModel; ResponseText.Focus(); }
public Task <BaseMessage> UnsubscribeEvent(RequestEvent request) { BaseMessage response = new ResponseText(request) { Content = "" }; _userService.Unsubscribe(request.FromUserName); return(Task.FromResult(response)); }
virtual protected void GradeQuestion() { if (IsCaseSensitive) { Correctness = (ResponseText == CorrectResponse) ? 1.0 : 0.0; } else { Correctness = (ResponseText.ToLower() == CorrectResponse.ToLower()) ? 1.0 : 0.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); }
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)); }
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); }
/// <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); }
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); }
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; }
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; }
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; }
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); } } }
public void Init() { instance = new ResponseText(); }
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); }
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); }
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); }
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; }
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; }
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); }
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); } }
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()); }