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
32 public readonly bool MonoRuntime;
\r
34 public RadegastInstance()
\r
38 userDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), Properties.Resources.ProgramName);
\r
39 if (!Directory.Exists(userDir))
\r
41 Directory.CreateDirectory(userDir);
\r
46 userDir = System.Environment.CurrentDirectory;
\r
48 animCacheDir = Path.Combine(userDir, @"anim_cache");
\r
50 // Are we running mono?
\r
51 if (null == Type.GetType("Mono.Runtime"))
\r
53 MonoRuntime = false;
\r
60 Settings.PIPELINE_REFRESH_INTERVAL = 2000.0f;
\r
62 client = new GridClient();
\r
63 client.Settings.ALWAYS_REQUEST_OBJECTS = true;
\r
64 client.Settings.ALWAYS_DECODE_OBJECTS = true;
\r
65 client.Settings.OBJECT_TRACKING = true;
\r
66 client.Settings.ENABLE_SIMSTATS = true;
\r
67 client.Settings.FETCH_MISSING_INVENTORY = true;
\r
68 client.Settings.MULTIPLE_SIMS = true;
\r
69 client.Settings.SEND_AGENT_THROTTLE = true;
\r
70 client.Settings.SEND_AGENT_UPDATES = true;
\r
72 client.Settings.USE_TEXTURE_CACHE = true;
\r
73 client.Settings.TEXTURE_CACHE_DIR = Path.Combine(userDir, "cache");
\r
74 client.Assets.Cache.AutoPruneEnabled = false;
\r
76 client.Throttle.Texture = 2446000.0f;
\r
77 client.Throttle.Asset = 2446000.0f;
\r
78 client.Settings.THROTTLE_OUTGOING_PACKETS = false;
\r
80 netcom = new RadegastNetcom(client);
\r
82 imageCache = new ImageCache();
\r
83 state = new StateManager(this);
\r
86 mainForm = new frmMain(this);
\r
87 mainForm.InitializeControls();
\r
88 tabsConsole = mainForm.TabConsole;
\r
90 Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
\r
91 groups = new Dictionary<UUID, Group>();
\r
93 client.Groups.OnCurrentGroups += new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);
\r
94 client.Groups.OnGroupLeft += new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);
\r
95 client.Groups.OnGroupDropped += new GroupManager.GroupDroppedCallback(Groups_OnGroupDropped);
\r
96 client.Groups.OnGroupJoined += new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);
\r
97 client.Groups.OnGroupProfile += new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);
\r
98 client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);
\r
101 public void CleanUp()
\r
103 if (client != null)
\r
105 client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);
\r
106 client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);
\r
107 client.Groups.OnGroupDropped -= new GroupManager.GroupDroppedCallback(Groups_OnGroupDropped);
\r
108 client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);
\r
109 client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);
\r
110 client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);
\r
115 Environment.Exit(0);
\r
120 void Avatars_OnAvatarNames(Dictionary<UUID, string> names)
\r
124 foreach (KeyValuePair<UUID, string> av in names)
\r
126 if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }
\r
127 catch (Exception) { };
\r
129 if (!nameCache.ContainsKey(av.Key))
\r
131 nameCache.Add(av.Key, av.Value);
\r
137 public string getAvatarName(UUID key)
\r
139 if (nameCache.ContainsKey(key))
\r
141 return nameCache[key];
\r
145 client.Avatars.RequestAvatarName(key);
\r
146 return "Loading...";
\r
150 void Groups_OnGroupProfile(Group group)
\r
152 if (groups.ContainsKey(group.ID))
\r
154 groups[group.ID] = group;
\r
158 void Groups_OnGroupJoined(UUID groupID, bool success)
\r
160 if (success && !groups.ContainsKey(groupID))
\r
162 groups.Add(groupID, new Group());
\r
163 client.Groups.RequestGroupProfile(groupID);
\r
167 void Groups_OnGroupLeft(UUID groupID, bool success)
\r
169 if (groups.ContainsKey(groupID))
\r
171 groups.Remove(groupID);
\r
175 void Groups_OnGroupDropped(UUID groupID)
\r
177 if (groups.ContainsKey(groupID))
\r
179 groups.Remove(groupID);
\r
183 void Groups_OnCurrentGroups(Dictionary<UUID, Group> gr)
\r
188 private void Application_ApplicationExit(object sender, EventArgs e)
\r
190 config.SaveCurrentConfig();
\r
193 private void InitializeConfig()
\r
195 config = new ConfigManager(this);
\r
196 config.ApplyDefault();
\r
198 netcom.LoginOptions.FirstName = config.CurrentConfig.FirstName;
\r
199 netcom.LoginOptions.LastName = config.CurrentConfig.LastName;
\r
200 netcom.LoginOptions.Password = config.CurrentConfig.PasswordMD5;
\r
201 netcom.LoginOptions.IsPasswordMD5 = true;
\r
204 public GridClient Client
\r
206 get { return client; }
\r
209 public RadegastNetcom Netcom
\r
211 get { return netcom; }
\r
214 public ImageCache ImageCache
\r
216 get { return imageCache; }
\r
219 public StateManager State
\r
221 get { return state; }
\r
224 public ConfigManager Config
\r
226 get { return config; }
\r
229 public frmMain MainForm
\r
231 get { return mainForm; }
\r
234 public TabsConsole TabConsole
\r
236 get { return tabsConsole; }
\r