using System; using System.Threading; using System.Collections; using Holo.Managers; using Holo.Virtual.Rooms; namespace Holo.Virtual.Users { /// /// Provides management for the statuses of a virtual user. /// public class virtualRoomUserStatusManager { #region Declares private int userID; private int roomID; private Hashtable _Statuses; private delegate void statusVoid(string Key, string Value, int Length); #endregion #region Constructors/destructors public virtualRoomUserStatusManager(int userID, int roomID) { this.userID = userID; this.roomID = roomID; _Statuses = new Hashtable(); } internal void Clear() { try { _Statuses.Clear(); _Statuses = null; } catch { } } #endregion #region Partner objects private virtualUser User { get { return userManager.getUser(userID); } } private virtualRoom Room { get { return roomManager.getRoom(roomID); } } private virtualRoomUser roomUser { get { return userManager.getUser(userID).roomUser; } } #endregion #region Status management internal void addStatus(string Key, string Value) { if (_Statuses.ContainsKey(Key)) _Statuses.Remove(Key); _Statuses.Add(Key, Value); } internal void removeStatus(string Key) { try { if (_Statuses.ContainsKey(Key)) _Statuses.Remove(Key); } catch { } } internal bool containsStatus(string Key) { return _Statuses.ContainsKey(Key); } internal void Refresh() { roomUser.Refresh(); } public override string ToString() { string Output = ""; Hashtable status = (Hashtable)_Statuses.Clone(); try { foreach (string Key in status.Keys) { Output += Key; string Value = (string)_Statuses[Key]; if (Value != "") Output += " " + Value; Output += "/"; } } catch { } return Output; } #endregion #region Statuses internal void carryItem(int Item) { User.statusID = "Gb"; User.statusCount = Item; Room.sendData(roomUser.User.statusID + Encoding.encodeVL64(roomUser.roomUID) + Encoding.encodeVL64(User.statusCount)); } internal void dropCarrydItem() { User.statusID = "Gb"; User.statusCount = 0; Room.sendData(roomUser.User.statusID + Encoding.encodeVL64(roomUser.roomUID) + Encoding.encodeVL64(0)); } #endregion #region Status handlers internal void handleStatus(string Key, string Value, int Length) { if (_Statuses.ContainsKey(Key)) _Statuses.Remove(Key); new statusVoid(HANDLESTATUS).BeginInvoke(Key, Value, Length, null, null); } private void HANDLESTATUS(string Key, string Value, int Length) { try { _Statuses.Add(Key, Value); roomUser.Refresh(); Thread.Sleep(Length); _Statuses.Remove(Key); roomUser.Refresh(); } catch { } } #endregion } }