Example #1
0
    public void Update()
    {
        // Check for Join/Leave Session
        while (m_join_messages.Count > 0)
        {
            JoinMessage msg = m_join_messages.Dequeue();

            Session s = new Session();

            if (!m_session_mgr.Exists(msg.scene_name))
            {
                // CreateSession
                s = m_session_mgr.CreateSession(m_name_to_path[msg.scene_name], OpenSceneMode.Additive);
            }

            if (s)
            {
                s.AddClient(msg.client);

                foreach (SceneManagerClient smc in clients)
                {
                    SendJoinMsg(smc, msg);
                }
            }
        }

        while (m_leave_messages.Count > 0)
        {
            LeaveMessage msg = m_leave_messages.Dequeue();

            Session s = m_session_mgr.GetSessionBySceneName(msg.scene_name);

            if (s)
            {
                s.RemoveClient(msg.client);

                if (!(s.GetClientSize() > 0))
                {
                    // Save Scene
                    // EditorSceneManager.Save
                    // DestroySession
                    m_session_mgr.DestroySession(m_session_mgr.GetSessionBySceneName(msg.scene_name));
                }

                foreach (SceneManagerClient smc in clients)
                {
                    SendLeaveMsg(smc, msg);
                }
            }
        }

        while (m_sync_scene_messages.Count > 0)
        {
            // Grab all objects in the scene and send them to the client to map
            SyncSceneMessage msg = m_sync_scene_messages.Dequeue();

            Session s = m_session_mgr.GetSessionBySceneName(msg.scene_name);

            SyncSceneMessage sync_msg = new SyncSceneMessage();
            sync_msg.scene_name = s.Scene.name;
            sync_msg.client_id  = 0;
            sync_msg.objects    = s.Scene.GetRootGameObjects();

            SceneManagerClient client = clients.Find(x => x.client_id == msg.client_id);

            SendSyncSceneMsg(client, sync_msg);
        }

        while (m_lock_obj_messages.Count > 0)
        {
            LockObjectMessage msg = m_lock_obj_messages.Dequeue();

            Session s = m_session_mgr.GetSessionBySceneName(msg.scene_name);

            if (s)
            {
                s.LockObject(msg.object_id, msg.lock_info.client_info);

                //foreach (SceneManagerClient smc in clients)
                //{
                //    SendLockObjMsg(smc, msg);
                //}
            }
        }

        while (m_unlock_obj_messages.Count > 0)
        {
            UnlockObjectMessage msg = m_unlock_obj_messages.Dequeue();

            Session s = m_session_mgr.GetSessionBySceneName(msg.scene_name);

            if (s)
            {
                s.UnlockObject(msg.object_id, msg.lock_info.client_info);

                //foreach (SceneManagerClient smc in clients)
                //{
                //    SendUnlockObjMsg(smc, msg);
                //}
            }
        }

        while (m_sync_obj_messages.Count > 0)
        {
            SyncObjectMessage msg = m_sync_obj_messages.Dequeue();

            Session s = m_session_mgr.GetSessionBySceneName(msg.scene_name);

            if (s)
            {
                s.UpdateObject(msg);

                foreach (SceneManagerClient smc in clients)
                {
                    SendSyncObjectMessage(smc, msg);
                }
            }
        }

        m_session_mgr.Update();
    }
Example #2
0
 public void AddClient(SceneManagerClient client)
 {
     clients.Add(client);
 }
Example #3
0
 public void SendSyncObjectMessage(SceneManagerClient client, SyncObjectMessage msg)
 {
     client.RecieveSyncObjectMessage(msg);
 }
Example #4
0
 public void SendSyncSceneMsg(SceneManagerClient client, SyncSceneMessage msg)
 {
     client.RecieveSyncSceneMsg(msg);
 }
Example #5
0
 public void SendLeaveMsg(SceneManagerClient client, LeaveMessage msg)
 {
     client.ReceiveLeaveMsg(msg);
 }
Example #6
0
 public void SendJoinMsg(SceneManagerClient client, JoinMessage msg)
 {
     client.ReceiveJoinMsg(msg);
 }