Ejemplo n.º 1
0
        //------------------------------------------------------------------------------------------------------------------
        #region ctors

        /// <summary>
        /// Just create a .NET instance of an IRSS client. The Connect() method must be used to connect the client to an IRSS server.
        /// </summary>
        public IRClient()
        {
            ServerHost      = "";
            Connected       = false;
            ServerInfo      = new IRServerInfo();
            _connectedEvent = new AutoResetEvent(false);
            _learntEvent    = new AutoResetEvent(false);
        }
Ejemplo n.º 2
0
        // --------------------------------------------------------------------------------------------------
        #region Constructor

        public CommandManager(IRServerInfo server = null, BlastIrDelegate BlastFunc = null, LearnIrDelegate LearnIrFunc = null, ProcessCommandDelegate processCommand = null, bool script = false)
        {
            InitializeComponent();

            IRServer        = server;
            _BlastFunc      = BlastFunc;
            _LearnIrFunc    = LearnIrFunc;
            _ProcessCommand = processCommand;

            _showGeneralCmds     = true;
            _showScriptCmds      = script;
            _showMacroCmds       = true;
            _showMediaPortalCmds = false;
            _showServerCmds      = BlastFunc != null && LearnIrFunc != null;
            _macroCommands       = null;

            learnIRCommandToolStripMenuItem.Enabled = _LearnIrFunc != null;

            PopulateCommandList();
        }
Ejemplo n.º 3
0
        private static void ReceivedMessage(IrssMessage received)
        {
            Log.Debug("TV3BlasterPlugin: Received Message \"{0}\"", received.Type);

            try
            {
                switch (received.Type)
                {
                case MessageType.BlastIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        Log.Debug("TV3BlasterPlugin: Blast successful");
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        Log.Error("TV3BlasterPlugin: Failed to blast IR command");
                    }
                    break;

                case MessageType.RegisterClient:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        _irServerInfo = IRServerInfo.FromBytes(received.GetDataAsBytes());
                        _registered   = true;

                        Log.Debug("TV3BlasterPlugin: Registered to IR Server");
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        _registered = false;
                        Log.Error("TV3BlasterPlugin: IR Server refused to register");
                    }
                    break;

                case MessageType.LearnIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        Log.Debug("TV3BlasterPlugin: Learned IR Successfully");

                        byte[] dataBytes = received.GetDataAsBytes();

                        using (FileStream file = File.Create(_learnIRFilename))
                            file.Write(dataBytes, 0, dataBytes.Length);
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        Log.Error("TV3BlasterPlugin: Failed to learn IR command");
                    }
                    else if ((received.Flags & MessageFlags.Timeout) == MessageFlags.Timeout)
                    {
                        Log.Error("TV3BlasterPlugin: Learn IR command timed-out");
                    }

                    _learnIRFilename = null;
                    break;

                case MessageType.ServerShutdown:
                    Log.Info("TV3BlasterPlugin: IR Server Shutdown - Plugin disabled until IR Server returns");
                    _registered = false;
                    break;

                case MessageType.Error:
                    _learnIRFilename = null;
                    Log.Error("TV3BlasterPlugin: Received error: {0}", received.GetDataAsString());
                    break;
                }

                if (_handleMessage != null)
                {
                    _handleMessage(received);
                }
            }
            catch (Exception ex)
            {
                _learnIRFilename = null;
                Log.Error(ex.ToString());
            }
        }
Ejemplo n.º 4
0
        void ReceivedMessage(IrssMessage received)
        {
            ServiceRegistration.Get <ILogger>().Debug("IrInputPlugin: Received Message '{0}' {1}", received.Type, received.GetDataAsString());
            try
            {
                switch (received.Type)
                {
                case MessageType.RemoteEvent:
                    string keyCode = received.MessageData[IrssMessage.KEY_CODE] as string;
                    RemoteHandler(keyCode);
                    break;

                // TODO: What to do with this code?

                /*
                 * case MessageType.BlastIR:
                 * if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                 *  ServiceRegistration.Get<ILogger>().Info("IrInputPlugin: Blast successful");
                 * else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                 *  ServiceRegistration.Get<ILogger>().Warn("IrInputPlugin: Failed to blast IR command");
                 * break;
                 */
                case MessageType.RegisterClient:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        _irServerInfo = IRServerInfo.FromBytes(received.GetDataAsBytes());

                        ServiceRegistration.Get <ILogger>().Info("IrInputPlugin: Registered to Input Service '{0}'", _irServerInfo);
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        ServiceRegistration.Get <ILogger>().Warn("IrInputPlugin: Input Service refused to register plugin");
                    }
                    break;

                // TODO: What to do with this code?

                /*
                 * case MessageType.LearnIR:
                 * if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                 * {
                 *  ServiceRegistration.Get<ILogger>().Info("IrInputPlugin: Learned IR Successfully");
                 *
                 *  byte[] dataBytes = received.GetDataAsBytes();
                 *
                 *  using (FileStream file = File.Create(_learnIRFilename))
                 *    file.Write(dataBytes, 0, dataBytes.Length);
                 * }
                 * else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                 *  ServiceRegistration.Get<ILogger>().Error("IrInputPlugin: Failed to learn IR command");
                 * else if ((received.Flags & MessageFlags.Timeout) == MessageFlags.Timeout)
                 *  ServiceRegistration.Get<ILogger>().Error("IrInputPlugin: Learn IR command timed-out");
                 * break;
                 */
                case MessageType.ServerShutdown:
                    ServiceRegistration.Get <ILogger>().Warn("IrInputPlugin: Input Service shutdown - IrInputPlugin is disabled until Input Service returns");
                    break;

                case MessageType.Error:
                    ServiceRegistration.Get <ILogger>().Error("IrInputPlugin: Received error '{0}'", received.GetDataAsString());
                    break;
                }
            }
            catch (Exception ex)
            {
                ServiceRegistration.Get <ILogger>().Error("Problem receiving IR message: {0}", ex);
            }
        }
Ejemplo n.º 5
0
        //------------------------------------------------------------------------------------------------------------------
        #region callbacks

        /// <summary>
        /// Socket-communication callback to receive message from the IRSS server.
        /// </summary>
        /// <param name="received">received message, defined mostly by a Type and Flags</param>
        private void ReceivedMessage(IrssMessage received)
        {
            // default (most common) values
            RemoteEventArgs args = new RemoteEventArgs();

            args.Sender = RemoteEventArgs.IrServer;
            args.Key    = received.Type.ToString();
            args.Data   = received.Flags.ToString() + ": " + received.GetDataAsString();

            try
            {
                switch (received.Type)
                {
                case MessageType.RegisterClient:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        Connected  = true;
                        ServerInfo = IRServerInfo.FromBytes(received.GetDataAsBytes());
                        irss.Send(new IrssMessage(MessageType.ActiveReceivers, MessageFlags.Request));
                        irss.Send(new IrssMessage(MessageType.ActiveBlasters, MessageFlags.Request));
                        _connectedEvent.Set();
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        Connected = false;
                    }
                    break;

                case MessageType.ActiveBlasters:
                    LogInfo(received.GetDataAsString());
                    break;

                case MessageType.ActiveReceivers:
                    LogInfo(received.GetDataAsString());
                    break;

                case MessageType.RemoteEvent:
                    // raise the event
                    args.Sender = received.MessageData[IrssMessage.DEVICE_NAME] as string;
                    args.Key    = received.MessageData[IrssMessage.KEY_CODE] as string;
                    args.Data   = "";
                    break;

                case MessageType.LearnIR:
                    _learnSuccess = (received.Flags & MessageFlags.Success) == MessageFlags.Success;
                    if (_learnSuccess)
                    {
                        byte[] dataBytes = received.GetDataAsBytes();
                        if (_irFile != null && _irFile != "")
                        {
                            string DebugIRFile = Path.Combine(Common.FolderIRCommands, _irFile);
                            using (FileStream file = File.Create(DebugIRFile))
                                file.Write(dataBytes, 0, dataBytes.Length);
                        }
                    }
                    _learntEvent.Set();

                    break;

                case MessageType.ServerShutdown:
                    Connected = false;
                    LogInfo("Disconnected by host " + ServerHost);
                    LogInfo(received.GetDataAsString());
                    break;

                case MessageType.Error:
                    LogErr(received.GetDataAsString());
                    break;
                }
            }
            catch (Exception ex)
            {
                LogErr(ex.Message);

                args.Key  = "Error";
                args.Data = "ex.Message";
            }

            LogDebug(String.Format("rise RemoteEvent:  Sender: {0} - Key: {1} - Data: {2}", args.Sender, args.Key, args.Data));
            OnRemoteEvent(args);
        }
Ejemplo n.º 6
0
        private void ReceivedMessage(IrssMessage received)
        {
            Invoke(_addStatusLine,
                   new Object[] { String.Format("Received Message: \"{0}, {1}\"", received.Flags, received.Type) });

            try
            {
                switch (received.Type)
                {
                case MessageType.RegisterClient:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        _registered   = true;
                        _irServerInfo = IRServerInfo.FromBytes(received.GetDataAsBytes());
                        comboBoxPort.Items.Clear();
                        comboBoxPort.Items.AddRange(_irServerInfo.Ports);
                        comboBoxPort.SelectedIndex = 0;

                        _client.Send(new IrssMessage(MessageType.ActiveReceivers, MessageFlags.Request));
                        _client.Send(new IrssMessage(MessageType.ActiveBlasters, MessageFlags.Request));
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        _registered = false;
                    }
                    return;

                case MessageType.ActiveBlasters:
                    Invoke(_addStatusLine, new Object[] { received.GetDataAsString() });
                    break;

                case MessageType.ActiveReceivers:
                    Invoke(_addStatusLine, new Object[] { received.GetDataAsString() });
                    break;

                case MessageType.RemoteEvent:
                    string deviceName = received.MessageData[IrssMessage.DEVICE_NAME] as string;
                    string keyCode    = received.MessageData[IrssMessage.KEY_CODE] as string;

                    Invoke(_addStatusLine, new Object[] { String.Format("{0} ({1})", deviceName, keyCode) });
                    return;

                case MessageType.LearnIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        byte[] dataBytes = received.GetDataAsBytes();

                        using (FileStream file = File.Create(_learnIRFilename))
                            file.Write(dataBytes, 0, dataBytes.Length);
                    }

                    _learnIRFilename = null;
                    break;

                case MessageType.ServerShutdown:
                    _registered = false;
                    return;

                case MessageType.Error:
                    _learnIRFilename = null;
                    Invoke(_addStatusLine, new Object[] { received.GetDataAsString() });
                    return;
                }
            }
            catch (Exception ex)
            {
                Invoke(_addStatusLine, new Object[] { ex.Message });
            }
        }
Ejemplo n.º 7
0
        private static void ReceivedMessage(IrssMessage received)
        {
            IrssLog.Debug("Received Message \"{0}\"", received.Type);

            try
            {
                switch (received.Type)
                {
                case MessageType.RegisterClient:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        _irServerInfo = IRServerInfo.FromBytes(received.GetDataAsBytes());
                        _registered   = true;

                        IrssLog.Info("Registered to IR Server");
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        _registered = false;
                        IrssLog.Warn("IR Server refused to register");
                    }
                    break;

                case MessageType.RemoteEvent:
                    string deviceName = received.MessageData[IrssMessage.DEVICE_NAME] as string;
                    string keyCode    = received.MessageData[IrssMessage.KEY_CODE] as string;

                    RemoteHandlerCallback(deviceName, keyCode);
                    break;

                case MessageType.BlastIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        IrssLog.Debug("Blast successful");
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        IrssLog.Error("Failed to blast IR command");
                    }
                    break;

                case MessageType.LearnIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        IrssLog.Debug("Learned IR Successfully");

                        byte[] dataBytes = received.GetDataAsBytes();

                        using (FileStream file = File.Create(_learnIRFilename))
                            file.Write(dataBytes, 0, dataBytes.Length);
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        IrssLog.Error("Failed to learn IR command");
                    }
                    else if ((received.Flags & MessageFlags.Timeout) == MessageFlags.Timeout)
                    {
                        IrssLog.Error("Learn IR command timed-out");
                    }

                    _learnIRFilename = null;
                    break;

                case MessageType.ServerShutdown:
                    IrssLog.Warn("IR Server Shutdown - Media Center Blaster disabled until IR Server returns");
                    _registered = false;
                    break;

                case MessageType.Error:
                    IrssLog.Error("Received error: {0}", received.GetDataAsString());
                    break;
                }

                if (_handleMessage != null)
                {
                    _handleMessage(received);
                }
            }
            catch (Exception ex)
            {
                IrssLog.Error("ReceivedMessage(): {0}", ex.ToString());
            }
        }
Ejemplo n.º 8
0
        private void ReceivedMessage(IrssMessage received)
        {
            IrssLog.Debug("Received Message \"{0}\"", received.Type);

            try
            {
                switch (received.Type)
                {
                case MessageType.RegisterClient:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        _irServerInfo = IRServerInfo.FromBytes(received.GetDataAsBytes());
                        _registered   = true;

                        string message = "Connected";
                        IrssLog.Info(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        _registered = false;

                        string message = "Failed to connect";
                        IrssLog.Warn(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });
                    }
                    return;

                case MessageType.BlastIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        string message = "Blast successful";
                        IrssLog.Info(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        string message = "Failed to blast IR command";
                        IrssLog.Error(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });
                    }
                    break;

                case MessageType.LearnIR:
                    if ((received.Flags & MessageFlags.Success) == MessageFlags.Success)
                    {
                        byte[] dataBytes = received.GetDataAsBytes();

                        _code = IrCode.FromByteArray(dataBytes);

                        _fileName = null;

                        string message = "Learned IR Successfully";
                        IrssLog.Info(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });

                        RefreshForm();
                    }
                    else if ((received.Flags & MessageFlags.Failure) == MessageFlags.Failure)
                    {
                        string message = "Failed to learn IR command";

                        IrssLog.Warn(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });
                    }
                    else if ((received.Flags & MessageFlags.Timeout) == MessageFlags.Timeout)
                    {
                        string message = "Learn IR command timed-out";

                        IrssLog.Warn(message);
                        Invoke(new UpdateWindowDel(UpdateWindow), new string[] { message });
                    }
                    break;

                case MessageType.ServerShutdown:
                    _registered = false;
                    Invoke(new UpdateWindowDel(UpdateWindow), new string[] { "Server shut down" });
                    return;

                case MessageType.Error:
                    IrssLog.Error("Error from server: " + received.GetDataAsString());
                    return;
                }
            }
            catch (Exception ex)
            {
                IrssLog.Error(ex);
                MessageBox.Show(this, ex.Message, "IR File Tool Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 9
0
        // --------------------------------------------------------------------------------------------------
        #region Constructor


        /// <summary>
        /// Creates a Macro Editor windows form.
        /// </summary>
        /// <param name="name">The name of an existing macro (default: new macro).</param>
        public MacroEditor(string name = "", IRServerInfo server = null, BlastIrDelegate blast = null, LearnIrDelegate learnIr = null, ProcessCommandDelegate processCommand = null, bool insertionEnabled = true)
        {
            if (name == null)
            {
                name = "";
            }

            _insertionEnabled = insertionEnabled;
            _editionEnabled   = !IsOpen(name);
            _OpenInstances.Add(name.ToLower());

            _name           = name;
            _server         = server;
            _blast          = blast;
            _learnIr        = learnIr;
            _ProcessCommand = processCommand;

            InitializeComponent();

            textBoxName.Text       = name;
            buttonTest.Enabled     = _ProcessCommand != null;
            buttonOK.Visible       = _insertionEnabled || _editionEnabled;
            buttonOK.Enabled       = _insertionEnabled;
            _MacroNameValid        = name != "";
            buttonShortcut.Enabled = _MacroNameValid;
            if (_editionEnabled && !_insertionEnabled || _name == "")
            {  // Show save first
                buttonOK.Enabled    = false;
                buttonOK.Text       = "Save";
                this.buttonOK.Image = global::IrssUtils.Properties.Resources.Save;
            }
            else
            {
                buttonOK.Enabled = _insertionEnabled;
            }

            if (_editionEnabled)
            {
                InitializeCommandManager();
            }
            else
            {
                // Relayout for Read-only mode
                labelInvalid.Text = "Macro is already open for edition";
                labelInvalid.Show();
                textBoxName.Enabled = false;

                groupBoxCommandSequence.Controls.Remove(splitContainerMain);
                groupBoxCommandSequence.Controls.Add(panelActions);
                this.MinimumSize = new System.Drawing.Size(310, this.Height);
                this.Width       = 350;
            }

            if (_name == "")
            {
                return;
            }

            try
            {
                string   fileName = Path.Combine(FolderMacros, name + Common.FileExtensionMacro);
                string[] commands = IrssMacro.ReadFromFile(fileName);
                foreach (var cmd in commands)
                {
                    InsertCommand(cmd);
                }
            }
            catch (Exception ex)
            {
                IrssLog.Error(ex);
                MessageBox.Show(this, ex.Message, "Failed to load macro: " + name + Common.FileExtensionMacro, MessageBoxButtons.OK, MessageBoxIcon.Error);
                textBoxName.Text = "";
            }

            _editedMacro = false;
        }