// 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);
            }
        }
    }
    protected virtual void OnNewUserCreatedEvent(NewUserIndexReceivedEventArgs e)
    {
        EventHandler <NewUserIndexReceivedEventArgs> handler = NewUserCreatedEvent;

        if (handler != null)
        {
            handler(this, e);
        }
    }
    public void InitializeNewUser(object sender, NewUserIndexReceivedEventArgs e)
    {
        Debug.Log("User Manager initializing a new user with index: " + e.newUserIndex);
        userIndex = e.newUserIndex;

        text_UserNumber.text = "userIndex: " + userIndex;

        oneShotControl.Reset(); // change this to subscribe to event instead of direct reference

        // call all methods that have been registered to listen for it
        NewUserIndexReceivedEventArgs args = new NewUserIndexReceivedEventArgs();

        args.newUserIndex = userIndex;
        OnNewUserCreatedEvent(args);
    }
 public void InitializeMobiusHeightToNewUser(object sender, NewUserIndexReceivedEventArgs e)
 {
     //transform.localPosition = new Vector3(transform.localPosition.x, myCamera.transform.position.y + mobiusYOffset, transform.localPosition.z);
     Debug.Log("initialized height of mobius strip to user's height");
 }