/// <summary>
        /// Post destroy handling: destroy all sub-part objects.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected override Error PostHandleMessage(DestroyMessage msg, ShapeCache cache, int shapeIndex)
        {
            if (shapeIndex < 0)
            {
                // Nothing to delete.
                // Delete of invalid object is allowed.
                return(new Error());
            }

            PartSet partSet = cache.GetShapeDataByIndex <PartSet>(shapeIndex);

            if (partSet != null)
            {
                // Remove from the registered mesh list.
                for (int i = 0; i < partSet.MeshIDs.Length; ++i)
                {
                    List <PartSet> parts;
                    if (_registeredParts.TryGetValue(partSet.MeshIDs[i], out parts))
                    {
                        // Remove from the list.
                        parts.RemoveAll((PartSet cmp) => { return(cmp == partSet); });
                    }
                }
            }

            return(new Error());
        }
示例#2
0
        /// <summary>
        /// Write a destroy message to <paramref name="packet"/>.
        /// </summary>
        /// <returns><c>true</c> on success.</returns>
        /// <param name="packet">Packet to write the message to.</param>
        public virtual bool WriteDestroy(PacketBuffer packet)
        {
            DestroyMessage msg = new DestroyMessage();

            msg.ObjectID = ID;
            packet.Reset(RoutingID, DestroyMessage.MessageID);
            return(msg.Write(packet));
        }
示例#3
0
 protected override void HandleDestroyMessage(DestroyMessage message)
 {
     _logger.Debug("Destroying id: " + message.entityId);
     if (_networkManager.SpawnedObjects.ContainsKey(message.entityId))
     {
         Destroy(_networkManager.GetGameObjectById(message.entityId).gameObject);
         _networkManager.OnNetworkObjectDestroyed(message.entityId);
     }
 }
示例#4
0
        /// <summary>
        /// Overridden to clear mesh data and release resources even for transient objects.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected override Error PostHandleMessage(DestroyMessage msg, ShapeCache cache, int shapeIndex)
        {
            if (shapeIndex >= 0)
            {
                // Delete of invalid object is allowed.
                ResetObject(cache, shapeIndex);
            }

            return(new Error());
        }
示例#5
0
        /// <summary>
        /// Message handler for <see cref="DestroyMessage"/>
        /// </summary>
        /// <param name="msg">The incoming message.</param>
        /// <returns>An error code on failure.</returns>
        /// <remarks>
        /// Finds and destroys the object matching the message ObjectID.
        ///
        /// Neither the <see cref="PacketBuffer"/> nor the <see cref="BinaryReader"/> are provided as destroy message are
        /// not allowed to carry additional payloads.
        /// </remarks>
        protected virtual Error HandleMessage(DestroyMessage msg)
        {
            if (msg.ObjectID == 0)
            {
                return(new Error());
            }

            // Do not check for existence. Not an error as we allow delete messages where the object has yet to be created.
            int shapeIndex = DestroyObject(msg.ObjectID);

            return(PostHandleMessage(msg, _shapeCache, shapeIndex));
        }
示例#6
0
        /// <summary>
        /// Message handler for <see cref="DestroyMessage"/>
        /// </summary>
        /// <param name="msg">The incoming message.</param>
        /// <param name="packet">The buffer containing the message.</param>
        /// <param name="reader">The reader from which the message came.</param>
        /// <returns>An error code on failure.</returns>
        /// <remarks>
        /// Finds and destroys the object matching the message ObjectID.
        /// </remarks>
        protected virtual Error HandleMessage(DestroyMessage msg, PacketBuffer packet, BinaryReader reader)
        {
            GameObject obj = RemoveObject(msg.ObjectID);

            if (obj == null)
            {
                return(new Error(ErrorCode.InvalidObjectID, msg.ObjectID));
            }

            Error err = PostHandleMessage(obj, msg, packet, reader);

            UnityEngine.Object.Destroy(obj);
            return(err);
        }
示例#7
0
 private void HandleDestroyMessage(DestroyMessage message)
 {
     if (!message.IsSuccessful)
     {
         TextInChatBox += "Вы не можете уничтожить эту карту\n";
         return;
     }
     // we should update collection view from another thread
     // https://stackoverflow.com/a/18336392/2219089
     Application.Current.Dispatcher.Invoke(delegate
     {
         Map[message.Coordinates.Coordinate_Y][message.Coordinates.Coordinate_X] =
             new RouteCard(message.Coordinates.Coordinate_Y, message.Coordinates.Coordinate_X);
     });
     OnPropertyChanged(nameof(Map));
 }
        /// <summary>
        /// Post destroy message: destroy sub-objects.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected override Error PostHandleMessage(DestroyMessage msg, ShapeCache cache, int shapeIndex)
        {
            PointsComponent pointsComp = cache.GetShapeDataByIndex <PointsComponent>(shapeIndex);

            if (pointsComp != null)
            {
                // Remove from the registered mesh list.
                List <PointsComponent> parts;
                if (_registeredParts.TryGetValue(pointsComp.MeshID, out parts))
                {
                    // Remove from the list.
                    parts.RemoveAll((PointsComponent cmp) => { return(cmp == pointsComp); });
                }

                pointsComp.Release();
            }
            return(new Error());
        }
示例#9
0
        /// <summary>
        /// Post destroy message: destroy sub-objects.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected override Error PostHandleMessage(GameObject obj, DestroyMessage msg, PacketBuffer packet, BinaryReader reader)
        {
            PointsComponent points = obj.GetComponent <PointsComponent>();

            if (points != null)
            {
                // Remove the registered parts.
                List <PointsComponent> parts = null;
                if (_registeredParts.TryGetValue(points.MeshID, out parts))
                {
                    // Remove from parts.
                    parts.Remove(points);
                    _awaitingFinalisation.RemoveAll((PointsComponent cmp) => { return(cmp == points); });
                    //parts.RemoveAll((PointsComponent cmp) => { return cmp == part; }));
                }
            }
            return(new Error());
        }
示例#10
0
        /// <summary>
        /// Post destroy handling: destroy all sub-part objects.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected override Error PostHandleMessage(GameObject obj, DestroyMessage msg, PacketBuffer packet, BinaryReader reader)
        {
            List <ShapeComponent> parts = null;

            foreach (ShapeComponent part in obj.GetComponentsInChildren <ShapeComponent>())
            {
                if (part.gameObject != obj)
                {
                    if (_registeredParts.TryGetValue(part.ObjectID, out parts))
                    {
                        // Remove from parts.
                        parts.Remove(part);
                        _awaitingFinalisation.RemoveAll((ShapeComponent cmp) => { return(cmp == part); });
                        //parts.RemoveAll((ShapeComponent cmp) => { return cmp == part; }));
                    }
                }
            }

            return(new Error());
        }
示例#11
0
        /// <summary>
        /// Message handler.
        /// </summary>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        public override Error ReadMessage(PacketBuffer packet, BinaryReader reader)
        {
            switch ((ObjectMessageID)packet.Header.MessageID)
            {
            default:
            case ObjectMessageID.Null:
                return(new Error(ErrorCode.InvalidMessageID, packet.Header.MessageID));

            case ObjectMessageID.Create:
                // Read the create message details.
                CreateMessage create = new CreateMessage();
                if (!create.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, packet.Header.MessageID));
                }
                return(HandleMessage(create, packet, reader));

            case ObjectMessageID.Update:
                // Read the create message details.
                UpdateMessage update = new UpdateMessage();
                if (!update.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, packet.Header.MessageID));
                }
                return(HandleMessage(update, packet, reader));

            case ObjectMessageID.Destroy:
                // Read the create message details.
                DestroyMessage destroy = new DestroyMessage();
                if (!destroy.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, packet.Header.MessageID));
                }
                return(HandleMessage(destroy));
            }
        }
示例#12
0
        /// <summary>
        /// Message routing function.
        /// </summary>
        /// <param name="messageID">The ID of the message.</param>
        /// <param name="packet">Packet buffer used to decode the message.</param>
        /// <param name="reader">The reader from which additional message data may be read.</param>
        /// <returns>An error code on failure.</returns>
        /// <remarks>
        /// The default implementation handles the following messages:
        /// Routes the following messages:
        /// <list type="bullet">
        /// <item><see cref="ObjectMessageID.Create"/></item>
        /// <item><see cref="ObjectMessageID.Update"/></item>
        /// <item><see cref="ObjectMessageID.Destroy"/></item>
        /// <item><see cref="ObjectMessageID.Data"/></item>
        /// </list>
        /// </remarks>
        protected virtual Error HandleMessage(ushort messageID, PacketBuffer packet, BinaryReader reader)
        {
            switch ((ObjectMessageID)messageID)
            {
            default:
            case ObjectMessageID.Null:
                return(new Error(ErrorCode.InvalidMessageID, messageID));

            case ObjectMessageID.Create:
                // Read the create message details.
                CreateMessage create = new CreateMessage();
                if (!create.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, messageID));
                }
                if (!FilterMessage(messageID, create.ObjectID, create.Category))
                {
                    return(new Error());
                }
                return(HandleMessage(create, packet, reader));

            case ObjectMessageID.Update:
                // Read the create message details.
                UpdateMessage update = new UpdateMessage();
                if (!update.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, messageID));
                }
                if (!FilterMessage(messageID, update.ObjectID, 0))
                {
                    return(new Error());
                }
                return(HandleMessage(update, packet, reader));

            case ObjectMessageID.Destroy:
                // Read the create message details.
                DestroyMessage destroy = new DestroyMessage();
                if (!destroy.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, messageID));
                }
                if (!FilterMessage(messageID, destroy.ObjectID, 0))
                {
                    return(new Error());
                }
                return(HandleMessage(destroy, packet, reader));

            case ObjectMessageID.Data:
                // Read the create message details.
                DataMessage data = new DataMessage();
                if (!data.Read(reader))
                {
                    return(new Error(ErrorCode.InvalidContent, messageID));
                }
                if (!FilterMessage(messageID, data.ObjectID, 0))
                {
                    return(new Error());
                }
                return(HandleMessage(data, packet, reader));
            }

            //return new Error();
        }
示例#13
0
        public void DestroyGameObject(GameObject _go)
        {
            DestroyMessage message = new DestroyMessage(_go);

            SendMessageToClients(message);
        }
示例#14
0
 protected override void onMessageDestroy(DestroyMessage dm)
 {
     InfoLog.WriteInfo("MessageDestroy", EPrefix.SimulationInfo);
 }
示例#15
0
 /// <summary>
 /// Handle destroy messages.
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="packet"></param>
 /// <param name="reader"></param>
 /// <returns></returns>
 protected virtual Error HandleMessage(DestroyMessage msg, PacketBuffer packet, BinaryReader reader)
 {
     PersistentText.Remove(msg.ObjectID);
     return(new Error());
 }
示例#16
0
 public virtual void Destroy(DestroyMessage message) => spawnedObjects.TryRemove(message.objectId, out _);
示例#17
0
 /// <summary>
 /// Called at end of <see cref="HandleMessage(DestroyMessage, PacketBuffer, BinaryReader)"/>
 /// just prior to destroying the object. The object will still be destroyed.
 /// </summary>
 /// <param name="obj">The object being destroyed.</param>
 /// <param name="msg">The incoming message.</param>
 /// <param name="packet">The buffer containing the message.</param>
 /// <param name="reader">The reader from which the message came.</param>
 /// <returns>An error code on failure.</returns>
 protected virtual Error PostHandleMessage(GameObject obj, DestroyMessage msg, PacketBuffer packet, BinaryReader reader)
 {
     return(new Error());
 }
示例#18
0
 /// <summary>
 /// Handle destroy messages.
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="packet"></param>
 /// <param name="reader"></param>
 /// <returns></returns>
 protected virtual Error HandleMessage(DestroyMessage msg)
 {
     PersistentText.Remove(msg.ObjectID);
     return(new Error());
 }
示例#19
0
 /// <summary>
 /// Called at end of <see cref="HandleMessage(DestroyMessage, PacketBuffer, BinaryReader)"/>
 /// just prior to destroying the object. The object will still be destroyed.
 /// </summary>
 /// <param name="msg">The incoming message.</param>
 /// <param name="packet">The buffer containing the message.</param>
 /// <param name="reader">The reader from which the message came.</param>
 /// <returns>An error code on failure.</returns>
 /// <remarks>
 /// Neither the <see cref="PacketBuffer"/> nor the <see cref="BinaryReader"/> are provided as destroy message are
 /// not allowed to carry additional payloads.
 /// </remarks>
 protected virtual Error PostHandleMessage(DestroyMessage msg, ShapeCache cache, int shapeIndex)
 {
     return(new Error());
 }
示例#20
0
 /// <summary>
 /// Overridden to clear mesh data and release resources even for transient objects.
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="msg"></param>
 /// <param name="packet"></param>
 /// <param name="reader"></param>
 /// <returns></returns>
 protected override Error PostHandleMessage(GameObject obj, DestroyMessage msg, PacketBuffer packet, BinaryReader reader)
 {
     ResetObject(obj);
     return(new Error());
 }
 protected override void HandleDestroyMessage(DestroyMessage destroyMessage)
 {
     _logger.Debug("Handling Destroy message");
     _networkManager.TcpServerSendBroadcast(destroyMessage);
 }
示例#22
0
 protected abstract void onMessageDestroy(DestroyMessage dm);
示例#23
0
 protected abstract void HandleDestroyMessage(DestroyMessage message);