void IObserver <InputRemoting.Message> .OnNext(InputRemoting.Message msg)
        {
            if (m_Connection == null)
            {
                return;
            }

            ////TODO: this should really be sending to a specific player in the editor (can't
            ////      do that through the IEditorPlayerConnection interface though)

            switch (msg.type)
            {
            case InputRemoting.MessageType.NewDevice:
                m_Connection.Send(kNewDeviceMsg, msg.data);
                break;

            case InputRemoting.MessageType.NewLayout:
                m_Connection.Send(kNewLayoutMsg, msg.data);
                break;

            case InputRemoting.MessageType.NewEvents:
                m_Connection.Send(kNewEventsMsg, msg.data);
                break;

            case InputRemoting.MessageType.ChangeUsages:
                m_Connection.Send(kChangeUsagesMsg, msg.data);
                break;

            case InputRemoting.MessageType.RemoveDevice:
                m_Connection.Send(kRemoveDeviceMsg, msg.data);
                break;
            }
        }
        private void SendToSubscribers(InputRemoting.MessageType type, MessageEventArgs args)
        {
            if (m_Subscribers == null)
            {
                return;
            }

            var msg = new InputRemoting.Message
            {
                participantId = args.playerId,
                type          = type,
                data          = args.data
            };

            for (var i = 0; i < m_Subscribers.Length; ++i)
            {
                m_Subscribers[i].observer.OnNext(msg);
            }
        }