Exemple #1
0
        /// <summary>
        /// Handle create messages.
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected virtual Error HandleMessage(CreateMessage msg, PacketBuffer packet, BinaryReader reader)
        {
            TextEntry text = new TextEntry();

            text.ID          = msg.ObjectID;
            text.ObjectFlags = msg.Flags;
            text.Category    = msg.Category;
            text.Position    = new Vector3(msg.Attributes.X, msg.Attributes.Y, msg.Attributes.Z);
            text.Colour      = ShapeComponent.ConvertColour(msg.Attributes.Colour);
            text.Active      = CategoryCheck(text.Category);

            // Read the text.
            int textLength = reader.ReadUInt16();

            if (textLength > 0)
            {
                byte[] textBytes = reader.ReadBytes(textLength);
                text.Text = System.Text.Encoding.UTF8.GetString(textBytes);
            }

            if (msg.ObjectID == 0)
            {
                TransientText.Add(text);
            }
            else
            {
                PersistentText.Add(text);
            }

            return(new Error());
        }
        /// <summary>
        /// Handle create messages.
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="packet"></param>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected virtual Error HandleMessage(CreateMessage msg, PacketBuffer packet, BinaryReader reader)
        {
            TextEntry text = new TextEntry();

            text.ID          = msg.ObjectID;
            text.ObjectFlags = msg.Flags;
            text.Category    = msg.Category;
            text.Position    = new Vector3(msg.Attributes.X, msg.Attributes.Y, msg.Attributes.Z);
            text.Colour      = Maths.ColourExt.ToUnity32(new Maths.Colour(msg.Attributes.Colour));

            // Read the text.
            int textLength = reader.ReadUInt16();

            if (textLength > 0)
            {
                byte[] textBytes = reader.ReadBytes(textLength);
                text.Text = System.Text.Encoding.UTF8.GetString(textBytes);
            }

            if (msg.ObjectID == 0)
            {
                TransientText.Add(text);
            }
            else
            {
                if (PersistentText.ContainsEntry(text.ID))
                {
                    // Object ID already present. Check for replace flag.
                    if ((msg.Flags & (ushort)ObjectFlag.Replace) == 0)
                    {
                        // Not replace flag => error.
                        return(new Error(ErrorCode.DuplicateShape, msg.ObjectID));
                    }

                    // Replace.
                    PersistentText.Remove(text.ID);
                }
                PersistentText.Add(text);
            }

            return(new Error());
        }