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; internal virtualUser User; 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() { this.Buddies.Clear(); this.Buddies = null; } internal bool containsOnlineBuddy(int userID) { if (!this.Buddies.ContainsKey(userID)) { return false; } return userManager.containsUser(userID); } internal string friendList() { this.UpdateUser(); int[] numArray = userManager.getUserFriendIDs(this.userID); StringBuilder builder = new StringBuilder(Holo.Encoding.encodeVL64(200) + Holo.Encoding.encodeVL64(200) + Holo.Encoding.encodeVL64(600) + "H" + Holo.Encoding.encodeVL64(numArray.Length)); virtualBuddy buddy = new virtualBuddy(this.userID); for (int i = 0; i < numArray.Length; i++) { virtualBuddy buddy2 = new virtualBuddy(numArray[i]); try { if (buddy2.Online) { userManager.getUser(numArray[i]).Messenger.addBuddy(buddy, true); } } catch { } this.Buddies.Add(numArray[i], buddy2); builder.Append(buddy2.ToString(true)); } builder.Append(Holo.Encoding.encodeVL64(200) + "H"); return builder.ToString(); } internal string friendRequests() { DataColumn column; this.UpdateUser(); using (DatabaseClient 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(Holo.Encoding.encodeVL64(column.Table.Rows.Count) + Holo.Encoding.encodeVL64(column.Table.Rows.Count)); if (column.Table.Rows.Count > 0) { int num = 0; foreach (DataRow row in column.Table.Rows) { using (DatabaseClient client2 = Eucalypt.dbManager.GetClient()) { builder.Append(string.Concat(new object[] { Holo.Encoding.encodeVL64(Convert.ToInt32(row["requestid"])), client2.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; StringBuilder builder = new StringBuilder(); try { foreach (virtualBuddy buddy in this.Buddies.Values) { if (buddy.Updated) { i++; builder.Append("H" + buddy.ToString(true)); } } return ("H" + Holo.Encoding.encodeVL64(i) + builder.ToString()); } 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" + Holo.Encoding.encodeVL64(ID)); if (this.Buddies.Contains(ID)) { this.Buddies.Remove(ID); } } private void UpdateUser() { this.User = userManager.getUser(this.userID); } } }