コード例 #1
0
ファイル: K2SClient.cs プロジェクト: Gamgie/K2S-Unity
    void packetReceived(OSCPacket packet)
    {
        //Debug.Log("got packet");
        OSCMessage msg = (OSCMessage)packet;

        switch(msg.Address)
        {

            case "/k2s/body/entered":
                Debug.Log("body entered : "+ (int)msg.Data[0]);
                addBody((int)msg.Data[0]);
                break;

            case "/k2s/body/left":
                Debug.Log("body left");
                int bodyID = (int)msg.Data[0];
                if(bodies.ContainsKey(bodyID))
                {
                    orderedBodies.Remove(bodies[bodyID]);
                    bodies.Remove(bodyID);

                    orderedBodies.Sort(delegate (K2SBody x, K2SBody y)
                    {
                        return y.age.CompareTo(x.age);
                    });

                    if (bodyLeft != null) bodyLeft(bodyID);
                }

                break;

            case "/k2s/body/update":
                bodyID = (int)msg.Data[0];
                if (!bodies.ContainsKey(bodyID)) addBody(bodyID);

                bodies[bodyID].update((int)msg.Data[1],(int)msg.Data[2]);
                break;

            case "/k2s/joint":
                bodyID = (int)msg.Data[0];
                K2SJoint.JointType jointType = (K2SJoint.JointType)(int)msg.Data[1];
                K2SJoint joint = bodies[bodyID].joints[jointType];

                Vector3 position = new Vector3((float)msg.Data[2], (float)msg.Data[3], (float)msg.Data[4]);
                Quaternion orientation = Quaternion.Euler((float)msg.Data[5], (float)msg.Data[6], (float)msg.Data[7]);
                int trackingState = (int)msg.Data[8];

                joint.update((position-originOffset)*scaleFactor, orientation, trackingState);
                break;

            case "/k2s/primary":
                primaryJointsSelected = (int)msg.Data[0] == 1;
                break;

            case "/k2s/secondary":
                secondaryJointsSelected = (int)msg.Data[0] == 1;
                break;

        }
    }
コード例 #2
0
ファイル: OscClient.cs プロジェクト: Mordrag/X-Air-Universal
 public async void Send(OSCPacket message)
 {
     using (var stream = await Socket.GetOutputStreamAsync(new HostName(_ip), PORT))
     using (var writer = new DataWriter(stream))
     {
         writer.WriteBytes(message.BinaryData);
         await writer.StoreAsync();
     }
     await Task.Delay(1);
 }
コード例 #3
0
ファイル: MuseInterface.cs プロジェクト: am-t/mount-amanita
 private void OnPacketReceivedEvent(OSCServer sender, OSCPacket packet)
 {
     // Send something from PureData and it shows up in the Unity console
     if (packet.Address.StartsWith("/muse/elements/experimental/concentration"))
     {
         manager.message(ServerName, "concentration",packet.Data[0]);
     }/*else if(packet.Address.StartsWith("/muse/elements/blink")){
         manager.message(ServerName, "blink", packet.Data[0]);
     }*/else if(packet.Address.StartsWith("/muse/elements/touching_forehead")){
         manager.message(ServerName, "touching", packet.Data[0]);
     }
     //Debug.Log(packet.Address + ": " + DataToString(packet.Data));
 }
コード例 #4
0
    void OSCReceicePacket(OSCServer s, OSCPacket p)
    {
        if(p.Address.Equals("/muse/elements/raw_fft0"))
        {
            //Debug.Log("Receiving FFT!");
            //Debug.Log(test.Count);
            //fftqueue.Enqueue(packet.Data);
            for(int i=0; i< fftarr.Length; i++)
            {
                fftarr[i]=(float)p.Data[i];
                //Debug.Log(fftarr[i]);
            }

        }
    }
コード例 #5
0
ファイル: OSCConnection.cs プロジェクト: bendingb/cycle1
    private void OnPacketReceivedEvent(OSCServer sender, OSCPacket packet)
    {
        lock (this) {
            // Send something from PureData and it shows up in the Unity console
            if (packet.Address.Equals ("/muse/acc")) {
                acc = new Vector3 ((float)packet.Data [0], (float)packet.Data [1], (float)packet.Data [2]);

                //Debug.Log (acc);

                //Debug.Log(packet.Address + ": " + DataToString(packet.Data));
            }
        }

        lock (this) {
            // Send something from PureData and it shows up in the Unity console
            if (packet.Address.Equals ("/muse/elements/blink")) {
                blink = ((int)packet.Data [0]);
                //Debug.Log (blink);
            }
        }

        lock (this) {
            // Send something from PureData and it shows up in the Unity console
            if (packet.Address.Equals ("/muse/elements/horseshoe")) {
                isMuseOn = DataToString(packet.Data);
            }
        }

        lock (this) {
            // Send something from PureData and it shows up in the Unity console
            if (packet.Address.Equals ("/muse/elements/experimental/mellow")) {
                mellowScore = ((float)packet.Data [0]);
                //Debug.Log (mellowScore);
            }
        }

            // Send something from PureData and it shows up in the Unity console
            //if (packet.Address.Equals ("/muse/elements/experimental/concentration")) {
            //	concentration = new Vector3 ((float)packet.Data [0], (float)packet.Data [1], (float)packet.Data [2]);

            //	Debug.Log (concentration);

                //Debug.Log(packet.Address + ": " + DataToString(packet.Data));
            //}
    }
コード例 #6
0
    void HandleMessage(OSCPacket mes)
    {
        //Debug.Log("message received : " + mes.Address.ToString());
        switch (mes.Address.ToString().ToLower())
        {
        case "/iss/tracker":
            string serial = mes.Data[0].ToString();
            if (GetTrackerPrefab(serial) != null)
            {
                if (!trackers.ContainsKey(serial))
                {
                    lock (lockObject)
                    {
                        trackersToCreate.Add(serial);
                    }
                }
                else if (mes.Data.Count >= 8)
                {
                    Vector3 p = new Vector3();
                    p.x = float.Parse(mes.Data[1].ToString());
                    p.y = float.Parse(mes.Data[2].ToString());
                    p.z = float.Parse(mes.Data[3].ToString());

                    Quaternion q = new Quaternion();
                    q.x = float.Parse(mes.Data[4].ToString());
                    q.y = float.Parse(mes.Data[5].ToString());
                    q.z = float.Parse(mes.Data[6].ToString());
                    q.w = float.Parse(mes.Data[7].ToString());

                    int stab = -1;
                    if (mes.Data.Count > 8)
                    {
                        stab = int.Parse(mes.Data[8].ToString());
                    }

                    TrackerObject tObj = trackers[serial];
                    tObj.update(p, q, stab);
                }
            }
            break;

        default:
            break;
        }
    }
コード例 #7
0
        public override void Unpack(OSCPacket _packet)
        {
            object obj = _packet.Data[0];

            System.Type type = obj.GetType();
            if (type == typeof(string))
            {
                Value = (string)obj;
            }

            /*
             * else if (type == typeof(byte)  ) { value = (byte)obj; }
             * else if (type == typeof(int)   ) { value = (int)obj; }
             * else if (type == typeof(long)  ) { value = (int) ((long)obj); }
             * else if (type == typeof(float) ) { value = (int) ((float)obj); }
             * else if (type == typeof(double)) { value = (int) ((double)obj); }
             */
        }
コード例 #8
0
    /// <summary>
    /// Callback when a message is received. It stores the messages in a list of the oscControl
    void OnPacketReceived(string serverId, OSCPacket packet)
    {
        // Remember origin
        //packet.server = server;

        //// Limit buffer
        //if (packets.Count > _loglength)
        //{
        //    packets.RemoveRange(0, packets.Count - _loglength);
        //}

        //// Add to OSCPackets list
        //packets.Add(packet);
        if (PacketRecievedEvent != null)
        {
            PacketRecievedEvent(serverId, packet);
        }
    }
コード例 #9
0
ファイル: AMPM.cs プロジェクト: Potion/ampm
        private static void Server_MessageReceived(OSCServer sender, OSCPacket e)
        {
            if (OnAmpmMessage == null)
            {
                return;
            }

            string   name = e.Address.Replace("/", string.Empty);
            string   json = e.Data.FirstOrDefault() as string;
            JSONNode data = null;

            if (json != null)
            {
                data = JSON.Parse(json);
            }

            OnAmpmMessage(null, new Tuple <string, JSONNode>(name, data));
        }
コード例 #10
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            if (!FInput.IsChanged)
            {
                return;
            }

            if ((FInput.SliceCount == 0) || (FInput[0] == null) || (FInput[0].Length == 0))
            {
                return;
            }

            SpreadMax          = FInput.SliceCount;
            FOutput.SliceCount = SpreadMax;

            for (int i = 0; i < SpreadMax; i++)
            {
                FOutput[i].SliceCount = 0;

                MemoryStream ms = new MemoryStream();
                FInput[i].Position = 0;
                FInput[i].CopyTo(ms);
                byte[] bytes = ms.ToArray();
                int    start = 0;

                OSCPacket packet = OSCPacket.Unpack(bytes, ref start, (int)FInput[i].Length);

                if (packet.IsBundle())
                {
                    var packets = ((OSCBundle)packet).Values;
                    foreach (OSCPacket innerPacket in packets)
                    {
                        MemoryStream memoryStream = new MemoryStream(innerPacket.BinaryData);
                        FOutput[i].Add(memoryStream);
                    }
                }
                else
                {
                    MemoryStream memoryStream = new MemoryStream(packet.BinaryData);
                    FOutput[i].Add(memoryStream);
                }
            }
            FOutput.Flush();
        }
コード例 #11
0
        public static List <OSCConsolePacket> LoadConsoleMessages(string filePath)
        {
            var list = new List <OSCConsolePacket>();

            if (!File.Exists(filePath))
            {
                SaveConsoleMessages(filePath, list);

                return(list);
            }

            var document = new XmlDocument();

            try
            {
                document.Load(filePath);

                var rootElement = document.FirstChild;

                foreach (XmlNode messageElement in rootElement.ChildNodes)
                {
                    var consoleMessage = new OSCConsolePacket();

                    var instanceAttribute = messageElement.Attributes["info"];
                    consoleMessage.Info = instanceAttribute.InnerText;

                    var typeAttribute = messageElement.Attributes["type"];
                    consoleMessage.PacketType = (OSCConsolePacketType)Enum.Parse(typeof(OSCConsolePacketType), typeAttribute.InnerText);

                    var packetElement = messageElement["packet"];
                    consoleMessage.Packet = OSCPacket.FromBase64String(packetElement.InnerText);

                    list.Add(consoleMessage);
                }
            }
            catch (Exception e)
            {
                Debug.LogFormat("[OSCConsole] Error: {0}", e);
                list.Clear();
            }

            return(list);
        }
コード例 #12
0
    /// <summary>
    /// Called when [packet received].
    /// </summary>
    /// <param name="server">The distant server that sent the packet.</param>
    /// <param name="packet">The packet received.</param>
    private void OnPacketReceived(OSCServer server, OSCPacket packet)
    {
        bool handled = false;

        foreach (OscSubscriber sub in this._serverSubscriber)
        {
            Match m = sub.topicRegex.Match(packet.Address);
            if (m.Success)
            {
                handled = true;
                sub.callback(packet.Address, packet, m.Groups);
            }
        }

        if (!handled)
        { // If not handled => print it
            Debug.LogFormat("OSC Message received on {0} : {1}", packet.Address, packet.Data.Select(d => d.ToString()).Aggregate((a, b) => a + " " + b));
        }
    }
コード例 #13
0
ファイル: oscControl.cs プロジェクト: wtshm/UnityOSC
    // Process OSC message
    private void receivedOSC(OSCPacket pckt)
    {
        if (pckt == null)
        {
            Debug.Log("Empty packet"); return;
        }

        // Origin
        int serverPort = pckt.server.ServerPort;

        // Address
        string address = pckt.Address.Substring(1);

        // Data at index 0
        string data0 = pckt.Data.Count != 0 ? pckt.Data[0].ToString() : "null";

        // Print out messages
        Debug.Log("Input port: " + serverPort.ToString() + "\nAddress: " + address + "\nData [0]: " + data0);
    }
コード例 #14
0
    protected override void OnMessageDequeue(WebSocketSharp.MessageEventArgs message)
    {
        // statsSumary.AddBytesRecieved(message.RawData.Length);
        OSCPacket oscpacket = OSCPacket.Unpack(message.RawData);

        if (oscpacket.Address == "/message")
        {
            DebugClient("recieved messaget " + oscpacket.GetString(0));
        }
        if (oscpacket != null)
        {
            OnOSCMessage(oscpacket as OSCMessage);
            //	DebugClient("recieved " + oscpacket.Address);
        }
        else
        {
            DebugClient("unpacking osc messge failed " + message.Data);
        }
    }
コード例 #15
0
ファイル: OSCReceiver.cs プロジェクト: webVJ/examples_unity
    void didRecievedEvent(OSCServer sender, OSCPacket packet)
    {
        lock (_queue)
        {
            if (packet.IsBundle())
            {
                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);
            }
        }
    }
コード例 #16
0
ファイル: OSCHandler.cs プロジェクト: Mjkp/CuGo
    /// <summary>
    /// Callback when a message is received. It stores the messages in a list of the oscControl
    void OnPacketReceived(OSCServer server, OSCPacket packet)
    {
        // Remember origin
        packet.server = server;

        // Limit buffer
        if (packets.Count > _loglength)
        {
            packets.RemoveRange(0, packets.Count - _loglength);
        }
        // Add to OSCPackets list
        packets.Add(packet);

        // handle callback (if any)

        foreach (OSCListener callback in callbacks)
        {
            callback.OnOSC(packet);
        }
    }
コード例 #17
0
ファイル: OSC_Manager.cs プロジェクト: stefanmarks/3D_Painter
    public void SendPacket(OSCPacket packet)
    {
        if (clients == null)
        {
            return;
        }

        if (debugDataStream)
        {
            DumpPacket("Sending", packet);
        }

        foreach (OSCClient client in clients.Values)
        {
            if (client != clientToExclude)
            {
                client.Send(packet);
            }
        }
    }
コード例 #18
0
    private void OscServerOnPacketReceivedEvent(OSCServer sender, OSCPacket packet)
    {
        if (!packet.Address.Equals("/wek/outputs"))
        {
            return;
        }

        var gestureStart = (float)packet.Data[0];
        var gestureEnd   = (float)packet.Data[1];

        if (gestureStart > 0.9 && gestureEnd < 0.1)
        {
            Debug.Log("Starting gesture!");
        }

        if (gestureStart < 0.1 && gestureEnd > 0.9)
        {
            Debug.Log("Gestured ended!");
        }
    }
コード例 #19
0
 void Update()
 {
     while (0 < queue.Count)
     {
         OSCPacket packet = queue.Dequeue() as OSCPacket;
         if (packet.IsBundle())
         {
             OSCBundle bundle = packet as OSCBundle;
             foreach (OSCMessage msg in bundle.Data)
             {
                 Receive(msg);
             }
         }
         else
         {
             OSCMessage msg = packet as OSCMessage;
             Receive(msg);
         }
     }
 }
コード例 #20
0
        public void Send(OSCPacket packet)
        {
            if (useBundle && packet != null && (packet is OSCMessage))
            {
                _packetPool.Add(packet);

                return;
            }

            if (mapBundle != null)
            {
                mapBundle.Map(packet);
            }

            var data = OSCConverter.Pack(packet);

            transmitterBackend.Send(data);

            OSCConsole.Transmitted(this, packet);
        }
コード例 #21
0
        private void dispatchPacket()
        {
            while (m_packetQueue.Count > 0)
            {
                OSCPacket packet = m_packetQueue.Dequeue();

                BobLog.Instance.Log(packet.Address);
                if (m_Executables.ContainsKey(packet.Address))
                {
                    try
                    {
                        m_Executables[packet.Address].Execute(packet);
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }
                }
            }
        }
コード例 #22
0
ファイル: LaserTracker.cs プロジェクト: Phenix8/Dep
    private void processOSCPacket(OSCPacket packet)
    {
        if (packet != null)
        {
            lastPacket = packet;

            if (packet.IsBundle())
            {
                ArrayList messages = packet.Values;
                for (int i = 0; i < messages.Count; i++)
                {
                    processMessage((OSCMessage)messages[i]);
                }
            }
            else
            {
                processMessage((OSCMessage)packet);
            }
        }
    }
コード例 #23
0
    // A few comments on the TUIO protocol:
    // Whether it is a finger or object input depends on the address ("/tuio/2Dcur" or "/tuio/2Dobj" respectively)
    // Information is carried in two types of messages: "alive" and "set".
    // "alive" block lists the touch points that are currently active, there are no explicit messages
    // for touch point removal. This is due to the messages being sent via UDP, so technically unreliable.
    // We are communicating over localhost, so could in fact use pipes and introduce a custom protocol,
    // but not sure if it's worth rewriting now. The amount of touch points at a time is relatively small
    // to cause any data processing bottleneck, so probably no.

    private void Listen()
    {
        Debug.Log("UDP Listener started...");
        while (true)
        {
            try {
                byte[] receivedBytes = client.Receive(ref remoteEndpoint);

                if (receivedBytes.Length > 0)
                {
                    lock (queueLock) {
                        OSCBundle packet = (OSCBundle)OSCPacket.Unpack(receivedBytes);
                        packetQueue.Enqueue(packet);
                    }
                }
            } catch (Exception error) {
                Debug.LogError(error.ToString());
            }
        }
    }
コード例 #24
0
    void Update()
    {
        //Debug.Log("Updating");
        if (queue == null)
        {
            //Debug.Log("nada");
            return;
        }


        while (0 < queue.Count)
        {
            //Debug.Log("HAS STUFF");
            OSCPacket packet = queue.Dequeue() as OSCPacket;
            if (packet.IsBundle())
            {
                // if OSCBundl
                OSCBundle bundle = packet as OSCBundle;
                foreach (OSCMessage msg in bundle.Data)
                {
                }
            }
            else
            {
                OSCMessage msg = packet as OSCMessage;
                //Debug.Log(msg.Address);
                if ("/unity_osc" == msg.Address)
                {
                    //print (msg.Data[1].ToString());
                    var thing = msg.Data[1].ToString();
                    var pos   = new Vector3((float)msg.Data[2], (float)msg.Data[3], (float)msg.Data[4]);

                    //rb.MovePosition(pos);

                    var dur = (float)packet.Data[5];

                    AppendItem(thing, pos, dur);
                }
            }
        }
    }
コード例 #25
0
    static void OnPacketReceived(OSCServer server, OSCPacket packet)
    {
        lock (live) {
            // OSC address is of the format /1/pushXXX, where XXX indicates the tile whose
            // state is changing, from 1-100
            string address     = packet.Address;
            string push        = "push";
            int    pushIndex   = address.IndexOf(push);
            int    pushLength  = push.Length;
            int    tileNumber  = Convert.ToInt32(address.Substring(pushIndex + pushLength));
            float  sensorState = (float)packet.Data [0];
            //Debug.Log ("OSC RX: " + tileNumber + " State: " + sensorState);
            bool state = System.Convert.ToBoolean(sensorState);
            int  index = tileNumber - 1;

            live.tiles [index] = state;

            if (state)
            {
                if (!live.pressed.Contains(index))
                {
                    live.pressed.Add(index);
                    if (live.released.Contains(index))
                    {
                        live.released.Remove(index);
                    }
                }
            }
            else
            {
                if (!live.released.Contains(index))
                {
                    live.released.Add(index);
                    if (live.pressed.Contains(index))
                    {
                        live.pressed.Remove(index);
                    }
                }
            }
        }
    }
コード例 #26
0
        public virtual bool ParsePacket(OSCPacket packet)
        {
            if (String.IsNullOrEmpty(packet.Address))
            {
                Debug.Log("null packet address"); return(false);
            }
            //        Debug.Log(baseAddressLen + " " + packet.Address);
            try
            {
                string address = packet.Address.Substring(baseAddressLen);

                // for (int i = 0; i < oscPartialBinding.Count; i++)
                // {
                //     string thisString = oscPartialBinding[i].Key;
                //     if (address.StartsWith(thisString))
                //     {
                //         UseBinding(oscPartialBinding[i].Value, packet);
                //     }
                //     else Debug.Log("not matched");
                // }

                Binding listener;
                if (oscBinding.TryGetValue(address, out listener))
                {
                    try
                    {
                        return(UseBinding(listener, packet));
                    }
                    catch (Exception e)
                    {
                        Debug.LogError("Error using binding " + e.Message);
                        if (listener.requester != null)
                        {
                            Debug.LogError("Binding info: " + address + " Monobehaviour: " + listener.requester.GetType().ToString() + " on gameobject " + listener.requester.name + " " + listener.objectType.ToString() + " " + listener.bindMethod.GetType().ToString());
                        }
                    }
                }
            }
            catch (Exception e) { Debug.LogError("invalid string " + e.Message); }
            return(true);
        }
コード例 #27
0
    // A few comments on the TUIO protocol:
    // Whether it is a finger or object input depends on the address ("/tuio/2Dcur" or "/tuio/2Dobj" respectively)
    // Information is carried in two types of messages: "alive" and "set".
    // "alive" block lists the touch points that are currently active, there are no explicit messages
    // for touch point removal. This is due to the messages being sent via UDP, so technically unreliable.
    // We are communicating over localhost, so could in fact use pipes and introduce a custom protocol,
    // but not sure if it's worth rewriting now. The amount of touch points at a time is relatively small
    // to cause any data processing bottleneck, so probably no.


    //Run on a seperate thread,
    //listens to incoming UDP messages from the Surface in a loop.
    //When a packet is received, saves it as the last received packet.
    private void Listen()
    {
        Debug.Log("UDP Listener started...");
        while (true)
        {
            try
            {
                byte[] receivedBytes = client.Receive(ref remoteEndpoint);

                if (receivedBytes.Length > 0)
                {
                    lock (packetLock)
                    {
                        // We don't care if there are unprocessed packets already,
                        // we care about the latest object/cursor packet only.

                        OSCBundle packet = (OSCBundle)OSCPacket.Unpack(receivedBytes);
                        foreach (OSCMessage msg in packet.Values)
                        {
                            if (msg.Address.Equals("/tuio/2Dobj"))
                            {
                                // It's an object packet
                                lastObjectPacket = packet;
                                break;
                            }
                            else if (msg.Address.Equals("/tuio/2Dcur"))
                            {
                                // It's a cursor packet
                                lastCursorPacket = packet;
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception error)
            {
                Debug.LogError(error.ToString());
            }
        }
    }
コード例 #28
0
ファイル: OSCBuffer.cs プロジェクト: cansik/seqosc-unity
        public void Read(byte[] data)
        {
            using (var reader = new BinaryReader(new MemoryStream(data)))
            {
                // read header
                var flags      = reader.ReadInt32();
                var compressed = flags.getFlag(0);

                var sampleCount = reader.ReadInt32();
                sampleCount = sampleCount < 0 ? int.MaxValue : sampleCount;

                var payloadLength = reader.ReadInt32();

                Speed   = reader.ReadSingle();
                Comment = System.Text.Encoding.UTF8.GetString(reader.ReadBytes(reader.ReadInt32()));

                // read payload
                var payload = reader.ReadBytes((int)(data.Length - reader.BaseStream.Position));

                if (compressed)
                {
                    payload = payload.Uncompress();
                }

                var count = 0;
                using (var payloadReader = new BinaryReader(new MemoryStream(payload)))
                {
                    // todo: check if can read is the right thing
                    while (count < sampleCount && payloadReader.BaseStream.HasRemaining())
                    {
                        var timestamp  = payloadReader.ReadInt64();
                        var length     = payloadReader.ReadInt32();
                        var packetData = payloadReader.ReadBytes(length);
                        var packet     = new OSCPacket(packetData);

                        Samples.Add(new OSCSample(timestamp, packet));
                        count++;
                    }
                }
            }
        }
コード例 #29
0
        public void Map(OSCPacket packet)
        {
            if (packet is OSCBundle)
            {
                var bundle = packet as OSCBundle;

                foreach (var bundlePacket in bundle.Packets)
                {
                    Map(bundlePacket);
                }
            }
            else if (packet is OSCMessage)
            {
                var message = packet as OSCMessage;

                foreach (var mapMessage in messages)
                {
                    mapMessage.Map(message);
                }
            }
        }
コード例 #30
0
 public static bool GetStringArray(this OSCPacket packet, out string[] value)
 {
     value = new string[0];
     if (packet.typeTag.Length < 3)
     {
         return(false);
     }
     for (int i = 1; i < packet.typeTag.Length; i++)
     {
         if (packet.typeTag[i] != 's')
         {
             return(false);
         }
     }
     value = new string[packet.typeTag.Length - 1];
     for (int i = 0; i < packet.typeTag.Length - 1; i++)
     {
         value[i] = packet.Data[i].ToString();
     }
     return(true);
 }
コード例 #31
0
        public override void Unpack(OSCPacket _packet)
        {
            for (int idx = 0; idx < _packet.Data.Count; idx++)
            {
                object      obj   = _packet.Data[idx];
                System.Type type  = obj.GetType();
                float       value = 0;
                if (type == typeof(byte))
                {
                    value = ((byte)obj);
                }
                else if (type == typeof(int))
                {
                    value = ((int)obj);
                }
                else if (type == typeof(long))
                {
                    value = ((long)obj);
                }
                else if (type == typeof(float))
                {
                    value = (float)obj;
                }
                else if (type == typeof(double))
                {
                    value = (float)((double)obj);
                }

                switch (idx)
                {
                case 0: Value.x = value; break;

                case 1: Value.y = value; break;

                case 2: Value.z = value; break;

                default: break;
                }
            }
        }
コード例 #32
0
    // Process OSC message
    private void receivedOSC(OSCPacket pckt)
    {
        if (pckt == null)
        {
            Debug.Log("UNITY OSC: Recieved empty packet");
            return;
        }

        float x = 0f;

        switch (msgMode)
        {
        case (MsgMode.P5):
            //x = (float) pckt.Data[0];
            Debug.Log("UNITY OSC: " + pckt.Data[0]);

            break;

        case (MsgMode.OF):
            OSCMessage msg = pckt.Data[0] as UnityOSC.OSCMessage;
            //x = (float) msg.Data[0];
            Debug.Log("UNITY OSC: " + msg.Data[0]);

            break;
        }

        /*
         * // Origin
         * int serverPort = pckt.server.ServerPort;
         *
         * // Address
         * string address = pckt.Address.Substring(1);
         *
         * // Data at index 0
         * string data0 = pckt.Data.Count != 0 ? pckt.Data[0].ToString() : "null";
         *
         * // Print out messages
         * Debug.Log("Input port: " + serverPort.ToString() + "\nAddress: " + address + "\nData [0]: " + data0);
         */
    }
コード例 #33
0
        void X32_OnMeter(object sender, OSCPacket packet)
        {
            int meter = Convert.ToInt32(packet.Nodes[2]);

            switch (meter)
            {
            case 1:
                this.BeginInvoke(new ThreadSafeOSC(UpdateMeter), packet.ToParams());
                break;

            case 14:
                this.BeginInvoke(new ThreadSafeOSC(UpdateMeter), packet.ToParams());
                break;

            case 15:
                this.BeginInvoke(new ThreadSafeOSC(UpdateMeter), packet.ToParams());
                break;

            default:
                break;
            }
        }
コード例 #34
0
 private void listen()
 {
     while (connected)
     {
         try
         {
             OSCPacket packet = receiver.Receive();
             if (packet != null)
             {
                 lock (processQueue)
                 {
                     //Debug.Log( "adding  packets " + processQueue.Count );
                     if (packet.IsBundle())
                     {
                         ArrayList messages = packet.Values;
                         for (int i = 0; i < messages.Count; i++)
                         {
                             processQueue.Add((OSCMessage)messages[i]);
                         }
                     }
                     else
                     {
                         processQueue.Add((OSCMessage)packet);
                     }
                 }
             }
             else
             {
                 Console.WriteLine("null packet");
             }
         }
         catch (Exception e)
         {
             Debug.Log(e.Message);
             Console.WriteLine(e.Message);
         }
     }
 }
コード例 #35
0
            /// Returns true if we got a full frame
            public bool Process(OSCPacket packet, Matrix4x4 transform)
            {
                switch (packet.Address)
                {
                case "/frame":
                    if (packet.Values.Count >= 1)
                    {
                        this.Frame = (int)packet.Values[0];
                    }
                    break;

                default:
                    //we're in it for the money!
                    var addressList = new List <string>(packet.Address.Split('/'));
                    var values      = packet.Values;
                    if (this.Root.Process(addressList, values, transform))
                    {
                        return(true);
                    }
                    break;
                }
                return(false);
            }
コード例 #36
0
ファイル: OSCInterface.cs プロジェクト: Titoulion/GhostPond
    private void OnPacketReceivedEvent(OSCServer sender, OSCPacket packet)
    {
        // Send something from PureData and it shows up in the Unity console
        if (packet.Address.StartsWith("/player/status")){
            if(Int32.Parse(packet.Data[0].ToString()) == 1){
                //Player Connected!
                Debug.Log("Player Connected!");
                main.ConnectionPlayer(true);
            }
            else if (Int32.Parse(packet.Data[0].ToString()) == 0)
            {
                //Player disconnected
                Debug.Log("Player disconnected!");
                main.ConnectionPlayer(false);

            }

        }else if(packet.Address.StartsWith("/player/heartbeat/trigger")){
            //Player heartbeat trigger Detected
            Debug.Log("Heartbeat");
            main.HeartBeat(true);

        }else if(packet.Address.StartsWith("/player/heartbeat/bpm")){
            //New Heartbeat BPM is in packet.Data[0]
            float newBpm = float.Parse(packet.Data[0].ToString());
            Debug.Log("Heartbeat BPM: " + newBpm);
            main.SetBPM(newBpm);

        }else if(packet.Address.StartsWith("/player/activation")){
            //Overall player activation curve value is in packet.Data[0]
            // min is 0. max is 1.
            float activation = float.Parse(packet.Data[0].ToString());
            Debug.Log("Activation: " + activation);
        }if (packet.Address.StartsWith("/button/pressure/status")){
            if (Int32.Parse(packet.Data[0].ToString()) == 1)
            {
                //Rock lifted!
                Debug.Log("Pressure button " + packet.Data[0]);
                main.RockInPlace(false);

            }
            else if (Int32.Parse(packet.Data[0].ToString()) == 0)
            {
                //Rock in Place
                Debug.Log("Pressure button " + packet.Data[0]);
                main.RockInPlace(true);

            }

        }if (packet.Address.StartsWith("/button/right/status"))
        {
            if (Int32.Parse(packet.Data[0].ToString()) == 1)
            {
                Debug.Log("Right button " + packet.Data[0]);
                main.UpdateStateButtons(2,1);

            }
            else if (Int32.Parse(packet.Data[0].ToString()) == 0)
            {
                Debug.Log("Right button " + packet.Data[0]);
                main.UpdateStateButtons(2,0);
            }

        }if (packet.Address.StartsWith("/button/center/status"))
        {
            if (Int32.Parse(packet.Data[0].ToString()) == 1)
            {
                Debug.Log("Center button " + packet.Data[0]);
                main.UpdateStateButtons(1,1);

            }
            else if (Int32.Parse(packet.Data[0].ToString()) == 0)
            {
                Debug.Log("Center button " + packet.Data[0]);
                main.UpdateStateButtons(1,0);

            }

        } if (packet.Address.StartsWith("/button/left/status"))
        {
            if (Int32.Parse(packet.Data[0].ToString()) == 1)
            {
                Debug.Log("Left button " + packet.Data[0]);
                main.UpdateStateButtons(0,1);

            }
            else if (Int32.Parse(packet.Data[0].ToString()) == 0)
            {
                Debug.Log("Left button " + packet.Data[0]);
                main.UpdateStateButtons(0,0);

            }

        }
        //Debug.Log(packet.Address + ": " + DataToString(packet.Data));
    }
コード例 #37
0
ファイル: OSCClient.cs プロジェクト: mmandel/8Nights2
 /// <summary>
 /// Sends an OSC packet to the defined destination and address of the client.
 /// </summary>
 /// <param name="packet">
 /// A <see cref="OSCPacket"/>
 /// </param>
 public void Send(OSCPacket packet)
 {
     byte[] data = packet.BinaryData;
     try
     {
         _udpClient.Send(data, data.Length);
     }
     catch
     {
     //MMANDEL: this annoying fails coming out of play mode, causing OSCHandler to linger in the scene
     //Let's just throw a warning instead of crashing
     Debug.LogWarning(String.Format("Can't send OSC packet to client {0} : {1}", _ipAddress, _port));
         //throw new Exception(String.Format("Can't send OSC packet to client {0} : {1}", _ipAddress, _port));
     }
 }
コード例 #38
0
 /// <summary>
 /// Sends an OSC packet to the defined destination and address of the client.
 /// </summary>
 /// <param name="packet">
 /// A <see cref="OSCPacket"/>
 /// </param>
 public void Send(OSCPacket packet)
 {
     byte[] data = packet.BinaryData;
     try
     {
         _udpClient.Send(data, data.Length);
     }
     catch
     {
         System.Diagnostics.Debug.WriteLine(String.Format("OSCClient.Send(): Can't send OSC packet to client {0} : {1}", _ipAddress, _port));
     }
 }
コード例 #39
0
ファイル: OSCServer.cs プロジェクト: VirsixInc/VRCubeSword
        /// <summary>
        /// Receives and unpacks an OSC packet.
        /// A <see cref="OSCPacket"/>
        /// </summary>
        private void Receive()
        {
            IPEndPoint ip = null;

            try
            {
                byte[] bytes = _udpClient.Receive(ref ip);

                if(bytes != null && bytes.Length > 0)
                {
                    OSCPacket packet = OSCPacket.Unpack(bytes);

                    _lastReceivedPacket = packet;

                    PacketReceivedEvent(this, _lastReceivedPacket);
                }
            }
            catch{
                throw new Exception(String.Format("Can't create server at port {0}", _localPort));
              			}
        }
コード例 #40
0
        private void HandleMeters(OSCPacket message)
        {
            MemoryStream stream = message.Value<MemoryStream>();
            var reader = new BinaryReader(stream);
            int size = reader.ReadInt32();

            float[] data = new float[size];
            for (int i = 0; i < size; i++)
                data[i] = reader.ReadInt16() / 256 + 80;

            reader.Dispose();
            stream.Dispose();

            for (int i = 0; i < 8; i++)
            {
                Application.Channels[i].Meter = data[i];
            }

        }
コード例 #41
0
ファイル: OSCServer.cs プロジェクト: wybq68/DIH_LUMBARROBAT
 /// <summary>
 /// Thread pool that receives upcoming messages.
 /// </summary>
 public void ReceivePool()
 {
     while (true)
     {
         _lastReceivedPacket = Receive();
         _lastReceivedPacket.TimeStamp = long.Parse(String.Concat(DateTime.Now.Ticks));
         lock (recvPacks)
         {
             recvPacks.Add(_lastReceivedPacket);
             if (recvPacks.Count > _lenth - 1)
             {
                 recvPacks.RemoveAt(0);
             }
         }
     }
 }
コード例 #42
0
        private async void OSCClient_OnReceive(OSCPacket message)
        {
#if DEBUG
            var t = Task.Factory.StartNew(() =>
            {
                if (!(_disableDebugOutput))
                    Debug.WriteLine(String.Format("Received from Device, Address: {0}, Value: {1}", message.Address, message.Value<object>()));
            });
#endif
            if (message.Address.StartsWith("/meters"))
                await _dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => HandleMeters(message));

            if (Application.ReceiveFromDevice(message.Address, message.Value<object>()))
                return;
        }
コード例 #43
0
 /// <summary>
 /// Thread pool that receives upcoming messages.
 /// </summary>
 private void ReceivePool()
 {
     while(true)
     {
         _lastReceivedPacket = Receive();
         _lastReceivedPacket.TimeStamp = long.Parse(String.Concat(DateTime.Now.Ticks));
     }
 }
コード例 #44
0
ファイル: OSCMaster.cs プロジェクト: benkuper/SoftLove
	static void HandlePacketReceivedEvent (OSCPacket p)
	{
        Debug.Log("received message "+p.Address);
        //General
        if (p.Address.Equals("/ping"))
        {
            if (pingReceived != null) pingReceived();

        }else if (p.Address.Equals("/console/active"))
        {
            if (consoleReceived != null) consoleReceived((int)p.Data[0] == 1);
        }else if (p.Address.Equals("/console/clear"))
        {
            if (clearConsoleReceived != null) clearConsoleReceived();
        }
        else if (p.Address.Equals("/console/log"))
        {
            Debug.Log((string)p.Data[0]);
            if (logReceived != null) logReceived((string)p.Data[0]);
        }
        else if (p.Address.Equals("/glitch"))
        {
            if(glitchReceived != null) glitchReceived((int)p.Data[0], (int)p.Data[1] == 1);
        }
        //Neuron
        else if (p.Address.Equals("/neuron/pulse"))
        {
            if (neuronPulseReceived != null) neuronPulseReceived(p.Data.Count > 0?(int)p.Data[0]:-1);
        }
        else if (p.Address.Equals("/neuron/zoom"))
        {
            if (neuronZoomReceived != null) neuronZoomReceived(p.Data.Count > 0 ? (int)p.Data[0] : -1);
        }else if(p.Address.Equals("/neuron/nodeSize"))
        {
            if (nodeSizeReceived != null) nodeSizeReceived((float)p.Data[0]);
        }
        //Web
        else if (p.Address.Equals("/web/search/images"))
        {
            if (webSearchReceived != null) webSearchReceived("images",(string)p.Data[0]);
        }
        else if (p.Address.Equals("/web/search/opacity"))
        {
            if (webSearchOpacityReceived != null) webSearchOpacityReceived((float)p.Data[0]);
        }
        //Zones
        else if (p.Address.Equals("/tracking/zone"))
        {
            if (zoneReceived != null) zoneReceived((string)p.Data[0], (int)p.Data[1] == 1);
        }
        else if (p.Address.Equals("/tracking/mainZone"))
        {
            if (mainZoneReceived != null) mainZoneReceived((string)p.Data[0]);
        }
        else if (p.Address.Equals("/tracking/zonePos"))
        {
            if (zonePosReceived != null) zonePosReceived((string)p.Data[0], new Vector3((float)p.Data[1], (float)p.Data[2], (float)p.Data[3]));
        }
        //Biodata
        else if (p.Address.Equals("/heart"))
        {
            if (heartReceived != null) heartReceived((int)p.Data[0]);
        }
        //Emotion
        else if(p.Address.Equals("/emotion"))
        {
            if (emotionReceived != null) emotionReceived((string)p.Data[0], (float)p.Data[1]);
        }else
        {
            //DataText.log("OSC Message not handled : " + p.Address);
        }
    }
コード例 #45
0
ファイル: OSCClient.cs プロジェクト: benkuper/SoftLove
		/// <summary>
		/// Sends an OSC packet to the defined destination and address of the client.
		/// </summary>
		/// <param name="packet">
		/// A <see cref="OSCPacket"/>
		/// </param>
		async public void Send(OSCPacket packet)
		{
			byte[] data = packet.BinaryData;
			try 
			{

                writer.WriteBytes(data);// data.Length);
                await  writer.StoreAsync();
                TestWin8Band.App.Current.StatusMessage += " > Message sent " + data.Length;
            }
			catch
			{
				throw new Exception(String.Format("Can't send OSC packet to client {0} : {1}", _ipAddress, _port));
			}
		}
コード例 #46
0
ファイル: OSCClient.cs プロジェクト: benkuper/SoftLove
		public void SendTo(OSCPacket packet,string host, int port)
		{
			byte[] data = packet.BinaryData;
			try 
			{
				//Debug.Log("SendTo :"+host+"/"+port);
				_ipAddress = IPAddress.Parse(host);
				_port = port;
				
				//Connect ();
				
				_udpClient.Send(data, data.Length,host, port);
				//Debug.Log ("Sent");
				
			}
			catch
			{
				Debug.LogWarning(String.Format("Can't send OSC packet to client {0} : {1}", _ipAddress, _port));
			}
		}
コード例 #47
0
ファイル: OSCClient.cs プロジェクト: AyatsujiTsukasa/UnityOSC
		/// <summary>
		/// Sends an OSC packet to the defined destination and address of the client.
		/// </summary>
		/// <param name="packet">
		/// A <see cref="OSCPacket"/>
		/// </param>
		public void Send(OSCPacket packet)
		{
			byte[] data = packet.BinaryData;
			try 
			{
				_udpClient.Send(data, data.Length);
			}
			catch
			{
				throw new Exception(String.Format("Can't send OSC packet to client {0} : {1}", _ipAddress, _port));
			}
		}
コード例 #48
0
ファイル: GameManager.cs プロジェクト: VirsixInc/VRCubeSword
 public void ReceiveOSC(OSCPacket currMsg)
 {
     switch(currMsg.Address)
     {
     case "/timeChange":
         if( gameState == GameState.STANDBY )
             gameTime = (float)(Convert.ToDecimal( currMsg.Data[0]));
         break;
     case "/startGame":
         if( gameState == GameState.STANDBY )
         {
             LoadLevelBackground( (int)(Convert.ToInt32(currMsg.Data[0])));
             SetState(GameState.TUTORIAL);
         }
         break;
     case "/skipTutorial":
         if( gameState == GameState.TUTORIAL )
             SetState(GameState.COUNTDOWN);
         break;
     case "/endGame":
         if( gameState == GameState.GAME )
             SetState(GameState.GAMEOVER);
        	else if( gameState == GameState.TUTORIAL )
             SetState(GameState.STANDBY);
         break;
     case "/enterConfig":
         if( gameState == GameState.STANDBY )
             SetState(GameState.CONFIG);
         break;
     case "/centerConfig":
         if( gameState == GameState.CONFIG )
             OVRManager.display.RecenterPose();
         break;
     case "/exitConfig":
         if( gameState == GameState.CONFIG )
             SetState(GameState.STANDBY);
         break;
     }
 }
コード例 #49
0
ファイル: AMPM.cs プロジェクト: kitschpatrol/ampm
		private static void Server_MessageReceived(OSCServer sender, OSCPacket e)
		{
			if (OnAmpmMessage == null)
			{
				return;
			}

			string name = e.Address.Replace("/", string.Empty);
			string json = e.Data.FirstOrDefault() as string;
			JSONNode data = null;
			if (json != null)
			{
				data = JSON.Parse(json);
			}

					OnAmpmMessage(null, new Tuple<string, JSONNode>(name, data));
		}