namespace Holo.Virtual.Users.Messenger { using Holo; using Holo.Managers; using Holo.Virtual.Users; using Ion.Storage; using System; using System.Collections; using System.Data; using System.Text; internal class virtualMessenger { private Hashtable Buddies; private int userID; internal virtualMessenger(int userID) { this.userID = userID; this.Buddies = new Hashtable(); } internal void addBuddy(virtualBuddy Buddy, bool Update) { if (!this.Buddies.ContainsKey(Buddy.userID)) { this.Buddies.Add(Buddy.userID, Buddy); } if (Update) { this.User.sendData("@MHII" + Buddy.ToString(true)); } } internal void Clear() { } internal bool containsOnlineBuddy(int userID) { if (!this.Buddies.ContainsKey(userID)) { return false; } return userManager.containsUser(userID); } internal string friendList() { int[] numArray = userManager.getUserFriendIDs(this.userID); StringBuilder builder = new StringBuilder(Encoding.encodeVL64(200) + Encoding.encodeVL64(200) + Encoding.encodeVL64(600) + "H" + Encoding.encodeVL64(numArray.Length)); virtualBuddy buddy = new virtualBuddy(this.userID); for (int i = 0; i < numArray.Length; i++) { DataRow row; virtualBuddy buddy2 = new virtualBuddy(numArray[i]); try { if (buddy2.Online) { userManager.getUser(numArray[i]).Messenger.addBuddy(buddy, true); } } catch { } if (!this.Buddies.Contains(numArray[i])) { this.Buddies.Add(numArray[i], buddy2); } using (DatabaseClient client = Eucalypt.dbManager.GetClient()) { row = client.getRow("SELECT lastvisit,mission FROM users WHERE id = " + numArray[i] + " LIMIT 1"); } builder.Append(buddy2.ToString(true)); builder.Append(Convert.ToString(row[1]) + Convert.ToChar(2)); builder.Append(Convert.ToString(row[0])); builder.Append(Convert.ToChar(2)); } builder.Append(Encoding.encodeVL64(100) + "H"); return builder.ToString(); } internal string friendRequests() { DataColumn column; DatabaseClient client; using (client = Eucalypt.dbManager.GetClient()) { column = client.getColumn("SELECT userid_from,requestid FROM messenger_friendrequests WHERE userid_to = '" + this.userID + "' ORDER by requestid ASC"); } StringBuilder builder = new StringBuilder(Encoding.encodeVL64(column.Table.Rows.Count) + Encoding.encodeVL64(column.Table.Rows.Count)); if (column.Table.Rows.Count > 0) { int num = 0; foreach (DataRow row in column.Table.Rows) { using (client = Eucalypt.dbManager.GetClient()) { builder.Append(string.Concat(new object[] { Encoding.encodeVL64(Convert.ToInt32(row["requestid"])), client.getString("SELECT name FROM users WHERE id = '" + Convert.ToString(row["userid_from"]) + "'"), Convert.ToChar(2), Convert.ToString(row["userid_from"]), Convert.ToChar(2) })); } num++; } } return builder.ToString(); } internal string getUpdates() { int i = 0; string str = ""; string str2 = ""; try { foreach (virtualBuddy buddy in ((Hashtable) this.Buddies.Clone()).Values) { if (buddy.Updated) { DatabaseClient client; string[] strArray; i++; using (client = Eucalypt.dbManager.GetClient()) { DataRow row = client.getRow("SELECT lastvisit,mission FROM users WHERE id = " + buddy.userID + " LIMIT 1"); } using (client = Eucalypt.dbManager.GetClient()) { strArray = dataHandling.dColToArray(client.getColumn("SELECT id FROM users WHERE id = " + buddy.userID + " LIMIT 1")); } for (int j = 0; j < strArray.Length; j++) { DataRow row2; int userID = Convert.ToInt16(strArray[j]); bool flag = userManager.containsUser(userID); string str3 = flag ? "I" : "H"; using (client = Eucalypt.dbManager.GetClient()) { row2 = client.getRow("SELECT name, mission, lastvisit, figure FROM users WHERE id = " + userID.ToString()); } str2 = string.Concat(new object[] { Encoding.encodeVL64(userID), row2[0], "\x0002", row2[1], "\x0002", str3, str3, "\x0002", str3, flag ? row2[3] : "", "\x0002", flag ? "" : row2[2], "\x0002" }); str = str + str2; } } } return ("H" + Encoding.encodeVL64(i) + str); } catch { return "HH"; } } internal bool hasFriendRequests(int userID) { using (DatabaseClient client = Eucalypt.dbManager.GetClient()) { return client.findsResult(string.Concat(new object[] { "SELECT requestid FROM messenger_friendrequests WHERE (userid_to = '", this.userID, "' AND userid_from = '", userID, "') OR (userid_to = '", userID, "' AND userid_from = '", this.userID, "')" })); } } internal bool hasFriendship(int userID) { return this.Buddies.ContainsKey(userID); } internal void removeBuddy(int ID) { this.User.sendData("@MHIM" + Encoding.encodeVL64(ID)); if (this.Buddies.Contains(ID)) { this.Buddies.Remove(ID); } } internal virtualUser User { get { return userManager.getUser(this.userID); } } } }