private void CompleteRead(IAsyncResult ar)
        {
            var size = m_socket.EndReceive(ar);

            if (size > 0 &&
                ar.AsyncState is byte[] data)
            {
                Scheduler.Schedule(() =>
                {
                    var start        = 0;
                    OscPacket packet = null;
                    try
                    {
                        packet = OscPacket.FromByteArray(data, ref start, size);
                    }
                    catch (Exception e)
                    {
                        if (!SuppressParsingExceptions)
                        {
                            throw new Exception("Error deserialising packet", e);
                        }

                        packet = null;
                    }

                    if (packet != null)
                    {
                        ForwardPacket(packet);
                    }
                });
            }
        }
Beispiel #2
0
    private void ListenLoop()
    {
        try {
            while (_receiver.State != OscSocketState.Closed)
            {
                // if we are in a state to recieve
                if (_receiver.State == OscSocketState.Connected)
                {
                    // get the next message
                    // this will block until one arrives or the socket is closed
                    OscPacket packet = _receiver.Receive();

                    if (packet is OscMessage msg)
                    {
                        _messages.Enqueue(msg);
                    }
                    else if (packet is OscBundle bnd)
                    {
                        foreach (OscMessage m in bnd)
                        {
                            _messages.Enqueue(m);
                        }
                    }
                }
            }
        }
        catch (Exception ex) {
            if (_receiver.State == OscSocketState.Connected)
            {
                _exceptions.Enqueue(ex);
            }
        }
    }
Beispiel #3
0
        private void ListenerWork()
        {
            while (_receiver.State != OscSocketState.Closed)
            {
                // if we are in a state to recieve
                if (_receiver.State == OscSocketState.Connected)
                {
                    // get the next message
                    // this will block until one arrives or the socket is closed
                    OscPacket packet = _receiver.Receive();

                    // parse the message
                    string[] msg        = OscDeserializer.ParseOscPacket(packet);
                    string[] msgAddress = OscDeserializer.GetMessageAddress(msg);
                    var      ip         = OscDeserializer.GetMessageIp(msg);
                    var      port       = OscDeserializer.GetMessagePort(msg);
                    var      binSeq     = OscDeserializer.GetMessageBinSeq(msg);

                    // if the sessionWorker already exists, update config. Otherwise, create a new sessionWorker
                    SessionWorker session = CheckSession(ip, port);

                    if (session == null)
                    {
                        session = new SessionWorker(ip, port, _dataPub, _sessionManager);
                        _sessionManager.AddConnection(session);
                        session.SetTimers();
                    }
                    session.SetLookupFlags(binSeq);
                }
            }
        }
 private void DeconstructPacket(OscPacket oscPacket)
 {
     if (oscPacket is OscBundle)
     {
         OscBundle oscBundle = (OscBundle)oscPacket;
         oscTimeTagStack.Push(oscBundle.Timestamp);
         foreach (OscPacket bundleElement in oscBundle)
         {
             DeconstructPacket(bundleElement);
         }
         oscTimeTagStack.Pop();
     }
     else if (oscPacket is OscMessage)
     {
         OscMessage oscMessage = (OscMessage)oscPacket;
         if (oscTimeTagStack.Count > 0)
         {
             OscTimeTag oscTimeTag = oscTimeTagStack.Peek();
             textBoxBuffer.WriteLine(oscTimeTag.ToString() + " " + oscMessage.ToString());
         }
         else
         {
             textBoxBuffer.WriteLine(oscMessage.ToString());
         }
         receiveCounter.Increment();
     }
 }
        private void ReceiveLoop()
        {
            try
            {
                while (oscReceiver.State != OscSocketState.Closed)
                {
                    // if we are in a state to receive
                    if (oscReceiver.State == OscSocketState.Connected)
                    {
                        // get the next callback
                        // this will block until one arrives or the socket is closed
                        OscPacket packet = oscReceiver.Receive();

                        connection.PacketReceived(packet);
                    }
                }
            }
            catch (Exception ex)
            {
                if (oscReceiver.State != OscSocketState.Closed &&
                    oscReceiver.State != OscSocketState.Closing)
                {
                    connection.OnException(Strings.UdpConnectionImplementation_ErrorReceiving, ex);
                }
            }
        }
Beispiel #6
0
        public void Send(OscPacket packet)
        {
            var messageBytes = packet.GetBytes();

            this._udpClient.Send(messageBytes, messageBytes.Count());
            Thread.Sleep(50);
        }
Beispiel #7
0
        private static OscPacket CreateFromJson(JsonReader reader)
        {
            OscPacket ret = null;

            {
                while (reader.TokenType != JsonToken.StartObject)
                {
                    var done = reader.Read();   // read obejct start
                    if (!done)
                    {
                        break;
                    }
                }

                if (reader.TokenType != JsonToken.None)
                {
                    reader.Read();                       // read property name for address

                    var address = reader.ReadAsString(); // read address;

                    if (address.StartsWith("#"))
                    {
                        ret = DeserialiseBundle(reader);
                    }
                    else
                    {
                        ret = DeserialiseMessage(reader, address);
                    }

                    reader.Read(); // read end object
                }
            }
            return(ret);
        }
Beispiel #8
0
        public static string CreateJson(this OscPacket value)
        {
            var ret = string.Empty;

            if (value != null)
            {
                var json = new StringBuilder();
                var sw   = new StringWriter(json);
                using (var writer = new JsonTextWriter(sw))
                {
                    writer.WriteStartObject();

                    var msg    = value as OscMessage;
                    var bundle = value as OscBundle;

                    if (msg != null)
                    {
                        Serialise(msg, writer);
                    }
                    else if (bundle != null)
                    {
                        Serialise(bundle, writer);
                    }

                    writer.WriteEndObject();
                }
                ret = json.ToString();
            }
            return(ret);
        }
Beispiel #9
0
        public void Start(OscPacket packet)
        {
            Assert.ParamIsNotNull(packet);

            mCancellationTokenSource = new CancellationTokenSource();
            mSendPacketsTask         = Task.Run(() => SendPacketsAsync(packet, mCancellationTokenSource.Token));
        }
Beispiel #10
0
        private async Task SendPacketsAsync(OscPacket packet, CancellationToken cancellationToken)
        {
            try
            {
                int transmissionCount = 0;

                while (cancellationToken.IsCancellationRequested == false)
                {
                    IPEndPoint sourceEndPoint = new IPEndPoint(Program.ipAddress, Properties.Settings.Default.Port);
                    OscMessage labelMessage   = new OscMessage(sourceEndPoint, "/NuvoControl/ZoneName", String.Format("Hello {0}", transmissionCount));
                    labelMessage.Send(sourceEndPoint);

                    Console.Clear();
                    Console.WriteLine("Osc Transmitter: Udp");
                    Console.WriteLine("with IP Address={0} on Port={1}", sourceEndPoint.Address, sourceEndPoint.Port);
                    Console.WriteLine("IsBundle={0}", labelMessage.IsBundle);
                    if (!packet.IsBundle)
                    {
                        Console.WriteLine("Packet={0}", labelMessage.ToString());
                    }
                    Console.WriteLine("Transmission Count: {0}\n", ++transmissionCount);
                    Console.WriteLine("Press any key to exit.");

                    await Task.Delay(1000);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                // parse the message
                OscPacket msg = OscPacket.Parse(m_MessageBox.Text);

                // write the parsed message
                AppendLine(msg.ToString());

                // if the sender exists
                if (m_Sender != null)
                {
                    for (int i = 0, j = (int)m_SendCount.Value; i < j; i++)
                    {
                        // send
                        m_Sender.Send(msg);
                    }
                }
                else
                {
                    AppendLine("Sender is not connected");
                }
            }
            catch (Exception ex)
            {
                // explicitly tell the user why the message failed to parse
                AppendLine("Error parsing message");
                AppendLine(ex.Message);
                AppendLine("");
            }
        }
Beispiel #12
0
        void OnOSCMessageReceived(OscPacket packet)
        {
            var msg = (OscMessage)packet;

            if (!typeMap.ContainsKey(msg.Address))
            {
                return;
            }

//			Debug.Log("Got packet from: " + msg.Address);
//			Debug.Log("Arguments: ");
//			foreach (var a in msg.Arguments) {
//				Debug.Log(a.ToString());
//			}

            try {
                var data = msg.Arguments.ConvertAll <double>(converter).ToArray();
                var type = typeMap[msg.Address];

//				Debug.Log("EEGType: " + type);
//				Debug.Log("Converted Args: ");
//				foreach (var d in data) {
//					Debug.Log(d.ToString());
//				}

                EmitData(new EEGEvent(DateTime.UtcNow, type, data));
            } catch (Exception e) {
                Logger.Error("Could not convert/emit data from EEGDeviceAdapter: " + e);
            }
        }
Beispiel #13
0
        private OscPacket FindMatchingSubject(OscPacket indata, int x, int y)
        {
            var data    = (OscMessage)indata;
            int numPkgs = (int)data[1];

            filteredPLayerIndexes.Clear();
            for (int i = 0; i < numPkgs; i++)
            {
                //Tuple<int, int> oldPos;
                //if (oldTrackingValues.TryGetValue((int)data[2 + (i * 8)], out oldPos))
                //{
                //    x = (int)(x * 0.2 + oldPos.Item1 * 0.8);
                //    y = (int)(y * 0.2 + oldPos.Item2 * 0.8);
                //    oldTrackingValues[(int)data[2 + (i * 8)]] = new Tuple<int, int>(x, y);
                //}
                //else
                //{
                //    oldTrackingValues.Add((int)data[2 + (i * 8)], new Tuple<int, int>(x, y));
                //}



                if ((int)data[dtdtX + (i * 8)] == x &&
                    (int)data[dtdtY + (i * 8)] == y)
                {
                    filteredPLayerIndexes.Add(i);
                }
            }

            //var outboundPackage = new object[2 + filteredPLayerIndexes.Count *8];
            var outboundPackage = new List <object>();

            outboundPackage.Add(data[0]);
            outboundPackage.Add(filteredPLayerIndexes.Count);

            //TODO: This is still wrong =]
            for (int i = 0; i < filteredPLayerIndexes.Count; i++)
            {
                var selectedIndex = filteredPLayerIndexes[i];
                for (int j = 2 + selectedIndex * 8; j < 10 + 8 * selectedIndex; j++)
                {
                    outboundPackage.Add(data[j]);
                }
            }

            //foreach (var selectedIndex in filteredPLayerIndexes)
            //{
            //    for (int i = ; i < 10; i++)
            //    {
            //        outboundPackage[i] = data[i + (selectedIndex * 8)];
            //    }
            //}
            //outboundPackage[0] = data[0];
            //outboundPackage[1] = filteredPLayerIndexes.Count;


            var outbound = new OscMessage(data.Address, outboundPackage.ToArray());

            return(outbound);
        }
 // Process Data Frame OscBundle
 private void FrameParser(OscPacket packet)
 {
     //LogPacket(packet); //Used for debugging to see all received packets
     if (packet.IsBundle)
     {
         foreach (OscMessage message in ((OscBundle)packet).Messages)
         {
             if (String.Compare(message.Address, "/ExampleOSCAddressOfMessage/") == 0)
             {
                 // Without using any of the fancy OSC stuff that lets you know what type of data is in each message,
                 // you can get the data in the message by accessing packet.Data[index], as long as you know how many indices there are.
                 // essentially, i've set this up with the assumption that you're doing both the sending and receiving, so you know what is what and how much data
                 // so, for example:
                 string theStringMessageIKnowIsBeingSent = (string)message.Data[0];
                 Debug.Log("received example message string: " + theStringMessageIKnowIsBeingSent);
             }
             if (String.Compare(message.Address, "/ExampleOSCAddressOfMessageHeader/Position/") == 0)
             {
                 Vector3 position = new Vector3();;
                 position.x = (float)message.Data[0];
                 position.y = (float)message.Data[1];
                 position.z = (float)message.Data[1];
                 Debug.Log("received example position: " + position);
             }
         }
     }
     else          // if the packet is not a bundle and is just one message
     {
         if (String.Compare(((OscMessage)packet).Address, "/ExampleOSCAddressOfMessage/") == 0)
         {
             //string theStringMessageIKnowIsBeingSent = (string)message.Data[0];
             //Debug.Log ("received example message string: " + theStringMessageIKnowIsBeingSent);
         }
     }
 }
 private void onPacketReceived(OscPacket packet)
 {
     if (PacketReceived != null)
     {
         PacketReceived(this, new OscPacketReceivedEventArgs(packet));
     }
 }
        private void SendMessageBox_TextChanged(object sender, EventArgs e)
        {
            if (m_SendMessageBox.Text == m_HelpText)
            {
                m_SendMessageBox.Font      = m_BackupFont;
                m_SendMessageBox.ForeColor = Color.LightGray;

                m_HasValidSendString = false;

                return;
            }

            m_SendMessageBox.Font = m_InputFont;

            if (File.Exists(NgimuApi.Helper.ResolvePath(m_SendMessageBox.Text)) == true)
            {
                m_HasValidSendString = true;

                m_SendMessageBox.ForeColor = Control.DefaultForeColor;
            }
            else
            {
                OscPacket packet;

                m_HasValidSendString = OscPacket.TryParse(m_SendMessageBox.Text.Trim(), out packet);

                m_SendMessageBox.ForeColor = m_HasValidSendString ? Control.DefaultForeColor : Color.Red;
            }
        }
 private void ReceiverMethod()
 {
     try
     {
         while (oscReceiver.State != OscSocketState.Closed)
         {
             if (oscReceiver.State == OscSocketState.Connected)
             {
                 ReceiverSemaphore.WaitOne();
                 data = oscReceiver.Receive();
                 if (((OscMessage)data).Address == "/DTDT")
                 {
                     OnDataReceived?.Invoke(data);
                 }
                 ReceiverSemaphore.Release();
             }
         }
     }
     catch (Exception ex)
     {
         if (oscReceiver.State == OscSocketState.Connected)
         {
             Console.WriteLine("Exception in listen loop");
             Console.WriteLine(ex.Message);
         }
     }
 }
 /**
  * Listen is spawned by a thread in the Connect() method. It remains
  * in a loop receiving data as the connection is alive.
  *
  * @see Esc.StateListener.Connect
  */
 private void Listen()
 {
     while (connected)
     {
         try {
             OscPacket packet = receiver.Receive();
             if (null != packet)
             {
                 //	UnityMainThreadDispatcher.Instance ().Enqueue (ExsecuteOnMainThread_TimeCheck ());
                 lock (processQueue) {
                     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);
                     }
                 }
             }
         } catch (Exception e) {
             Debug.LogError(e.Message);
         }
     }
 }
Beispiel #19
0
        public void TestByteCallback()
        {
            bool cbCalled = false;
            // The cabllback function
            HandleBytePacket cb = delegate(byte[] packet)
            {
                var msg = (OscMessage)OscPacket.GetPacket(packet);
                Assert.AreEqual(2, msg.Arguments.Count);
                Assert.AreEqual(23, msg.Arguments[0]);
                Assert.AreEqual("hello world", msg.Arguments[1]);
                cbCalled = true;
            };

            var l1 = new UDPListener(55555, cb);

            var sender = new SharpOSC.UDPSender("localhost", 55555);
            var msg1   = new SharpOSC.OscMessage("/test/address", 23, "hello world");

            sender.Send(msg1);

            // Wait until callback processes its message
            var start = DateTime.Now;

            while (cbCalled == false && start.AddSeconds(2) > DateTime.Now)
            {
                Thread.Sleep(1);
            }

            Assert.IsTrue(cbCalled);

            l1.Close();
        }
Beispiel #20
0
        //パケットを処理して、bundleとMessageに振り分け
        private void ProcessPacket(OscPacket packet)
        {
            PacketCounter++;
            switch (packet)
            {
            //bundleを受信した
            case OscBundle bundle:
                try
                {
                    OnBundle?.Invoke(bundle);
                }
                catch (Exception e)
                {
                    Console.WriteLine("# Callback : " + e);
                }
                break;

            //Messageを受信した
            case OscMessage msg:
                try
                {
                    OnMessage?.Invoke(msg);
                }
                catch (Exception e)
                {
                    Console.WriteLine("# Callback : " + e);
                }
                break;

            default:
                //Do noting
                break;
            }
        }
        static void ListenLoop()
        {
            try
            {
                while (receiver.State != OscSocketState.Closed)
                {
                    // if we are in a state to recieve
                    if (receiver.State == OscSocketState.Connected)
                    {
                        // get the next message
                        // this will block until one arrives or the socket is closed
                        OscPacket packet = receiver.Receive();

                        // Write the packet to the console
                        Console.WriteLine(packet.ToString());


                        // DO SOMETHING HERE!
                    }
                }
            }
            catch (Exception ex)
            {
                // if the socket was connected when this happens
                // then tell the user
                if (receiver.State == OscSocketState.Connected)
                {
                    Console.WriteLine("Exception in listen loop");
                    Console.WriteLine(ex.Message);
                }
            }
        }
Beispiel #22
0
 void UnpackRecursivelyAndDispatch(OscPacket packet)
 {
     if (packet is OscBundle)
     {
         OscBundle bundle = packet as OscBundle;
         foreach (OscPacket subPacket in bundle.packets)
         {
             if (_addTimeTagsToBundledMessages && subPacket is OscMessage)
             {
                 OscMessage message = subPacket as OscMessage;
                 message.Add(bundle.timeTag);
             }
             UnpackRecursivelyAndDispatch(subPacket);
         }
         OscPool.Recycle(bundle);
     }
     else
     {
         OscMessage message = packet as OscMessage;
         if (_filterDuplicates)
         {
             if (_uniqueAddresses.Contains(message.address))
             {
                 OscPool.Recycle(message);
                 return;
             }
             _uniqueAddresses.Add(message.address);
         }
         Dispatch(packet as OscMessage);
         _messageCount++;             // Influenced by _filterDuplicates.
     }
 }
Beispiel #23
0
 public void UpdateDataAt(int index, object value)
 {
     Debug.Log("UpdateDataAt");
     if (_OSCpkg is OscMessage)
     {
         ((OscMessage)_OSCpkg).UpdateDataAt(index, value);
     }
     else if (_OSCpkg is OscBundle)
     {
         // _OSCpkg = new OscBundle();
         if (value is OscBundle)
         {
             _OSCpkg = value as OscBundle;
         }
         else
         {
             //Debug.Log("Data is not a Bundle");
             if (value is OscMessage)
             {
                 if (((OscBundle)_OSCpkg).Messages.Count >= index)
                 {
                     ((OscBundle)_OSCpkg).Messages[index] = value as OscMessage;
                 }
             }
             else
             {
                 Debug.Log("You can only add a OSCMessage to a OSCBundle");
             }
         }
     }
 }
Beispiel #24
0
        protected override void DeliverPacket(OscPacket packet)
        {
            if (m_pipe.IsConnected &&
                packet != null)
            {
                Scheduler.Schedule(packet,
                                   (oscPacket, action) =>
                {
                    byte[] data;
                    using (var ms = new MemoryStream())
                    {
                        ms.Write(BitConverter.GetBytes(0),
                                 0,
                                 4);
                        m_formatter.Serialize(ms, oscPacket);

                        var ps = ms.Position - 4;
                        ms.Seek(0, SeekOrigin.Begin);
                        ms.Write(BitConverter.GetBytes(ps),
                                 0,
                                 4);

                        data = ms.ToArray();
                    }
                    if (data.Length > 0)
                    {
                        m_pipe.WaitForPipeDrain();

                        m_pipe.BeginWrite(data, 0, data.Length, DataWriteFinished, null);
                    }
                });
            }
        }
Beispiel #25
0
        private void ProcessOscPacket(string bundlePrefix, OscPacket packet)
        {
            switch (packet)
            {
            case OscBundle b:
                _logger.LogTrace($"┌Start bundle");
                foreach (OscPacket m in b)
                {
                    try
                    {
                        ProcessOscPacket(bundlePrefix + "│", m);
                    }
                    catch { }
                }
                _logger.LogTrace($"└End bundle");
                break;

            case OscMessage m:
                try
                {
                    ProcessOscMessage(bundlePrefix, m);
                }
                catch { }
                break;
            }
        }
Beispiel #26
0
 private void ListenLoop()
 {
     try
     {
         while (_server.State != OscSocketState.Closed)
         {
             if (_server.State == OscSocketState.Connected)
             {
                 // get the next message
                 // this will block until one arrives or the socket is closed
                 OscPacket packet = _server.Receive();
                 if (packet.Error != OscPacketError.None)
                 {
                     continue;
                 }
                 ProcessOscPacket(string.Empty, packet);
             }
         }
     }
     catch (Exception ex)
     {
         // if the socket was connected when this happens
         // then tell the user
         if (_server.State == OscSocketState.Connected)
         {
             _logger.LogError(ex, "Exception in OSC listen loop");
         }
     }
 }
 // Update is called once per frame
 void Update()
 {
     if (dataReceived)
     {
         dataReceived = false;
         FrameParser(OscPacket.FromByteArray(receivedEndPoint, bytePacket));
     }
 }
Beispiel #28
0
 public void DisplayPacketInfo(OscPacket packet)
 {
     CUI.DrawString("Source:    " + packet.SourceEndPoint.ToString());
     CUI.MoveCursorDown(2);
     CUI.DrawString("IsBundle:    " + packet.IsBundle.ToString());
     CUI.MoveCursorDown(2);
     CUI.DrawString("Arguments:");
     CUI.MoveCursorDown(2);
     CUI.MoveCursorRight();
     CUI.MoveCursorRight();
     if (packet.Data.Count == 0)
     {
         CUI.DrawString("none");
     }
     else
     {
         foreach (var arg in packet.Data)
         {
             if (arg is string)
             {
                 CUI.DrawString("(string) " + (string)arg);
             }
             else if (arg is Int32)
             {
                 CUI.DrawString("(int32)  " + (Int32)arg);
             }
             else if (arg is Int64)
             {
                 CUI.DrawString("(int64)  " + (Int64)arg);
             }
             else if (arg is float)
             {
                 CUI.DrawString("(float)  " + (float)arg);
             }
             else if (arg is double)
             {
                 CUI.DrawString("(double) " + (double)arg);
             }
             else if (arg is byte[])
             {
                 CUI.DrawString("(byte[]) " + ((byte[])arg).Length + " bytes");
             }
             else if (arg is char)
             {
                 CUI.DrawString("(char)   " + (char)arg);
             }
             else if (arg is bool)
             {
                 CUI.DrawString("(bool)   " + (bool)arg);
             }
             else
             {
                 CUI.DrawString("(????)   " + "unknown");
             }
             CUI.MoveCursorDown();
         }
     }
 }
Beispiel #29
0
        public void StartListening()
        {
            StopListening();
            this.Client = new UdpClient(Port);

            Task.Run(async() => {
                var endpoint = new IPEndPoint(IPAddress.Any, Port);
                try
                {
                    //TODO: this is an initial version, i feel like this can be done more elegant? (atleast async, not thread blocking like now)
                    while (true)
                    {
                        try
                        {
                            var result = await Client.ReceiveAsync();
                            var bytes  = result.Buffer;

                            var message = OscPacket.GetPacket(bytes) as OscMessage;

                            var musePacket = ParsePacket(message);
                            if (musePacket.Address == SignalAddress.Unknown)
                            {
                                Console.WriteLine($"unknown packet with address '{message.Address}', skipping it...");
                                continue;
                            }

                            PacketReceived?.Invoke(this, musePacket);
                        }
                        catch (ObjectDisposedException)
                        {
                            Console.WriteLine("disposed early");
                            throw;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Corrupt packet received: '{ex.Message}'");
                        }
                    }
                }
                catch (ObjectDisposedException) {
                    //is fine, atm this is the escape condition when the listener needs to stop listening to the port. far from elegant but it works i suppose :)
                    Console.WriteLine("exited");
                }
                catch (SocketException e)
                {
                    Console.WriteLine(e);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("something else threw an exception... " + ex.Message);
                }
                finally
                {
                    this.Client?.Dispose();
                    this.Client = null;
                }
            });
        }
    // Process Data Frame OscBundle
    private void FrameParser(OscPacket packet)
    {
        //LogPacket(packet); //Used for debugging to see all received packets
        if (packet.IsBundle)
        {
            foreach (OscMessage message in ((OscBundle)packet).Messages)
            {
                if (String.Compare(message.Address, "/NewUserIndexCreated/") == 0)
                {
                    int clientIndex  = (int)message.Data[0];
                    int newUserIndex = (int)message.Data[1];
                    UnityEngine.Debug.Log("OSCInterface received new user index from server: " + newUserIndex);
                    // call all methods that have been registered to listen for it
                    NewUserIndexReceivedEventArgs args = new NewUserIndexReceivedEventArgs();
                    args.newUserIndex = newUserIndex;
                    OnNewUserIndexReceivedEvent(args);

                    List <object> oscMessage        = new List <object>();
                    string        oscMessageAddress = "/NewUserIndexReceived/";
                    oscMessage.Add(newUserIndex);
                    AppendMessage(oscMessageAddress, oscMessage);
                }
                if (String.Compare(message.Address, "/UserDataToClients/") == 0)
                {
                    int clientIndex = (int)message.Data[0];
                    UnityEngine.Debug.Log("received user data from server from client Index: " + clientIndex);
                    int    userIndex = (int)message.Data[1];
                    double timeInMS  = (double)message.Data[2];
                    float  positionX = (float)message.Data[3];
                    float  positionY = (float)message.Data[4];
                    float  positionZ = (float)message.Data[5];
                    float  hue       = (float)message.Data[6];

                    // call all methods that have been registered to listen for it
                    OtherUserDataReceivedEventArgs args = new OtherUserDataReceivedEventArgs();
                    args.clientIndex = clientIndex;
                    args.position    = new Vector3(positionX, positionY, positionZ);
                    args.hue         = hue;
                    OnOtherUserDataReceivedEvent(args);

                    // FIX THIS TO FIRE AN EVENT WHEN PARTICLE DATA FOR OTHER USERS ARE RECEIVED
                    //if (clientIndex != newUserCreator.clientIndex)
                    //{
                    //    otherUserParticleEmissionControl.EmitOtherUserParticles(new Vector3(positionX, positionY, positionZ));
                    //}
                    //UnityEngine.Debug.Log("received other position: " + positionX + ", " + positionY + ", " + positionZ);
                }
            }
        }
        else
        { // if the packet is not a bundle and is just one message
            if (String.Compare(((OscMessage)packet).Address, "/ExampleOSCAddressOfMessage/") == 0)
            {
                //string theStringMessageIKnowIsBeingSent = (string)(OscBundle)packet[0].Messages.Data[0];
                //UnityEngine.Debug.Log("received example message string: " + theStringMessageIKnowIsBeingSent);
            }
        }
    }
        public void Send(OscPacket packet)
        {
            Assert.ParamIsNotNull(packet);

            mPacket = packet;

            mTransmitterThread = new Thread(RunWorker);
            mTransmitterThread.Start();
        }
Beispiel #32
0
 public void Send(OscPacket packet)
 {
     byte[] data = packet.ToByteArray();
     try
     {
         udpClient.Send(data, data.Length);
     } catch
     {
         throw new Exception(string.Format("Error sending an OSC packet to {0}:{1}", IPAddress, Port));
     }
 }
        public void Send(OscPacket packet)
        {
            Assert.ParamIsNotNull(packet);

            mOscClient = new OscClient(Destination);
            mOscClient.Connect();

            mPacket = packet;
            mPacket.Client = mOscClient;

            mTransmitterThread = new Thread(RunWorker);
            mTransmitterThread.Start();
        }
        public void Start(OscPacket packet)
        {
            Assert.ParamIsNotNull(packet);

            mOscClient = new OscClient(Destination);
            mOscClient.Connect();
            Console.WriteLine("Sending to: " + Destination.Address.ToString() + ":" + Destination.Port.ToString());

            mPacket = packet;
            mPacket.Client = mOscClient;
            mSendMessages = true;

            mTransmitterThread = new Thread(RunWorker);
            mTransmitterThread.Start();
        }
    public static new bool FromBytes( byte[] data, ref int pos, int end, out OscPacket packet )
    {
        // Check header size
        int bundleByteSize = end - pos;
        if( bundleByteSize < headerByteSize ){
            Debug.LogWarning( "[OSC io] OscBundle with invalid header was ignored." + Environment.NewLine );
            packet = null;
            return false;
        }

        // Check prefix
        string prefixInput = Encoding.ASCII.GetString( data, pos, prefixByteSize );
        if( prefixInput != prefix ){
            Debug.LogWarning( "[OSC io] OscBundle with invalid header was ignored." + Environment.NewLine );
            packet = null;
            return false;
        }
        pos += prefixByteSize + 1; // + 1 to ensure bytes multiple of 4

        // Get timetag
        byte[] oscNtpBytes = new byte[OscTimeTag.byteSize];
        Array.Copy( data, pos, oscNtpBytes, 0, OscTimeTag.byteSize );
        OscTimeTag timeTag = new OscTimeTag( oscNtpBytes );
        pos += OscTimeTag.byteSize;

        // Create and fill bundle
        packet = new OscBundle( timeTag );
        OscBundle bundle = packet as OscBundle;
        while( pos < end )
        {
            int length = BitConverter.ToInt32( data, 0 );
            pos += 4;
            int packetEnd = pos + length;
            OscPacket subPacket;
            if( pos < end && OscPacket.FromBytes( data, ref pos, packetEnd, out subPacket ) ) bundle.Add( subPacket );
        }

        return true;
    }
Beispiel #36
0
 void InvokeAnyMessageEventRecursively( OscPacket packet )
 {
     if( packet is OscBundle ){
         OscBundle bundle = packet as OscBundle;
         foreach( OscPacket subPacket in bundle.packets ) InvokeAnyMessageEventRecursively( subPacket );
     } else {
         onAnyMessage.Invoke( packet as OscMessage );
         _messageCount++;
     }
 }
 /// <summary>
 /// Send an OscPacket over the connection.
 /// </summary>
 /// <param name="packet">The <see cref="OscPacket"/> to send.</param>
 public void Send(OscPacket packet)
 {
     byte[] packetData = packet.ToByteArray();
     mTcpConnection.Writer.Write(OscPacket.ValueToByteArray(packetData));
 }
		public static string[] ParseOscPacket(OscPacket packet)
		{
			string[] msg = packet.ToString().Split(new string[] { ", " }, StringSplitOptions.None); ;

			return msg;
		}
    public static bool FromBytes( byte[] data, ref int pos, out OscPacket packet )
    {
        // Get address
        string address = StringFromBytes( data, ref pos );
        if( address.Length == 0 || address[0] != addressPrefix ){
            Debug.LogWarning( "[OscMessage] Ignoring message because address \"" + address + "\" is not starting with \"" + addressPrefix + "\"." + Environment.NewLine + ( "pos: " + pos + ", data: " + data.Length ) );
            packet = null;
            return false;
        }

        // Get type tags
        char[] tags = StringFromBytes( data, ref pos ).ToCharArray();
        int tagCount = tags.Length; // including prefix
        if( tags.Length == 0 || tags[0] != tagPrefix ){
            Debug.LogWarning( "[OscMessage] Ignoring message because typetag is missing." + Environment.NewLine );
            packet = null;
            return false;
        }

        // Construct message
        packet = new OscMessage( address, tagCount );
        OscMessage message = packet as OscMessage;

        // Get and add arguments
        for( int i=1; i<tagCount; i++ )
        {
            char tag = tags[i];
            object value;
            switch( tag )
            {
            case tagFloat:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 4 );
                value = BitConverter.ToSingle( data, pos );
                pos += 4;
                break;

            case tagDouble:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 8 );
                value = BitConverter.ToDouble( data, pos );
                pos += 8;
                break;

            case tagInt:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 4 );
                value = BitConverter.ToInt32( data, pos );
                pos += 4;
                break;

            case tagLong:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 8 );
                value = BitConverter.ToInt64( data, pos );
                pos += 8;
                break;

            case tagString:
            case tagSymbol:
                value = StringFromBytes( data, ref pos );
                break;

            case tagChar:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 4 );
                int charInt = BitConverter.ToInt32( data, pos );
                value = Convert.ToChar( charInt );
                break;

            case tagBlob:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 4 );
                int length = BitConverter.ToInt32( data, pos );
                pos += 4;
                byte[] blob = new byte[length];
                Array.Copy( data, pos, blob, 0, length );
                value = blob;
                pos += length;
                pos += 4 - ( pos % 4 );
                break;

            case tagTimetag:
                byte[] oscNtpBytes = new byte[OscTimeTag.byteSize];
                Array.Copy( data, pos, oscNtpBytes, 0, OscTimeTag.byteSize );
                value = new OscTimeTag( oscNtpBytes ); // OscTimeTag ensures big-endin byte oder internally.
                pos += 8;
                break;

            case tagColor:
                if( BitConverter.IsLittleEndian ) Array.Reverse( data, pos, 4 );
                value = new Color32( data[pos], data[pos+1], data[pos+2], data[pos+3] );
                pos += 4;
                break;

            case tagTrue:
                value = true;
                break;

            case tagFalse:
                value = false;
                break;

            case tagNull:
                value = null;
                break;

            case tagImpulse:
                value = new OscImpulse();
                break;

            default:
                Debug.LogWarning( "[OscMessage] FromBytes failed. Argument tag '" + tag + "' is not supported." + Environment.NewLine );
                return false;
            }

            message.args.Add( value );
        }

        return true;
    }
 public OscPacketReceivedEventArgs(OscPacket packet)
 {
     Packet = packet;
 }
        /// <summary>
        /// Creates a new instance of OscPacketReceivedEventArgs
        /// </summary>
        /// <param name="packet">The OscPacket received.</param>
        public OscPacketReceivedEventArgs(OscPacket packet)
        {
            Assert.ParamIsNotNull(packet);

            mPacket = packet;
        }
Beispiel #42
0
    /// <summary>
    /// Send an OscMessage or OscBundle.
    /// Returns success status.
    /// </summary>
    public bool Send( OscPacket packet )
    {
        if( !isOpen ) return false;

        if( _bundleMessagesOnEndOfFrame && packet is OscMessage ){
            _endOfFrameBundle.Add( packet );
            return true;
        }

        // try to pack the message
        byte[] data;
        if( !packet.ToBytes( out data ) ) return false;
        //Debug.Log( "Packet size: " + data.Length + " bytes" + Environment.NewLine );

        try {
             // Send!!
            _udpClient.Send( data, data.Length, _endPoint );

        // Socket error reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
        } catch( SocketException ex )
        {
            if( ex.ErrorCode == 10051 ){ // "Network is unreachable"
                // Ignore. We get this when broadcasting while having no access to a network.

            } else if( ex.ErrorCode == 10065 ){ // "No route to host"
                // Ignore. We get this sometimes when unicasting.

            } else if( ex.ErrorCode == 10049 ){ // "The requested address is not valid in this context"
                // Ignore. We get this when we broadcast and have no access to the local network. For example if we are using a VPN.

            } else if( ex.ErrorCode == 10040 ){ // "Message too long"
                Debug.LogWarning( "[OscOut] Failed to send message. Packet is too big (" + data.Length + " bytes)." );

            } else {
                Debug.LogWarning( "[OscOut] Failed to send message to " + ipAddress + " on port " + port + Environment.NewLine + ex.ErrorCode + ": " + ex.ToString() );
            }
            return false;
        } catch( Exception ex ) {
            Debug.LogWarning( "[OscOut] Failed to send message to " + ipAddress + " on port " + port + Environment.NewLine + ex.ToString() );
            return false;
        }

        InvokeAnyMessageEventRecursively( packet );
        return true;
    }
 /// <summary>
 /// Add a OscMessage or OscBundle to this bundle. Shorthand for bundle.packets.Add.
 /// </summary>
 public void Add( OscPacket packet )
 {
     _packets.Add( packet );
 }
Beispiel #44
0
 /// <summary>
 /// Raises the PacketreceivedEvent.
 /// </summary>
 /// <param name="packet">The packet to include in the event arguments.</param>
 private void OnPacketReceived(OscPacket packet)
 {
     if (PacketReceived != null)
     {
         PacketReceived(this, new OscPacketReceivedEventArgs(packet));
     }
 }