예제 #1
0
            public static void Process(InputRemoting receiver, Message msg)
            {
                var senderIndex = receiver.FindOrCreateSenderRecord(msg.participantId);
                var data        = DeserializeData <Data>(msg.data);

                // Make sure we haven't already seen the device.
                var devices = receiver.m_Senders[senderIndex].devices;

                if (devices != null)
                {
                    foreach (var entry in devices)
                    {
                        if (entry.remoteId == data.deviceId)
                        {
                            Debug.LogError(string.Format(
                                               "Already received device with id {0} (layout '{1}', description '{3}) from remote {2}",
                                               data.deviceId,
                                               data.layout, msg.participantId, data.description));
                            return;
                        }
                    }
                }

                // Create device.
                var layout = string.Format("{0}::{1}", receiver.m_Senders[senderIndex].layoutNamespace,
                                           data.layout);
                InputDevice device;

                try
                {
                    device = receiver.m_LocalManager.AddDevice(layout,
                                                               string.Format("Remote{0}::{1}", msg.participantId, data.name));
                }
                catch (Exception exception)
                {
                    Debug.Log(
                        string.Format(
                            "Could not create remote device '{0}' with layout '{1}' locally (exception: {2})",
                            data.description, data.layout, exception));
                    return;
                }
                device.m_Description = data.description;
                device.m_Flags      |= InputDevice.Flags.Remote;

                // Remember it.
                var record = new RemoteInputDevice
                {
                    remoteId    = data.deviceId,
                    localId     = device.id,
                    description = data.description,
                    layoutName  = layout
                };

                ArrayHelpers.Append(ref receiver.m_Senders[senderIndex].devices, record);
            }
예제 #2
0
            public static void Process(InputRemoting receiver, Message msg)
            {
                var senderIndex = receiver.FindOrCreateSenderRecord(msg.participantId);
                var data        = DeserializeData <Data>(msg.data);

                // Make sure we haven't already seen the device.
                var devices = receiver.m_Senders[senderIndex].devices;

                if (devices != null)
                {
                    foreach (var entry in devices)
                    {
                        if (entry.remoteId == data.deviceId)
                        {
                            Debug.LogError(string.Format(
                                               "Already received device with id {0} (layout '{1}', description '{3}) from remote {2}",
                                               data.deviceId,
                                               data.layout, msg.participantId, data.description));
                            return;
                        }
                    }
                }

                // Create device.
                InputDevice device;

                try
                {
                    ////REVIEW: this gives remote devices names the same way that local devices receive them; should we make remote status visible in the name?
                    device = receiver.m_LocalManager.AddDevice(data.layout);
                    device.m_ParticipantId = msg.participantId;
                }
                catch (Exception exception)
                {
                    Debug.LogError(
                        $"Could not create remote device '{data.description}' with layout '{data.layout}' locally (exception: {exception})");
                    return;
                }
                device.m_Description  = data.description;
                device.m_DeviceFlags |= InputDevice.DeviceFlags.Remote;

                // Remember it.
                var record = new RemoteInputDevice
                {
                    remoteId    = data.deviceId,
                    localId     = device.id,
                    description = data.description,
                    layoutName  = data.layout
                };

                ArrayHelpers.Append(ref receiver.m_Senders[senderIndex].devices, record);
            }
예제 #3
0
            public static void Process(InputRemoting receiver, Message msg)
            {
                var senderIndex = receiver.FindOrCreateSenderRecord(msg.participantId);
                var data        = DeserializeData <Data>(msg.data);

                // Create device.
                var template = string.Format("{0}::{1}", receiver.m_Senders[senderIndex].templateNamespace,
                                             data.template);
                InputDevice device;

                try
                {
                    device = receiver.m_LocalManager.AddDevice(template,
                                                               string.Format("Remote{0}::{1}", msg.participantId, data.name));
                }
                catch (Exception exception)
                {
                    Debug.Log(
                        string.Format(
                            "Could not create remote device '{0}' with template '{1}' locally (exception: {2})",
                            data.description, data.template, exception));
                    return;
                }
                device.m_Description = data.description;
                device.m_Flags      |= InputDevice.Flags.Remote;

                // Remember it.
                var record = new RemoteInputDevice
                {
                    remoteId     = data.deviceId,
                    localId      = device.id,
                    description  = data.description,
                    templateName = template
                };

                ArrayHelpers.Append(ref receiver.m_Senders[senderIndex].devices, record);
            }