/// <summary> /// The primary message handling function. /// </summary> /// <param name="packet"></param> /// <param name="reader"></param> /// <returns></returns> public override Error ReadMessage(PacketBuffer packet, BinaryReader reader) { switch (packet.Header.MessageID) { case (ushort)CategoryMessageID.Name: CategoryNameMessage msg = new CategoryNameMessage(); if (!msg.Read(reader)) { return(new Error(ErrorCode.MalformedMessage)); } AddCategory(msg.CategoryID, msg.ParentID, msg.Name, msg.DefaultActive); break; default: return(new Error(ErrorCode.InvalidMessageID, packet.Header.MessageID)); } return(new Error()); }
/// <summary> /// Serialises the currently active objects in for playback from file. /// </summary> /// <param name="writer">The write to serialise to.</param> /// <param name="info">Statistics</param> /// <returns>An error code on failure.</returns> public override Error Serialise(BinaryWriter writer, ref SerialiseInfo info) { Error err = new Error(); info.TransientCount = info.PersistentCount = 0u; PacketBuffer packet = new PacketBuffer(1024); CategoryNameMessage msg = new CategoryNameMessage(); foreach (Category cat in _categories.Values) { ++info.PersistentCount; msg.CategoryID = cat.ID; msg.ParentID = cat.ParentID; msg.DefaultActive = cat.Active; msg.Name = cat.Name; packet.Reset(RoutingID, CategoryNameMessage.MessageID); msg.Write(packet); packet.FinalisePacket(); packet.ExportTo(writer); } return(err); }