public NetworkedObject(INetworkedObject obj, bool useRealName = false, bool autoCreateObject = true) { this.OriginalObject = obj; this.Fields = obj.GetType(). GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) .Where(f => f.GetCustomAttributes(typeof(NetworkedField), true).Length > 0) .OrderBy(f => f.Name) .ToArray(); this.setActiveMethod = obj.GetType().GetMethod("LiNGSSetActive", new Type[] { typeof(bool) }); this.IsFieldSimulated = this.Fields.Select(f => (f.GetCustomAttributes(typeof(NetworkedField), true)[0] as NetworkedField).Simulated).ToArray(); this.AutoCreateObject = autoCreateObject; if (useRealName) { this.Name = LiNGSMarkers.AutoCreatedObject + obj.GetType().Name; } else { //Thread safe lock (StaticLock) { this.Name = LiNGSMarkers.AutoCreatedObject + NameId++.ToString(); } } }
public static void Register(INetworkedObject networkedObject) { if (!Application.isPlaying) { networkedObjectList = new Dictionary <int, INetworkedObject>(); return; } if (!(networkedObject is MonoBehaviour monoBehaviour)) { Debug.LogWarning("== Cannot register networked object. Not a monobehaviour."); return; } var photonView = monoBehaviour.GetComponent <PhotonView>(); if (!photonView) { Debug.LogWarning("Cannot register networked object without a PhotonView."); return; } networkedObjectList[photonView.ViewID] = networkedObject; Debug.Log($"There are now {networkedObjectList.Count()} items networked."); }
internal void CreateObject(string typeName, String name) { if (!NetworkedObjects.ContainsKey(name)) { INetworkedObject networkedObject = client.NetworkedClientInstance.CreateObject(typeName, name); NetworkedObjects.Add(name, new NetworkedObject(networkedObject, name)); client.Simulator.RegisterNetworkedObject(NetworkedObjects[name]); } }
/// <summary> /// Unregisters a <see cref="INetworkedObject"/> from the server logic. Optionally, the <see cref="INetworkedObject"/> can be auto destroyed on all clients. /// </summary> /// <param name="networkedObject">The networked object</param> /// <param name="destroyObjectOnClient">True to delete the object from all client, False to keep the object alive on the clients</param> public void UnregisterNetworkedObject(INetworkedObject networkedObject, bool destroyObjectOnClient = true) { var noKv = NetworkedObjects.FirstOrDefault(kv => kv.Value.OriginalObject == networkedObject); if (noKv.Key != null) { NetworkedObjects.Remove(noKv.Key); server.StateManager.RemoveObjectFromClients(noKv.Key, destroyObjectOnClient); } }
/// <summary> /// Unregisters a <see cref="INetworkedObject"/> from the server logic. The Clients must be aware of the removal of this object, the object will not be auto destroyed on the clients. /// </summary> /// <param name="networkedObject">The networked object</param> public void UnregisterClientAwareNetworkedObject(INetworkedObject networkedObject) { var noKv = NetworkedObjects.FirstOrDefault(kv => kv.Value.OriginalObject == networkedObject); if (noKv.Key != null) { NetworkedObjects.Remove(noKv.Key); server.StateManager.RemoveObjectFromClients(noKv.Key, false); } }
/// <summary> /// Unregisters a local created <see cref="INetworkedObject"/>. The object will no longer be updated with data received from the server. /// </summary> /// <param name="networkedObject">The networked object</param> public void UnregisterNetworkAwareObject(INetworkedObject networkedObject) { var noKv = NetworkedObjects.FirstOrDefault(kv => kv.Value.OriginalObject == networkedObject); if (noKv.Key != null) { client.Simulator.UnregisterNetworkedObject(noKv.Value); NetworkedObjects.Remove(noKv.Key); } }
/// <summary> /// Unregisters a local <see cref="INetworkedObject"/>. The object will be destroyed on the server. /// </summary> /// <param name="networkedObject">The networked object to destroy.</param> public void UnregisterNetworkedObject(INetworkedObject networkedObject) { var noKv = NetworkedLocalObjects.FirstOrDefault(kv => kv.Value.OriginalObject == networkedObject); if (noKv.Key != null) { NetworkedLocalObjects.Remove(noKv.Key); client.Synchronizer.RemoveObject(networkedObject); } }
/// <summary> /// Register a <see cref="INetworkedObject"/> created on the client that will be synchronized to the server. /// </summary> /// <param name="networkedObject">The networked object</param> /// <param name="name">UNIQUE name of the networked object</param> public void RegisterNetworkedObject(INetworkedObject networkedObject, string name) { if (NetworkedLocalObjects.ContainsKey(name)) { throw new ArgumentException("A NetworkObject with the specified name was already registered."); } NetworkedObject no = new NetworkedObject(networkedObject, name); NetworkedLocalObjects.Add(name, no); }
private void CreateClientObject(GameClient client, string typeName, string name) { String objName = LiNGSMarkers.AutoCreatedObject + client.UserId + LiNGSMarkers.Separator + name; if (!ClientNetworkedObjects.ContainsKey(objName)) { //TODO: Log this INetworkedObject nObject = server.NetworkedGameInstance.CreateClientObject(client, typeName, name); ClientNetworkedObjects.Add(objName, new ClientNetworkedObject(client, nObject, name)); } }
public NetworkedObject(INetworkedObject obj, string name) { this.OriginalObject = obj; this.Fields = obj.GetType(). GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) .Where(f => f.GetCustomAttributes(typeof(NetworkedField), true).Length > 0) .OrderBy(f => f.Name) .ToArray(); this.AutoCreateObject = false; this.Name = name; }
public NetworkedObject(INetworkedObject obj, string name) { this.OriginalObject = obj; this.Fields = obj.GetType(). GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) .Where(f => f.GetCustomAttributes(typeof(NetworkedField), true).Length > 0) .OrderBy(f => f.Name) .ToArray(); this.setActiveMethod = obj.GetType().GetMethod("LiNGSSetActive", new Type[] { typeof(bool) }); this.IsFieldSimulated = this.Fields.Select(f => (f.GetCustomAttributes(typeof(NetworkedField), true)[0] as NetworkedField).Simulated).ToArray(); this.AutoCreateObject = false; this.Name = name; }
public static void InitializeNetworkBehaviours(Object obj, int id) { if (obj is GameObject) { GameObject gameObject = obj as GameObject; foreach (Component comp in gameObject.GetComponents <Component>()) { if (comp is INetworkedObject) { INetworkedObject networkObject = comp as INetworkedObject; networkObject.Initialize(id); } } } }
internal void RemoveObject(INetworkedObject networkedObject, bool deleteFromServer = true) { List <String> objectKeys = SynchronizedObjects.Where(kv => kv.Value.Object.OriginalObject == networkedObject).Select(kv => kv.Key).ToList(); foreach (var item in objectKeys) { SynchronizedObjects.Remove(item); if (deleteFromServer) { NetworkMessage networkMessage = new NetworkMessage() { NeedsAck = true, Type = NetworkMessage.MessageType.Data }; networkMessage.Data.Add(new MessageData() { Object = LiNGSMarkers.DestroyObject, Value = item }); client.Manager.SendMessage(networkMessage); } } }
public ClientNetworkedObject(GameClient client, INetworkedObject obj, string name) : base(obj, name) { this.Client = client; }
public ClientNetworkedObject(GameClient client, INetworkedObject obj, bool useRealName = false, bool autoCreateObject = true) : base(obj, useRealName, autoCreateObject) { this.Client = client; }
/// <summary> /// Registers a new <see cref="INetworkedObject"/> which will be created and syncronized on all clients. /// </summary> /// <param name="networkedObject">The networked object</param> public void RegisterNetworkedObject(INetworkedObject networkedObject) { NetworkedObject no = new NetworkedObject(networkedObject, server.ServerProperties.UseRealClassNames); NetworkedObjects[no.Name] = no; }
/// <summary> /// Registers a new <see cref="INetworkedObject"/> which will be syncronized on all clients. The Clients must already know about this object, the object will not be auto created on the clients. /// </summary> /// <param name="networkedObject">The networked object</param> /// <param name="name">UNIQUE object name</param> public void RegisterClientAwareNetworkedObject(INetworkedObject networkedObject, string name) { NetworkedObject no = new NetworkedObject(networkedObject, name); NetworkedObjects[no.Name] = no; }
/// <summary> /// Registers a local created <see cref="INetworkedObject"/> to be update with data from the server. This object will not be syncronized on the server. /// </summary> /// <param name="networkedObject">The networked object</param> /// <param name="objectName">UNIQUE object name</param> public void RegisterNetworkAwareObject(INetworkedObject networkedObject, string objectName) { NetworkedObjects.Add(objectName, new NetworkedObject(networkedObject, objectName)); client.Simulator.RegisterNetworkedObject(NetworkedObjects[objectName]); }