Exemplo n.º 1
0
        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();
                }
            }
        }
Exemplo n.º 2
0
        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.");
        }
Exemplo n.º 3
0
 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]);
     }
 }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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);
            }
        }
Exemplo n.º 6
0
        /// <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);
            }
        }
Exemplo n.º 7
0
        /// <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);
            }
        }
Exemplo n.º 8
0
        /// <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);
        }
Exemplo n.º 9
0
        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));
            }
        }
Exemplo n.º 10
0
        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;
        }
Exemplo n.º 11
0
        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;
        }
Exemplo n.º 12
0
    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);
                }
            }
        }
    }
Exemplo n.º 13
0
        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);
                }
            }
        }
Exemplo n.º 14
0
 public ClientNetworkedObject(GameClient client, INetworkedObject obj, string name)
     : base(obj, name)
 {
     this.Client = client;
 }
Exemplo n.º 15
0
 public ClientNetworkedObject(GameClient client, INetworkedObject obj, bool useRealName = false, bool autoCreateObject = true)
     : base(obj, useRealName, autoCreateObject)
 {
     this.Client = client;
 }
Exemplo n.º 16
0
        /// <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;
        }
Exemplo n.º 17
0
        /// <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;
        }
Exemplo n.º 18
0
 /// <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]);
 }