OSDN Git Service

More work on moving notifications to new blue dialog in upper right corner
[radegast/radegast.git] / Radegast / Core / RadegastInstance.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.IO;\r
4 using System.Text;\r
5 using System.Windows.Forms;\r
6 using RadegastNc;\r
7 using OpenMetaverse;\r
8 \r
9 namespace Radegast\r
10 {\r
11     public class RadegastInstance\r
12     {\r
13         private GridClient client;\r
14         private RadegastNetcom netcom;\r
15 \r
16         private ImageCache imageCache;\r
17         private StateManager state;\r
18         private ConfigManager config;\r
19 \r
20         private frmMain mainForm;\r
21         private TabsConsole tabsConsole;\r
22         public readonly string userDir;\r
23         public readonly string animCacheDir;\r
24 \r
25         public Dictionary<UUID, Group> groups;\r
26         public Dictionary<UUID, string> nameCache = new Dictionary<UUID,string>();\r
27 \r
28         public delegate void OnAvatarNameCallBack(UUID agentID, string agentName);\r
29         public event OnAvatarNameCallBack OnAvatarName;\r
30 \r
31         public readonly bool advancedDebugging = false;\r
32         public readonly bool MonoRuntime;\r
33 \r
34         public RadegastInstance()\r
35         {\r
36             try\r
37             {\r
38                 userDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), Properties.Resources.ProgramName);\r
39                 if (!Directory.Exists(userDir))\r
40                 {\r
41                     Directory.CreateDirectory(userDir);\r
42                 }\r
43             }\r
44             catch (Exception) \r
45             {\r
46                 userDir = System.Environment.CurrentDirectory;\r
47             };\r
48             animCacheDir = Path.Combine(userDir, @"anim_cache");\r
49 \r
50             // Are we running mono?\r
51             if (null == Type.GetType("Mono.Runtime"))\r
52             {\r
53                 MonoRuntime = false;\r
54             }\r
55             else\r
56             {\r
57                 MonoRuntime = true;\r
58             }\r
59 \r
60             Settings.PIPELINE_REFRESH_INTERVAL = 2000.0f;\r
61 \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
71 \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
75     \r
76             client.Throttle.Texture = 2446000.0f;\r
77             client.Throttle.Asset = 2446000.0f;\r
78             client.Settings.THROTTLE_OUTGOING_PACKETS = false;\r
79             \r
80             netcom = new RadegastNetcom(client);\r
81 \r
82             imageCache = new ImageCache();\r
83             state = new StateManager(this);\r
84             InitializeConfig();\r
85 \r
86             mainForm = new frmMain(this);\r
87             mainForm.InitializeControls();\r
88             tabsConsole = mainForm.TabConsole;\r
89 \r
90             Application.ApplicationExit += new EventHandler(Application_ApplicationExit);\r
91             groups = new Dictionary<UUID, Group>();\r
92          \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
99         }\r
100 \r
101         public void CleanUp()\r
102         {\r
103             if (client != null)\r
104             {\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
111             }\r
112 \r
113             if (MonoRuntime)\r
114             {\r
115                 Environment.Exit(0);\r
116             }\r
117 \r
118         }\r
119 \r
120         void Avatars_OnAvatarNames(Dictionary<UUID, string> names)\r
121         {\r
122             lock (nameCache)\r
123             {\r
124                 foreach (KeyValuePair<UUID, string> av in names)\r
125                 {\r
126                     if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }\r
127                         catch (Exception) { };\r
128 \r
129                     if (!nameCache.ContainsKey(av.Key))\r
130                     {\r
131                         nameCache.Add(av.Key, av.Value);\r
132                     }\r
133                 }\r
134             }\r
135         }\r
136 \r
137         public string getAvatarName(UUID key)\r
138         {\r
139             if (nameCache.ContainsKey(key))\r
140             {\r
141                 return nameCache[key];\r
142             }\r
143             else\r
144             {\r
145                 client.Avatars.RequestAvatarName(key);\r
146                 return "Loading...";\r
147             }\r
148         }\r
149 \r
150         void Groups_OnGroupProfile(Group group)\r
151         {\r
152             if (groups.ContainsKey(group.ID))\r
153             {\r
154                 groups[group.ID] = group;\r
155             }\r
156         }\r
157 \r
158         void Groups_OnGroupJoined(UUID groupID, bool success)\r
159         {\r
160             if (success && !groups.ContainsKey(groupID))\r
161             {\r
162                 groups.Add(groupID, new Group());\r
163                 client.Groups.RequestGroupProfile(groupID);\r
164             }\r
165         }\r
166 \r
167         void Groups_OnGroupLeft(UUID groupID, bool success)\r
168         {\r
169             if (groups.ContainsKey(groupID))\r
170             {\r
171                 groups.Remove(groupID);\r
172             }\r
173         }\r
174 \r
175         void Groups_OnGroupDropped(UUID groupID)\r
176         {\r
177             if (groups.ContainsKey(groupID))\r
178             {\r
179                 groups.Remove(groupID);\r
180             }\r
181         }\r
182 \r
183         void Groups_OnCurrentGroups(Dictionary<UUID, Group> gr)\r
184         {\r
185             this.groups = gr;\r
186         }\r
187 \r
188         private void Application_ApplicationExit(object sender, EventArgs e)\r
189         {\r
190             config.SaveCurrentConfig();\r
191         }\r
192 \r
193         private void InitializeConfig()\r
194         {\r
195             config = new ConfigManager(this);\r
196             config.ApplyDefault();\r
197 \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
202         }\r
203 \r
204         public GridClient Client\r
205         {\r
206             get { return client; }\r
207         }\r
208 \r
209         public RadegastNetcom Netcom\r
210         {\r
211             get { return netcom; }\r
212         }\r
213 \r
214         public ImageCache ImageCache\r
215         {\r
216             get { return imageCache; }\r
217         }\r
218 \r
219         public StateManager State\r
220         {\r
221             get { return state; }\r
222         }\r
223 \r
224         public ConfigManager Config\r
225         {\r
226             get { return config; }\r
227         }\r
228 \r
229         public frmMain MainForm\r
230         {\r
231             get { return mainForm; }\r
232         }\r
233 \r
234         public TabsConsole TabConsole\r
235         {\r
236             get { return tabsConsole; }\r
237         }\r
238     }\r
239 }\r