/// <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()); }
/// <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)); }
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); } }
/// <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()); }
/// <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)); }
/// <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); }
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()); }
/// <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()); }
/// <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()); }
/// <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)); } }
/// <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(); }
public void DestroyGameObject(GameObject _go) { DestroyMessage message = new DestroyMessage(_go); SendMessageToClients(message); }
protected override void onMessageDestroy(DestroyMessage dm) { InfoLog.WriteInfo("MessageDestroy", EPrefix.SimulationInfo); }
/// <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()); }
public virtual void Destroy(DestroyMessage message) => spawnedObjects.TryRemove(message.objectId, out _);
/// <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()); }
/// <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()); }
/// <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()); }
/// <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); }
protected abstract void onMessageDestroy(DestroyMessage dm);
protected abstract void HandleDestroyMessage(DestroyMessage message);