void ProcessRoomData(Message <Room> msg)
    {
        if (msg.Data.OwnerOptional != null && msg.Data.OwnerOptional.ID == SocialPlatformManager.MyID)
        {
            amIServer = true;
        }
        else
        {
            amIServer = false;
        }

        // if the caller left while I was in the process of joining, just use that as our new room
        if (msg.Data.UsersOptional != null && msg.Data.UsersOptional.Count == 1)
        {
            SocialPlatformManager.TransitionToState(SocialPlatformManager.State.WAITING_IN_A_ROOM);
        }
        else
        {
            SocialPlatformManager.TransitionToState(SocialPlatformManager.State.CONNECTED_IN_A_ROOM);
        }

        // Look for users that left
        SocialPlatformManager.MarkAllRemoteUsersAsNotInRoom();

        if (msg.Data.UsersOptional != null)
        {
            foreach (User user in msg.Data.UsersOptional)
            {
                if (user.ID != SocialPlatformManager.MyID)
                {
                    if (!SocialPlatformManager.IsUserInRoom(user.ID))
                    {
                        SocialPlatformManager.AddRemoteUser(user.ID);
                    }
                    else
                    {
                        SocialPlatformManager.MarkRemoteUserInRoom(user.ID);
                    }
                }
            }
        }

        SocialPlatformManager.ForgetRemoteUsersNotInRoom();
        SocialPlatformManager.SetFloorColorForState(amIServer);
    }