• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by Anxo · Feb 11, 2014 at 12:02 AM · networkingosc

Finding who sent the OSC message.

Hi, I am working on a project where we are using OSC on some devices to trigger functions and set variables in Unity.

I realize this is a long shot as it is only slightly unity related and not sure how many people got into this but I got this script working pretty well from someone who made it available.

The problem is that I do not know which device the call is coming from and I am not sure how to identify it.

This is the code that listens on the socket.

 using UnityEngine;
 using System;
 using System.Threading;
 using System.Collections;
 using System.Collections.Generic;
 
 using OSC.NET;
 using System.Net;
 using System.Net.Sockets;
 
 public class UnityOSCReceiver : MonoBehaviour {
     
     private bool connected = false;
     public int port = 8338; //MH faceShiftOSC default port
     private OSCReceiver receiver;
     private Thread thread;
     UdpClient udpClient;
     IPEndPoint endPoint;
 
 
     
     private List<OSCMessage> processQueue = new List<OSCMessage>();
     
     public UnityOSCReceiver() {}
 
     public int getPort() {
         return port;
     }
             
     public void Start() {
         //endPoint = new IPEndPoint (IPAddress.Any, port);
     
         try {
             Debug.Log("connected");
             connected = true;
             receiver = new OSCReceiver(port);
             thread = new Thread(new ThreadStart(listen));
             thread.Start();
         } catch (Exception e) {
             Debug.Log("failed to connect to port "+port);
             Debug.Log(e.Message);
         }
     }
     
     /**
      * Call update every frame in order to dispatch all messages that have come
      * in on the listener thread
      */
     public void Update() {
         //processMessages has to be called on the main thread
         //so we used a shared proccessQueue full of OSC Messages
         lock(processQueue){
             foreach( OSCMessage message in processQueue){
             
                 BroadcastMessage("OSCMessageReceived", message, SendMessageOptions.DontRequireReceiver);
                 }
             processQueue.Clear();
         }
     }
     
     public void OnApplicationQuit(){
         disconnect();
     }
     
     public void disconnect() {
           if (receiver!=null){
                receiver.Close();
           }
           
            receiver = null;
         connected = false;
     }
 
     public bool isConnected() { return connected; }
 
     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); 
             }
         }
     }
 }

Any clue how I can figure out which device the message was sent from so that I can apply it to the appropriate game object in a multiplayer environment.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

18 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Can't receive TUIO messages on Release mode 1 Answer

Unity networking tutorial? 6 Answers

No response from AWS in android build? 0 Answers

Client callback after syncvars have been set 1 Answer

Can I add a network prefab at runtime? 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges