Esempio n. 1
0
 /// <summary>
 /// Find a network view from an ID
 /// </summary>
 /// <param name="id"></param>
 /// <param name="view"></param>
 /// <returns></returns>
 public static bool Find(ushort id, out NetworkView view)
 {
     view = views[id];
     if (view != null)
         return true;
     return false;
 }
Esempio n. 2
0
 /// <summary>
 /// register a network view you've just added as a component. Assignes the network id.
 /// </summary>
 /// <param name="view"></param>
 public static void RegisterNewView(ref NetworkView view)
 {
     int addedId;
     lock (ViewsLock)
     {
         addedId = Views.Add(view);
     }
     view.viewID.guid = (ushort) addedId;
 }
Esempio n. 3
0
 internal static void RemoveView(NetworkView view)
 {
     lock (ViewsLock)
     {
         var findView = Views[view.viewID.guid];
         if (findView != null)
         {
             if (findView == view)
             {
                 Views.Remove(view.viewID.guid);
             }
         }
     }
 }
Esempio n. 4
0
        void SendSecondaryView(NetworkView newView, List<NetConnection> conns)
        {
            if (conns.Count <= 0) return;

            var message = PNetServer.peer.CreateMessage();

            message.Write(RPCUtils.AddView);
            message.Write(viewID.guid);
            message.Write(newView.viewID.guid);
            if (newView._customSecondaryFunction != null)
                message.Write(newView._customSecondaryFunction);

            PNetServer.peer.SendMessage(message, conns, NetDeliveryMethod.ReliableOrdered, Channels.STATIC_UTILS);
        }
Esempio n. 5
0
 /// <summary>
 /// Destroy the specified view over the network
 /// </summary>
 /// <param name="view"></param>
 public void NetworkDestroy(NetworkView view)
 {
     GameState.DestroyDelays += () => { DoNetworkDestroy(view); };
 }
Esempio n. 6
0
 /// <summary>
 /// Destroy the specified view over the network
 /// </summary>
 /// <param name="view"></param>
 /// <param name="reasonCode">specify a reason to be destroying this networkview. Received on client</param>
 public void NetworkDestroy(NetworkView view, byte reasonCode = 0)
 {
     GameState.DestroyDelays += () => DoNetworkDestroy(view, reasonCode);
 }
Esempio n. 7
0
 internal static void RegisterView(NetworkView view, ushort viewId)
 {
     views.Add(viewId, view);
 }
Esempio n. 8
0
 /// <summary>
 /// register a network view you've just added as a component. Assignes the network id.
 /// </summary>
 /// <param name="view"></param>
 public static void RegisterNewView(ref NetworkView view)
 {
     view.viewID.guid = (ushort)views.Add(view);
 }
Esempio n. 9
0
 /// <summary>
 /// Find a network view from an ID
 /// </summary>
 /// <param name="id"></param>
 /// <param name="view"></param>
 /// <returns></returns>
 public static bool Find(ushort id, out NetworkView view)
 {
     lock (ViewsLock) {view = Views[id];}
     return view != null;
 }
Esempio n. 10
0
 internal static void RegisterView(NetworkView view, ushort viewId)
 {
     lock (ViewsLock) { Views.Add(viewId, view); }
 }
Esempio n. 11
0
        internal static void ProcessUtils(NetIncomingMessage msg)
        {
            //
            var utilId = msg.ReadByte();

            if (utilId == RPCUtils.TimeUpdate)
            {
                //Players shouldn't be doing this either..
            }
            else if (utilId == RPCUtils.Instantiate)
            {
                //Players shouldn't be instantiating things

                //read the path...

                //var resourcePath = msg.ReadString();
                //var viewId = msg.ReadUInt16();
                //var ownerId = msg.ReadUInt16();

                //var gobj = Resources.Load(resourcePath);
                //var instance = (GameObject)GameObject.Instantiate(gobj);

                //look for a networkview..

                //var view = instance.GetComponent<NetworkView>();

                //if (view)
                //{
                //    NetworkView.RegisterView(view, viewId);
                //    view.viewID = new NetworkViewId() { guid = viewId, IsMine = PlayerId == ownerId };
                //}
            }
            else if (utilId == RPCUtils.FinishedRoomChange)
            {
                //the player has finished loading into the new room. now actually put their player in the new room.



                var player = msg.SenderConnection.Tag as Player;

                var newRoom = player.GetRoomSwitchingTo();

                if (newRoom != null)
                {
                    newRoom.AddPlayer(player);
                }
            }
            else if (utilId == RPCUtils.Remove)
            {
                //Players shouldn't be removing view ids

                //var viewId = msg.ReadUInt16();

                //NetworkView.RemoveView(viewId);
            }
            else if (utilId == RPCUtils.FinishedInstantiate)
            {
                Player player = msg.SenderConnection.Tag as Player;
                ushort viewId = msg.ReadUInt16();

                NetworkView find;
                if (NetworkView.Find(viewId, out find))
                {
                    find.gameObject.OnFinishedInstantiate(player);
                }
            }
        }
Esempio n. 12
0
        private static void Consume(NetIncomingMessage msg)
        {
            try
            {
                //faster than switch, as this is in most to least common order
                if (msg.SequenceChannel == Channels.UNRELIABLE_STREAM)
                {
                    var         actorId = msg.ReadUInt16();
                    NetworkView find;
                    if (NetworkView.Find(actorId, out find))
                    {
                        Player player = GetPlayer(msg.SenderConnection);
                        find.OnDeserializeStream(msg, player);
                    }
                }
                else if (msg.SequenceChannel == Channels.RELIABLE_STREAM)
                {
                    var         actorId = msg.ReadUInt16();
                    NetworkView find;
                    if (NetworkView.Find(actorId, out find))
                    {
                        Player player = GetPlayer(msg.SenderConnection);
                        find.OnDeserializeStream(msg, player);
                    }
                }
                else if (msg.SequenceChannel >= Channels.BEGIN_RPCMODES && msg.SequenceChannel <= Channels.OWNER_RPC)
                {
                    //rpc...
                    var         viewID = msg.ReadUInt16();
                    var         rpcId  = msg.ReadByte();
                    Player      player = GetPlayer(msg.SenderConnection);
                    NetworkView find;
                    var         info = new NetMessageInfo((RPCMode)(msg.SequenceChannel - Channels.BEGIN_RPCMODES), player);
                    if (NetworkView.Find(viewID, out find))
                    {
                        find.CallRPC(rpcId, msg, info);


                        //Do we need to forward this still?
                        if (info.mode != RPCMode.Server && info.continueForwarding)
                        {
                            //need to forward...
                            if (info.mode == RPCMode.Others || info.mode == RPCMode.All)
                            {
                            }
                            else
                            {
                                find.Buffer(msg);
                            }
                            find.Send(msg, info.mode, msg.SenderConnection);
                        }
                    }
                }
                else if (msg.SequenceChannel == Channels.SYNCHED_FIELD)
                {
                    var         viewId  = msg.ReadUInt16();
                    var         fieldId = msg.ReadByte();
                    NetworkView find;
                    if (NetworkView.Find(viewId, out find))
                    {
                        find.BufferField(msg, fieldId);
                        find.SendField(msg, msg.SenderConnection);
                    }
                }
                else if (msg.SequenceChannel == Channels.OBJECT_RPC)
                {
                    Player player = GetPlayer(msg.SenderConnection);
                    if (player.CurrentRoom != null)
                    {
                        player.CurrentRoom.IncomingObjectRPC(msg);
                    }
                }
                else if (msg.SequenceChannel == Channels.STATIC_RPC)
                {
                    var rpcId = msg.ReadByte();

                    var player      = GetPlayer(msg.SenderConnection);
                    var currentRoom = player.CurrentRoom;
                    if (currentRoom != null)
                    {
                        NetMessageInfo info = new NetMessageInfo(RPCMode.None, player);
                        currentRoom.CallRPC(rpcId, msg, info);

                        if (info.continueForwarding)
                        {
                            var newMessage = peer.CreateMessage();
                            msg.Clone(newMessage);
                            currentRoom.SendMessage(newMessage);
                        }
                    }
                }
                else if (msg.SequenceChannel == Channels.STATIC_UTILS)
                {
                    ProcessUtils(msg);
                }
                else
                {
                    Debug.LogWarning("data received over unhandled channel " + msg.SequenceChannel);
                }
            }
            catch (Exception ex)
            {
                Debug.Log("[Consumption] {0} : {1}", ex.Message, ex.StackTrace);
            }
        }
Esempio n. 13
0
 internal static void RegisterView(NetworkView view, ushort viewId)
 {
     lock(ViewsLock) {Views.Add(viewId, view);}
 }
Esempio n. 14
0
        /// <summary>
        /// find a networkview via a networkviewid serialize to the message
        /// </summary>
        /// <param name="message">read location is advanced</param>
        /// <param name="view"></param>
        /// <returns></returns>
        public static bool Find(ref NetIncomingMessage message, out NetworkView view)
        {
            var id = NetworkViewId.Deserialize(message);

            return Find(id, out view);
        }
Esempio n. 15
0
 /// <summary>
 /// Find a network view from an ID
 /// </summary>
 /// <param name="id"></param>
 /// <param name="view"></param>
 /// <returns></returns>
 public static bool Find(ushort id, out NetworkView view)
 {
     lock (ViewsLock) { view = Views[id]; }
     return(view != null);
 }
Esempio n. 16
0
        /// <summary>
        /// find a networkview via a networkviewid serialize to the message
        /// </summary>
        /// <param name="message">read location is advanced</param>
        /// <param name="view"></param>
        /// <returns></returns>
        public static bool Find(ref NetIncomingMessage message, out NetworkView view)
        {
            var id = NetworkViewId.Deserialize(message);

            return(Find(id, out view));
        }
Esempio n. 17
0
        private static void Consume(NetIncomingMessage msg)
        {
            try
            {
                //faster than switch, as this is in most to least common order
                if (msg.SequenceChannel == Channels.UNRELIABLE_STREAM)
                {
                    if (msg.DeliveryMethod == NetDeliveryMethod.ReliableUnordered)
                    {
                        HandleStaticRpc(msg);
                    }
                    else
                    {
                        var         actorId = msg.ReadUInt16();
                        NetworkView find;
                        if (NetworkView.Find(actorId, out find))
                        {
                            Player player = GetPlayer(msg.SenderConnection);
                            find.OnDeserializeStream(msg, player);
                        }
                        else
                        {
                            if (GetPlayer(msg.SenderConnection).CurrentRoom != null)
                            {
                                Debug.LogWarning(
                                    "[PNetS.Consume] Player {0} attempted to send unreliable stream data for view {1}, but it does not exist",
                                    msg.SenderConnection.Tag, actorId);
                                (msg.SenderConnection.Tag as Player).InternalErrorCount++;
                            }
                        }
                    }
                }
                else if (msg.SequenceChannel == Channels.RELIABLE_STREAM)
                {
                    var         actorId = msg.ReadUInt16();
                    NetworkView find;
                    if (NetworkView.Find(actorId, out find))
                    {
                        Player player = GetPlayer(msg.SenderConnection);
                        find.OnDeserializeStream(msg, player);
                    }
                    else
                    {
                        if (GetPlayer(msg.SenderConnection).CurrentRoom != null)
                        {
                            Debug.LogWarning(
                                "[PNetS.Consume] Player {0} attempted to send reliable stream data for view {1}, but it does not exist",
                                msg.SenderConnection.Tag, actorId);
                            (msg.SenderConnection.Tag as Player).InternalErrorCount++;
                        }
                    }
                }
                else if (msg.SequenceChannel >= Channels.BEGIN_RPCMODES && msg.SequenceChannel <= Channels.OWNER_RPC)
                {
                    //rpc...
                    var         viewId = msg.ReadUInt16();
                    var         rpcId  = msg.ReadByte();
                    Player      player = GetPlayer(msg.SenderConnection);
                    NetworkView find;
                    var         info = new NetMessageInfo((RPCMode)(msg.SequenceChannel - Channels.BEGIN_RPCMODES), player);
                    if (NetworkView.Find(viewId, out find))
                    {
                        find.CallRPC(rpcId, msg, info);


                        //Do we need to forward this still?
                        if (info.mode != RPCMode.Server && info.continueForwarding)
                        {
                            //need to forward...
                            if (info.mode == RPCMode.Others || info.mode == RPCMode.All)
                            {
                            }
                            else
                            {
                                find.Buffer(msg);
                            }
                            find.Send(msg, info.mode, msg.SenderConnection);
                        }
                    }
                    else
                    {
                        if (player.CurrentRoom != null)
                        {
                            Debug.LogWarning(
                                "[PNetS.Consume] Player {0} attempted RPC {1} on view {2}, but the view does not exist",
                                player, rpcId, viewId);
                            player.InternalErrorCount++;
                        }
                    }
                }
                else if (msg.SequenceChannel == Channels.SYNCHED_FIELD)
                {
                    var         viewId  = msg.ReadUInt16();
                    var         fieldId = msg.ReadByte();
                    NetworkView find;
                    if (NetworkView.Find(viewId, out find))
                    {
                        find.BufferField(msg, fieldId);
                        find.SendField(msg, msg.SenderConnection);
                    }
                }
                else if (msg.SequenceChannel == Channels.OBJECT_RPC)
                {
                    Player player = GetPlayer(msg.SenderConnection);
                    if (player.CurrentRoom != null)
                    {
                        player.CurrentRoom.IncomingObjectRPC(msg);
                    }
                }
                else if (msg.SequenceChannel == Channels.STATIC_RPC)
                {
                    HandleStaticRpc(msg);
                }
                else if (msg.SequenceChannel == Channels.STATIC_UTILS)
                {
                    ProcessUtils(msg);
                }
                else
                {
                    Debug.LogWarning("{2} bytes received over unhandled channel {0}, delivery {1}", msg.SequenceChannel, msg.DeliveryMethod, msg.LengthBytes);
                    (msg.SenderConnection.Tag as Player).InternalErrorCount++;
                }
            }
            catch (Exception ex)
            {
                Debug.Log("[Consumption] {0} : {1}", ex.Message, ex.StackTrace);
            }
        }
Esempio n. 18
0
 //The following methods are all run by the game machine during the life of this componet
 
 /// <summary>
 /// Called right after the component is added. 
 /// If AddComponents(params Type[]) is used to add this, it will get called after all the components have been added
 /// </summary>
 void Awake()
 {
     netView = GetComponent<NetworkView>();
     netView.SetSerializationMethod(Serialize);
     netView.OnDeserializeStream += OnDeserializeStream;
 }
Esempio n. 19
0
        /// <summary>
        /// Destroy the specified view over the network
        /// </summary>
        /// <param name="view"></param>
        public void NetworkDestroy(NetworkView view)
        {
            m_Actors.Remove(view);

            GameObject.Destroy(view.gameObject);

            var msg = PNetServer.peer.CreateMessage(3);
            msg.Write(RPCUtils.Remove);
            msg.Write(view.viewID.guid);

            NetworkView.RemoveView(view.viewID.guid);

            //send a destruction message to everyone, just in case.
            var connections = players.Select(p => p.connection).ToList();
            if (connections.Count == 0) return;
            PNetServer.peer.SendMessage(msg, connections, NetDeliveryMethod.ReliableOrdered, Channels.STATIC_UTILS);
        }