2 using System.Collections.Generic;
\r
5 using System.Windows.Forms;
\r
11 public class RadegastInstance
\r
13 private GridClient client;
\r
14 private RadegastNetcom netcom;
\r
16 private ImageCache imageCache;
\r
17 private StateManager state;
\r
18 private ConfigManager config;
\r
20 private frmMain mainForm;
\r
21 private TabsConsole tabsConsole;
\r
22 public readonly string userDir;
\r
23 public readonly string animCacheDir;
\r
25 public Dictionary<UUID, Group> groups;
\r
26 public Dictionary<UUID, string> nameCache = new Dictionary<UUID,string>();
\r
28 public delegate void OnAvatarNameCallBack(UUID agentID, string agentName);
\r
29 public event OnAvatarNameCallBack OnAvatarName;
\r
31 public readonly bool advancedDebugging = false;
\r
33 public RadegastInstance()
\r
37 userDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), Properties.Resources.ProgramName);
\r
38 if (!Directory.Exists(userDir))
\r
40 Directory.CreateDirectory(userDir);
\r
45 userDir = System.Environment.CurrentDirectory;
\r
47 animCacheDir = Path.Combine(userDir, @"anim_cache");
\r
49 Settings.PIPELINE_REFRESH_INTERVAL = 2000.0f;
\r
51 client = new GridClient();
\r
52 client.Settings.ALWAYS_REQUEST_OBJECTS = true;
\r
53 client.Settings.ALWAYS_DECODE_OBJECTS = true;
\r
54 client.Settings.OBJECT_TRACKING = true;
\r
55 client.Settings.ENABLE_SIMSTATS = true;
\r
56 client.Settings.FETCH_MISSING_INVENTORY = true;
\r
57 client.Settings.MULTIPLE_SIMS = true;
\r
58 client.Settings.SEND_AGENT_THROTTLE = true;
\r
59 client.Settings.SEND_AGENT_UPDATES = true;
\r
61 client.Settings.USE_TEXTURE_CACHE = true;
\r
62 client.Settings.TEXTURE_CACHE_DIR = Path.Combine(userDir, "cache");
\r
63 client.Assets.Cache.AutoPruneEnabled = false;
\r
65 client.Throttle.Texture = 2446000.0f;
\r
66 client.Throttle.Asset = 2446000.0f;
\r
67 client.Settings.THROTTLE_OUTGOING_PACKETS = false;
\r
69 netcom = new RadegastNetcom(client);
\r
71 imageCache = new ImageCache();
\r
72 state = new StateManager(this);
\r
75 mainForm = new frmMain(this);
\r
76 mainForm.InitializeControls();
\r
77 tabsConsole = mainForm.TabConsole;
\r
79 Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
\r
80 groups = new Dictionary<UUID, Group>();
\r
82 client.Groups.OnCurrentGroups += new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);
\r
83 client.Groups.OnGroupLeft += new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);
\r
84 client.Groups.OnGroupJoined += new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);
\r
85 client.Groups.OnGroupProfile += new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);
\r
86 client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);
\r
89 public void CleanUp()
\r
93 client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);
\r
94 client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);
\r
95 client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);
\r
96 client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);
\r
97 client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);
\r
102 if (netcom != null)
\r
108 void Avatars_OnAvatarNames(Dictionary<UUID, string> names)
\r
112 foreach (KeyValuePair<UUID, string> av in names)
\r
114 if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }
\r
115 catch (Exception) { };
\r
117 if (!nameCache.ContainsKey(av.Key))
\r
119 nameCache.Add(av.Key, av.Value);
\r
125 public string getAvatarName(UUID key)
\r
127 if (nameCache.ContainsKey(key))
\r
129 return nameCache[key];
\r
133 client.Avatars.RequestAvatarName(key);
\r
134 return "Loading...";
\r
138 void Groups_OnGroupProfile(Group group)
\r
140 if (groups.ContainsKey(group.ID))
\r
142 groups[group.ID] = group;
\r
146 void Groups_OnGroupJoined(UUID groupID, bool success)
\r
148 if (success && !groups.ContainsKey(groupID))
\r
150 groups.Add(groupID, new Group());
\r
151 client.Groups.RequestGroupProfile(groupID);
\r
155 void Groups_OnGroupLeft(UUID groupID, bool success)
\r
157 if (groups.ContainsKey(groupID))
\r
159 groups.Remove(groupID);
\r
163 void Groups_OnCurrentGroups(Dictionary<UUID, Group> gr)
\r
168 private void Application_ApplicationExit(object sender, EventArgs e)
\r
170 config.SaveCurrentConfig();
\r
173 private void InitializeConfig()
\r
175 config = new ConfigManager(this);
\r
176 config.ApplyDefault();
\r
178 netcom.LoginOptions.FirstName = config.CurrentConfig.FirstName;
\r
179 netcom.LoginOptions.LastName = config.CurrentConfig.LastName;
\r
180 netcom.LoginOptions.Password = config.CurrentConfig.PasswordMD5;
\r
181 netcom.LoginOptions.IsPasswordMD5 = true;
\r
184 public GridClient Client
\r
186 get { return client; }
\r
189 public RadegastNetcom Netcom
\r
191 get { return netcom; }
\r
194 public ImageCache ImageCache
\r
196 get { return imageCache; }
\r
199 public StateManager State
\r
201 get { return state; }
\r
204 public ConfigManager Config
\r
206 get { return config; }
\r
209 public frmMain MainForm
\r
211 get { return mainForm; }
\r
214 public TabsConsole TabConsole
\r
216 get { return tabsConsole; }
\r