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, false)); } } internal void Clear() { } internal bool containsOnlineBuddy(int userID) { if (!this.Buddies.ContainsKey(userID)) { return false; } return userManager.containsUser(userID); } internal string friendList(int _maxFriends) { int[] userIDs = userManager.getUserFriendIDs(this.userID); StringBuilder Buddylist = new StringBuilder(Encoding.encodeVL64(200) + Encoding.encodeVL64(200) + Encoding.encodeVL64(600) + "H" + Encoding.encodeVL64(userIDs.Length)); virtualBuddy Me = new virtualBuddy(this.userID); for (int i = 0; i < userIDs.Length; i++) { DataRow dRow; virtualBuddy Buddy = new virtualBuddy(userIDs[i]); try { if (Buddy.Online) { userManager.getUser(userIDs[i]).Messenger.addBuddy(Me, true); } } catch { } if (!this.Buddies.Contains(userIDs[i])) { this.Buddies.Add(userIDs[i], Buddy); } using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { dRow = dbClient.getRow("SELECT lastvisit,mission FROM users WHERE id = " + userIDs[i] + " LIMIT 1"); } Buddylist.Append(Buddy.ToString(true, false)); Buddylist.Append(Convert.ToString(dRow[1]) + Convert.ToChar(2)); Buddylist.Append(Convert.ToString(dRow[0])); Buddylist.Append(Convert.ToChar(2)); } Buddylist.Append(Encoding.encodeVL64(_maxFriends) + "H"); return Buddylist.ToString(); } internal string friendRequests() { DataColumn dCol; DatabaseClient dbClient; using (dbClient = Eucalypt.dbManager.GetClient()) { dCol = dbClient.getColumn("SELECT userid_from,requestid FROM messenger_friendrequests WHERE userid_to = '" + this.userID + "' AND userid_to > 0 AND userid_from > 0 ORDER by requestid ASC"); } StringBuilder Requests = new StringBuilder(Encoding.encodeVL64(dCol.Table.Rows.Count) + Encoding.encodeVL64(dCol.Table.Rows.Count)); if (dCol.Table.Rows.Count > 0) { int i = 0; foreach (DataRow dRow in dCol.Table.Rows) { using (dbClient = Eucalypt.dbManager.GetClient()) { Requests.Append(string.Concat(new object[] { Encoding.encodeVL64(Convert.ToInt32(dRow["requestid"])), dbClient.getString("SELECT name FROM users WHERE id = '" + Convert.ToString(dRow["userid_from"]) + "'"), Convert.ToChar(2), Convert.ToString(dRow["userid_from"]), Convert.ToChar(2) })); } i++; } } return Requests.ToString(); } internal string getUpdates() { int updateAmount = 0; string Updates = ""; string PacketAdd = ""; try { foreach (virtualBuddy Buddy in ((Hashtable) this.Buddies.Clone()).Values) { if (Buddy.Updated) { string[] IDs; DatabaseClient dbClient; updateAmount++; using (dbClient = Eucalypt.dbManager.GetClient()) { DataRow dRow = dbClient.getRow("SELECT lastvisit,mission FROM users WHERE id = " + Buddy.userID + " LIMIT 1"); IDs = dataHandling.dColToArray(dbClient.getColumn("SELECT id FROM users WHERE id = " + Buddy.userID + " LIMIT 1")); } for (int i = 0; i < IDs.Length; i++) { DataRow row; int thisID = Convert.ToInt32(IDs[i]); bool online = userManager.containsUser(thisID); string onlineStr = online ? "I" : "H"; using (dbClient = Eucalypt.dbManager.GetClient()) { row = dbClient.getRow("SELECT name, mission, lastvisit, figure FROM users WHERE id = " + thisID.ToString()); } PacketAdd = string.Concat(new object[] { Encoding.encodeVL64(thisID), row[0], "\x0002", row[1], "\x0002", onlineStr, onlineStr, "\x0002", onlineStr, online ? row[3] : "", "\x0002", online ? "" : row[2], "\x0002" }); } } } return ("H" + Encoding.encodeVL64(updateAmount) + Updates.ToString()); } catch { return "HH"; } } internal string getUpdates2() { int updateAmount = 0; StringBuilder Updates = new StringBuilder(); Updates.Append("H"); Updates.Append(Encoding.encodeVL64(this.Buddies.Count)); try { foreach (virtualBuddy Buddy in ((Hashtable) this.Buddies.Clone()).Values) { if (Buddy.Updated) { DatabaseClient dbClient; string[] IDs; updateAmount++; using (dbClient = Eucalypt.dbManager.GetClient()) { DataRow dRow = dbClient.getRow("SELECT lastvisit,mission FROM users WHERE id = " + Buddy.userID + " LIMIT 1"); } using (dbClient = Eucalypt.dbManager.GetClient()) { IDs = dataHandling.dColToArray(dbClient.getColumn("SELECT id FROM users WHERE id = " + Buddy.userID + " LIMIT 1")); } for (int i = 0; i < IDs.Length; i++) { DataRow row; int thisID = Convert.ToInt32(IDs[i]); virtualUser usr = userManager.getUser(thisID); using (dbClient = Eucalypt.dbManager.GetClient()) { row = dbClient.getRow("SELECT name, mission, lastvisit, figure FROM users WHERE id = " + thisID.ToString()); } Updates.Append("H"); Updates.Append(Encoding.encodeVL64(thisID)); Updates.Append(row[0]); Updates.Append(Convert.ToChar(2)); Updates.Append(row[1]); Updates.Append(Convert.ToChar(2)); Updates.Append("I"); if (usr != null) { Updates.Append("I"); if (usr._roomID > 0) { Updates.Append("I"); } else { Updates.Append("H"); } Updates.Append(usr._Figure); Updates.Append(Convert.ToChar(2)); } else { Updates.Append("H"); Updates.Append("H"); } Updates.Append("H"); Updates.Append(Convert.ToChar(2)); } } } Out.WriteLine("H" + Encoding.encodeVL64(updateAmount) + Updates.ToString()); return ("H" + Encoding.encodeVL64(updateAmount) + Updates.ToString()); } catch { return "HH"; } } internal bool hasFriendRequests(int userID) { using (DatabaseClient dbClient = Eucalypt.dbManager.GetClient()) { return dbClient.findsResult(string.Concat(new object[] { "SELECT requestid FROM messenger_friendrequests WHERE (userid_to = '", this.userID, "' AND userid_from = '", userID, "' AND userid_to > 0 AND userid_from > 0) OR (userid_to = '", userID, "' AND userid_from = '", this.userID, "' AND userid_to > 0 AND userid_from > 0)" })); } } 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); } } } }