using FSO.Files.Utils; using System.IO; namespace FSO.Files.Formats.tsodata { public class MessageItem { public static int CURRENT_VERSION = 1; public int Version = CURRENT_VERSION; public int ID; public uint SenderID; public uint TargetID; public string Subject; public string Body; public string SenderName; public long Time; public int Type; //(message/vote/club/maxis/tso/house/roommate/call) public int Subtype; //(urgent?) public int ReadState; public int? ReplyID; public MessageItem() { } public MessageItem(Stream stream) { Read(stream); } public void Save(Stream stream) { using (var writer = IoWriter.FromStream(stream)) { writer.WriteCString("FSOI", 4); writer.WriteInt32(Version); writer.WriteInt32(ID); writer.WriteUInt32(SenderID); writer.WriteUInt32(TargetID); writer.WriteLongPascalString(Subject); writer.WriteLongPascalString(Body); writer.WriteLongPascalString(SenderName); writer.WriteInt64(Time); writer.WriteInt32(Type); writer.WriteInt32(Subtype); writer.WriteInt32(ReadState); writer.WriteByte((byte)((ReplyID == null) ? 0 : 1)); if (ReplyID != null) writer.WriteInt32(ReplyID.Value); } } public void Read(Stream stream) { using (var reader = IoBuffer.FromStream(stream)) { var magic = reader.ReadCString(4); Version = reader.ReadInt32(); ID = reader.ReadInt32(); SenderID = reader.ReadUInt32(); TargetID = reader.ReadUInt32(); Subject = reader.ReadLongPascalString(); Body = reader.ReadLongPascalString(); SenderName = reader.ReadLongPascalString(); Time = reader.ReadInt64(); Type = reader.ReadInt32(); Subtype = reader.ReadInt32(); ReadState = reader.ReadInt32(); if (reader.ReadByte() > 0) { ReplyID = reader.ReadInt32(); } } } } public enum MessageSpecialType { Normal = 0, //neighbourhoods Nominate = 1, Vote = 2, AcceptNomination = 3, FreeVote = 4 } }