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(); }
public void AddClient(SceneManagerClient client) { clients.Add(client); }
public void SendSyncObjectMessage(SceneManagerClient client, SyncObjectMessage msg) { client.RecieveSyncObjectMessage(msg); }
public void SendSyncSceneMsg(SceneManagerClient client, SyncSceneMessage msg) { client.RecieveSyncSceneMsg(msg); }
public void SendLeaveMsg(SceneManagerClient client, LeaveMessage msg) { client.ReceiveLeaveMsg(msg); }
public void SendJoinMsg(SceneManagerClient client, JoinMessage msg) { client.ReceiveJoinMsg(msg); }