/// <summary> /// Called when a control message LogMessage is received. /// </summary> /// <param name="ctrlLink">The link that received this message.</param> /// <param name="msg">The message itself.</param> public override void ReceiveMessage(CtrlLink ctrlLink, Protocol.Auto.Ctrl.LogMessage msg) { // Don't care about error code; log messages are just updates with no code set if (!msg.hasLogMessage()) { return; } if (msg.getLogMessage().getType() == Pravala.Protocol.Auto.Log.LogType.TextMessage) { Pravala.Protocol.Auto.Log.TextMessage textMsg = new Pravala.Protocol.Auto.Log.TextMessage(); if (textMsg.DeserializeFromBaseMessage(msg.getLogMessage())) { BindableTextMessage bindableMessage = new BindableTextMessage(textMsg); ServiceProvider.OutputFile.Write(bindableMessage.ToString()); ServiceProvider.ViewModel.PostToUiThread( o => { ServiceProvider.ViewModel.AddMessage(bindableMessage); }, this); } } }
/// <summary> /// Called whenever a base message is received. /// </summary> /// <param name="ctrlLink">The link over which the message was received.</param> /// <param name="baseMsg">The message received.</param> public void ReceiveBaseMessage(CtrlLink ctrlLink, Protocol.Auto.Ctrl.Message baseMsg) { T msg = new T(); msg.DeserializeFromBaseMessage(baseMsg); this.ReceiveMessage(ctrlLink, msg); }
/// <summary> /// Unsubscribes from updates. /// </summary> /// <param name="ctrlLink">CtrlLink to send the unsubscribe on.</param> /// <returns>Task for async use.</returns> public override async Task UnsubscribeAsync(CtrlLink ctrlLink) { LogUnsubscribe infoSubMsg = new LogUnsubscribe(); infoSubMsg.setNamePattern("*"); await ctrlLink.SendMessageAsync(infoSubMsg); }
/// <summary> /// Subscribes for updates. /// </summary> /// <param name="ctrlLink">CtrlLink to send the subscribe on.</param> /// <returns>Task for async use.</returns> public override async Task SubscribeAsync(CtrlLink ctrlLink) { // Split log pattern into pairs string[] logDescriptions = this.pattern.Split(' '); // Send a subscribe message for each pair foreach (string logDescription in logDescriptions) { string[] logParts = logDescription.Split('.'); if (logParts.Length != 2) { continue; } string name = logParts[0]; LogLevel level = this.LevelStringToEnum(logParts[1]); if (level != LogLevel.Invalid) { ServiceProvider.OutputFile.WriteMessageLine("Subscribe for " + name + "." + level.ToString()); LogSubscribe infoSubMsg = new LogSubscribe(); infoSubMsg.setNamePattern(name); infoSubMsg.setLevel(level); await ctrlLink.SendMessageAsync(infoSubMsg); } } }
/// <summary> /// Unsubscribes from updates. /// </summary> /// <param name="ctrlLink">CtrlLink to send the unsubscribe on.</param> /// <returns>Task for async use.</returns> public abstract Task UnsubscribeAsync(CtrlLink ctrlLink);
/// <summary> /// Called whenever a message is received. /// </summary> /// <param name="ctrlLink">The link over which the message was received.</param> /// <param name="msg">The message received.</param> public abstract void ReceiveMessage(CtrlLink ctrlLink, T msg);