From 1207fe756044ee6f009fc54b1ebecf7f85751fee Mon Sep 17 00:00:00 2001 From: ushiostarfish Date: Tue, 6 Dec 2016 17:55:45 +0900 Subject: [PATCH 1/9] add: simple reciever class --- src/OSC/OSCReciever.cs | 69 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/OSC/OSCReciever.cs diff --git a/src/OSC/OSCReciever.cs b/src/OSC/OSCReciever.cs new file mode 100644 index 0000000..f58db4b --- /dev/null +++ b/src/OSC/OSCReciever.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using UnityOSC; +#if UNITY_EDITOR +using UnityEditor; +#endif + +public class OSCReciever +{ + Queue _queue = new Queue(); + OSCServer _server; + + public void Open(int port) + { +#if UNITY_EDITOR + if(PlayerSettings.runInBackground == false) + { + Debug.LogWarning("Recommend PlayerSettings > runInBackground = true"); + } +#endif + if (_server != null) + { + _server.Close(); + } + _server = new OSCServer(port); + _server.SleepMilliseconds = 0; + _server.PacketReceivedEvent += didRecievedEvent; + } + public void Close() + { + if (_server != null) + { + _server.Close(); + _server = null; + } + } + void didRecievedEvent(OSCServer sender, OSCPacket packet) + { + lock (_queue) + { + if (packet.IsBundle()) + { + var bundle = packet as OSCBundle; + if (0 < bundle.Data.Count) + { + var m = bundle.Data[0] as OSCMessage; + _queue.Enqueue(m); + } + } + else + { + _queue.Enqueue(packet as OSCMessage); + } + } + } + public bool hasWaitingMessages() + { + lock (_queue) + { + return 0 < _queue.Count; + } + } + public OSCMessage getNextMessage() + { + lock (_queue) + { + return _queue.Dequeue(); + } + } +} \ No newline at end of file From c296da2cc5b4cb313a5321cdd0231a613532f7dc Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 21 Apr 2018 18:05:50 +0200 Subject: [PATCH 2/9] added missing namespace for Debug --- src/OSC/OSCReciever.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OSC/OSCReciever.cs b/src/OSC/OSCReciever.cs index f58db4b..ea397b3 100644 --- a/src/OSC/OSCReciever.cs +++ b/src/OSC/OSCReciever.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using UnityEngine; using UnityOSC; #if UNITY_EDITOR using UnityEditor; From ff519b90f20fae4e97b7a43b7e9d9ac321f5a23e Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 21 Apr 2018 22:01:13 +0200 Subject: [PATCH 3/9] OSCReceiver now handles every message of a bundle, not just the first --- src/OSC/OSCReciever.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/OSC/OSCReciever.cs b/src/OSC/OSCReciever.cs index ea397b3..8401073 100644 --- a/src/OSC/OSCReciever.cs +++ b/src/OSC/OSCReciever.cs @@ -41,10 +41,11 @@ void didRecievedEvent(OSCServer sender, OSCPacket packet) if (packet.IsBundle()) { var bundle = packet as OSCBundle; - if (0 < bundle.Data.Count) + + foreach(object obj in bundle.Data) { - var m = bundle.Data[0] as OSCMessage; - _queue.Enqueue(m); + OSCMessage msg = obj as OSCMessage; + _queue.Enqueue(msg); } } else From 1cba351c3797b03ec628b9f05ffe05e58094c88e Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sun, 22 Apr 2018 08:07:03 +0200 Subject: [PATCH 4/9] linebreaks added --- src/OSC/OSCReciever.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OSC/OSCReciever.cs b/src/OSC/OSCReciever.cs index 8401073..84af5bd 100644 --- a/src/OSC/OSCReciever.cs +++ b/src/OSC/OSCReciever.cs @@ -26,6 +26,7 @@ public void Open(int port) _server.SleepMilliseconds = 0; _server.PacketReceivedEvent += didRecievedEvent; } + public void Close() { if (_server != null) @@ -34,6 +35,7 @@ public void Close() _server = null; } } + void didRecievedEvent(OSCServer sender, OSCPacket packet) { lock (_queue) @@ -54,6 +56,7 @@ void didRecievedEvent(OSCServer sender, OSCPacket packet) } } } + public bool hasWaitingMessages() { lock (_queue) @@ -61,6 +64,7 @@ public bool hasWaitingMessages() return 0 < _queue.Count; } } + public OSCMessage getNextMessage() { lock (_queue) From ba12342b284666efc73685d9f156ccc4f95ddd1b Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sun, 22 Apr 2018 19:33:40 +0200 Subject: [PATCH 5/9] README update according to the new feature: OSCReceiver --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3abc712..7f5d75a 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,28 @@ Open Sound Control classes and API for the Unity 3d game engine Based on Bespoke Open Sound Control Library by Paul Varcholik (pvarchol@bespokesoftware.org). Licensed under MIT license. -##How to use +## How to use + +### Install Copy the src/Editor folder contents to the corresponding Editor/ folder of your Unity project. The rest can go to your e.g. Assets/ folder of the same project. +### Usage + +There are two different approaches to use the plugin: + +#### OSCHandler + +The first and original approach works by modifying and initializing the `OSCHandler`. It is a Singleton handling your client & server connections and sending & receiving OSC data. Additionally, all incoming and outgoing messages are logged and can be viewed in an Editor Window. + +Check the documentation below for more detailed instructions. + +#### OSCReceiver + +The second approach is a simple `OSCReceiver` which only supports receiving OSC data but with the benefits of reduced complexity and a thread-safe `OSCMessage` queue. + +After opening a server connection by `OSCReceiver.Open(int port)` you can easily receive new OSCMessages via `OSCReceiver.getNextMessage()`. Always make sure there are OSCMessages available by using `OSCReceiver.hasWaitingMessages()` before trying to receive new ones. + ## Documentation and examples of usage docs/doxygen/html/index.html From fb2e4bab78611a162c69316983597418857a6ab5 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 23 Apr 2018 22:48:20 +0200 Subject: [PATCH 6/9] added example script and scene for the simple receiver --- .../SimpleReceiver/SimpleReceiverExample.cs | 44 +++ .../SimpleReceiver/SimpleReceiverScene.unity | 293 ++++++++++++++++++ 2 files changed, 337 insertions(+) create mode 100644 src/Example/SimpleReceiver/SimpleReceiverExample.cs create mode 100644 src/Example/SimpleReceiver/SimpleReceiverScene.unity diff --git a/src/Example/SimpleReceiver/SimpleReceiverExample.cs b/src/Example/SimpleReceiver/SimpleReceiverExample.cs new file mode 100644 index 0000000..fce3343 --- /dev/null +++ b/src/Example/SimpleReceiver/SimpleReceiverExample.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityOSC; + +public class SimpleReceiverExample : MonoBehaviour { + + private OSCReciever reciever; + + public int port = 8338; + + // Use this for initialization + void Start () { + reciever = new OSCReciever(); + reciever.Open(port); + } + + // Update is called once per frame + void Update () { + // Debug.Log("before receive"); + if(reciever.hasWaitingMessages()){ + OSCMessage msg = reciever.getNextMessage(); + Debug.Log("msg received"); + Debug.Log(msg.Address); + // Debug.Log(msg.Data.Count); + Debug.Log(DataToString(msg.Data)); + } + // Debug.Log("after receive"); + } + + private string DataToString(List data) + { + string buffer = ""; + + for(int i = 0; i < data.Count; i++) + { + buffer += data[i].ToString() + " "; + } + + buffer += "\n"; + + return buffer; + } +} diff --git a/src/Example/SimpleReceiver/SimpleReceiverScene.unity b/src/Example/SimpleReceiver/SimpleReceiverScene.unity new file mode 100644 index 0000000..d1ce531 --- /dev/null +++ b/src/Example/SimpleReceiver/SimpleReceiverScene.unity @@ -0,0 +1,293 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028334, g: 0.22571328, b: 0.30692166, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 10 + m_AtlasSize: 512 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 256 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &170076733 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 170076735} + - component: {fileID: 170076734} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &170076734 +Light: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 170076733} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 1 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &170076735 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 170076733} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &282840810 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 282840814} + - component: {fileID: 282840813} + - component: {fileID: 282840811} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &282840811 +AudioListener: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 282840810} + m_Enabled: 1 +--- !u!20 &282840813 +Camera: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 282840810} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 1 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &282840814 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 282840810} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1975791288 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 5 + m_Component: + - component: {fileID: 1975791290} + - component: {fileID: 1975791289} + m_Layer: 0 + m_Name: OSCMessageReceiver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1975791289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1975791288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d6bb09df8db864ac2a26c59604ee133b, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1975791290 +Transform: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1975791288} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} From f160241b29fe09e5c2e415df035f310250c0cae0 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 23 Apr 2018 23:04:00 +0200 Subject: [PATCH 7/9] renamed examples folder --- src/{Example => Examples}/SimpleReceiver/SimpleReceiverExample.cs | 0 .../SimpleReceiver/SimpleReceiverScene.unity | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{Example => Examples}/SimpleReceiver/SimpleReceiverExample.cs (100%) rename src/{Example => Examples}/SimpleReceiver/SimpleReceiverScene.unity (100%) diff --git a/src/Example/SimpleReceiver/SimpleReceiverExample.cs b/src/Examples/SimpleReceiver/SimpleReceiverExample.cs similarity index 100% rename from src/Example/SimpleReceiver/SimpleReceiverExample.cs rename to src/Examples/SimpleReceiver/SimpleReceiverExample.cs diff --git a/src/Example/SimpleReceiver/SimpleReceiverScene.unity b/src/Examples/SimpleReceiver/SimpleReceiverScene.unity similarity index 100% rename from src/Example/SimpleReceiver/SimpleReceiverScene.unity rename to src/Examples/SimpleReceiver/SimpleReceiverScene.unity From 1d7342e02f082d503a504c1195e235ab381d325c Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 30 Apr 2018 13:33:23 +0200 Subject: [PATCH 8/9] added license and namespace --- src/OSC/OSCReciever.cs | 126 ++++++++++++++++++++++++----------------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/src/OSC/OSCReciever.cs b/src/OSC/OSCReciever.cs index 84af5bd..f24b493 100644 --- a/src/OSC/OSCReciever.cs +++ b/src/OSC/OSCReciever.cs @@ -1,75 +1,99 @@ -using System.Collections.Generic; +// +// UnityOSC - Open Sound Control interface for the Unity3d game engine +// +// Copyright (c) 2012 Jorge Garcia Martin +// Last edit: Gerard Llorach 2nd August 2017 +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, +// and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions +// of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// + + +using System.Collections.Generic; using UnityEngine; -using UnityOSC; #if UNITY_EDITOR using UnityEditor; #endif -public class OSCReciever +namespace UnityOSC { - Queue _queue = new Queue(); - OSCServer _server; - - public void Open(int port) + public class OSCReciever { -#if UNITY_EDITOR - if(PlayerSettings.runInBackground == false) + Queue _queue = new Queue(); + OSCServer _server; + + public void Open(int port) { - Debug.LogWarning("Recommend PlayerSettings > runInBackground = true"); - } +#if UNITY_EDITOR + if(PlayerSettings.runInBackground == false) + { + Debug.LogWarning("Recommend PlayerSettings > runInBackground = true"); + } #endif - if (_server != null) - { - _server.Close(); + if (_server != null) + { + _server.Close(); + } + _server = new OSCServer(port); + _server.SleepMilliseconds = 0; + _server.PacketReceivedEvent += didRecievedEvent; } - _server = new OSCServer(port); - _server.SleepMilliseconds = 0; - _server.PacketReceivedEvent += didRecievedEvent; - } - - public void Close() - { - if (_server != null) + + public void Close() { - _server.Close(); - _server = null; + if (_server != null) + { + _server.Close(); + _server = null; + } } - } - - void didRecievedEvent(OSCServer sender, OSCPacket packet) - { - lock (_queue) + + void didRecievedEvent(OSCServer sender, OSCPacket packet) { - if (packet.IsBundle()) + lock (_queue) { - var bundle = packet as OSCBundle; - - foreach(object obj in bundle.Data) + if (packet.IsBundle()) { - OSCMessage msg = obj as OSCMessage; - _queue.Enqueue(msg); + var bundle = packet as OSCBundle; + + foreach(object obj in bundle.Data) + { + OSCMessage msg = obj as OSCMessage; + _queue.Enqueue(msg); + } + } + else + { + _queue.Enqueue(packet as OSCMessage); } - } - else - { - _queue.Enqueue(packet as OSCMessage); } } - } - - public bool hasWaitingMessages() - { - lock (_queue) + + public bool hasWaitingMessages() { - return 0 < _queue.Count; + lock (_queue) + { + return 0 < _queue.Count; + } } - } - - public OSCMessage getNextMessage() - { - lock (_queue) + + public OSCMessage getNextMessage() { - return _queue.Dequeue(); + lock (_queue) + { + return _queue.Dequeue(); + } } } } \ No newline at end of file From e23b8e8be69a9cd86b705a381db81bb17cb69766 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 30 Apr 2018 13:33:58 +0200 Subject: [PATCH 9/9] improved log + clean up --- src/Examples/SimpleReceiver/SimpleReceiverExample.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Examples/SimpleReceiver/SimpleReceiverExample.cs b/src/Examples/SimpleReceiver/SimpleReceiverExample.cs index fce3343..9720d86 100644 --- a/src/Examples/SimpleReceiver/SimpleReceiverExample.cs +++ b/src/Examples/SimpleReceiver/SimpleReceiverExample.cs @@ -17,15 +17,10 @@ void Start () { // Update is called once per frame void Update () { - // Debug.Log("before receive"); if(reciever.hasWaitingMessages()){ OSCMessage msg = reciever.getNextMessage(); - Debug.Log("msg received"); - Debug.Log(msg.Address); - // Debug.Log(msg.Data.Count); - Debug.Log(DataToString(msg.Data)); + Debug.Log(string.Format("message received: {0} {1}", msg.Address, DataToString(msg.Data))); } - // Debug.Log("after receive"); } private string DataToString(List data)