using System; using System.Drawing; using System.Collections; namespace IMDrawLibrary { public enum Command { Login = 0, // Login Detail: Message = 1, // PersonalMessage Detail: message ClientList = 2, // Client List: separated by @ Logout = 3 // Logout Detail: }; public enum Version { Server = 0, Client = 1 }; public class Common { public const string BossName = "Boss"; public const string All = "All"; public const string Conference = "Conference"; } public class Message { /* * Message format * IMDraw|||||||.... * * Sample * IMDraw|sacredgas|laney_18_boggs|00|Hello World|34|45|*|2|98 * */ string strSender; string strReceiver; Command cmdMessageCommand; string strTextDetail; ArrayList points; byte[] dataArray; public static int Size = 1024 * 100; public Message() { } public Message(byte[] rawMessage, Version version) { string strRawStringMessage = System.Text.Encoding.ASCII.GetString(rawMessage); string[] strRawStringMessageArray = strRawStringMessage.Split(new char[] { '|' }); this.strSender = strRawStringMessageArray[1]; this.strReceiver = strRawStringMessageArray[2]; this.cmdMessageCommand = (Command)Convert.ToInt32(strRawStringMessageArray[3]); if (version == Version.Client) { this.strTextDetail = strRawStringMessageArray[4]; this.points = new ArrayList(); ArrayList Xpts = new ArrayList(); ArrayList Ypts = new ArrayList(); bool x = true; for (int index = 5; index < strRawStringMessageArray.Length; index++) { if (strRawStringMessageArray[index].IndexOf("\0") > -1) { break; } else if (strRawStringMessageArray[index].Equals("*")) { if (Xpts.Count != 0) { Point[] PointArray = new Point[Xpts.Count]; for (int i = 0; i < Xpts.Count; i++) { Point point = new Point((int)Xpts[i], (int)Ypts[i]); PointArray[i] = point; } points.Insert(points.Count,PointArray); Xpts = new ArrayList(); Ypts = new ArrayList(); } } else { if (x) { Xpts.Add(Convert.ToInt32(strRawStringMessageArray[index])); x = false; } else { Ypts.Add(Convert.ToInt32(strRawStringMessageArray[index])); x = true; } //pts.Add(new Point(Convert.ToInt32(strRawStringMessageArray[index]), Convert.ToInt32(strRawStringMessageArray[index++]))); } } } else { this.dataArray = rawMessage; } } public string Sender { get { return strSender; } set { strSender = value; } } public string Receiver { get { return strReceiver; } set { strReceiver = value; } } public Command MessageCommand { get { return cmdMessageCommand; } set { cmdMessageCommand = value; } } public string TextDetail { get { return strTextDetail; } set { strTextDetail = value; } } public ArrayList Points { get { return points; } set { points = value; } } public byte[] GetRawMessage() { if (dataArray != null && dataArray.Length > 0) { return dataArray; } System.Text.StringBuilder sbMessage = new System.Text.StringBuilder("IMDraw"); sbMessage.Append("|"); sbMessage.Append(strSender); sbMessage.Append("|"); sbMessage.Append(strReceiver); sbMessage.Append("|"); sbMessage.Append((int)cmdMessageCommand); sbMessage.Append("|"); if (strTextDetail != null && !strTextDetail.Trim().Equals("")) sbMessage.Append(strTextDetail); else sbMessage.Append(" "); sbMessage.Append("|"); if (points != null) { foreach (Point[] pntArray in points) { foreach (Point point in pntArray) { sbMessage.Append(point.X); sbMessage.Append("|"); sbMessage.Append(point.Y); sbMessage.Append("|"); } sbMessage.Append("*"); sbMessage.Append("|"); } } return System.Text.Encoding.ASCII.GetBytes(sbMessage.ToString()); } } }