OSDN Git Service

Beginning cleanup of event handlers.
[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 \r
33         public RadegastInstance()\r
34         {\r
35             try\r
36             {\r
37                 userDir = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), Properties.Resources.ProgramName);\r
38                 if (!Directory.Exists(userDir))\r
39                 {\r
40                     Directory.CreateDirectory(userDir);\r
41                 }\r
42             }\r
43             catch (Exception) \r
44             {\r
45                 userDir = System.Environment.CurrentDirectory;\r
46             };\r
47             animCacheDir = Path.Combine(userDir, @"anim_cache");\r
48 \r
49             Settings.PIPELINE_REFRESH_INTERVAL = 2000.0f;\r
50 \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
60 \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
64     \r
65             client.Throttle.Texture = 2446000.0f;\r
66             client.Throttle.Asset = 2446000.0f;\r
67             client.Settings.THROTTLE_OUTGOING_PACKETS = false;\r
68             \r
69             netcom = new RadegastNetcom(client);\r
70 \r
71             imageCache = new ImageCache();\r
72             state = new StateManager(this);\r
73             InitializeConfig();\r
74 \r
75             mainForm = new frmMain(this);\r
76             mainForm.InitializeControls();\r
77             tabsConsole = mainForm.TabConsole;\r
78 \r
79             Application.ApplicationExit += new EventHandler(Application_ApplicationExit);\r
80             groups = new Dictionary<UUID, Group>();\r
81          \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
87         }\r
88 \r
89         public void CleanUp()\r
90         {\r
91             client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
92             client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
93             client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
94             client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
95             client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
96 \r
97             client = null;\r
98             netcom = null;\r
99         }\r
100 \r
101         void Avatars_OnAvatarNames(Dictionary<UUID, string> names)\r
102         {\r
103             lock (nameCache)\r
104             {\r
105                 foreach (KeyValuePair<UUID, string> av in names)\r
106                 {\r
107                     if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }\r
108                         catch (Exception) { };\r
109 \r
110                     if (!nameCache.ContainsKey(av.Key))\r
111                     {\r
112                         nameCache.Add(av.Key, av.Value);\r
113                     }\r
114                 }\r
115             }\r
116         }\r
117 \r
118         public string getAvatarName(UUID key)\r
119         {\r
120             if (nameCache.ContainsKey(key))\r
121             {\r
122                 return nameCache[key];\r
123             }\r
124             else\r
125             {\r
126                 client.Avatars.RequestAvatarName(key);\r
127                 return "Loading...";\r
128             }\r
129         }\r
130 \r
131         void Groups_OnGroupProfile(Group group)\r
132         {\r
133             if (groups.ContainsKey(group.ID))\r
134             {\r
135                 groups[group.ID] = group;\r
136             }\r
137         }\r
138 \r
139         void Groups_OnGroupJoined(UUID groupID, bool success)\r
140         {\r
141             if (success && !groups.ContainsKey(groupID))\r
142             {\r
143                 groups.Add(groupID, new Group());\r
144                 client.Groups.RequestGroupProfile(groupID);\r
145             }\r
146         }\r
147 \r
148         void Groups_OnGroupLeft(UUID groupID, bool success)\r
149         {\r
150             if (groups.ContainsKey(groupID))\r
151             {\r
152                 groups.Remove(groupID);\r
153             }\r
154         }\r
155 \r
156         void Groups_OnCurrentGroups(Dictionary<UUID, Group> gr)\r
157         {\r
158             this.groups = gr;\r
159         }\r
160 \r
161         private void Application_ApplicationExit(object sender, EventArgs e)\r
162         {\r
163             config.SaveCurrentConfig();\r
164         }\r
165 \r
166         private void InitializeConfig()\r
167         {\r
168             config = new ConfigManager(this);\r
169             config.ApplyDefault();\r
170 \r
171             netcom.LoginOptions.FirstName = config.CurrentConfig.FirstName;\r
172             netcom.LoginOptions.LastName = config.CurrentConfig.LastName;\r
173             netcom.LoginOptions.Password = config.CurrentConfig.PasswordMD5;\r
174             netcom.LoginOptions.IsPasswordMD5 = true;\r
175         }\r
176 \r
177         public GridClient Client\r
178         {\r
179             get { return client; }\r
180         }\r
181 \r
182         public RadegastNetcom Netcom\r
183         {\r
184             get { return netcom; }\r
185         }\r
186 \r
187         public ImageCache ImageCache\r
188         {\r
189             get { return imageCache; }\r
190         }\r
191 \r
192         public StateManager State\r
193         {\r
194             get { return state; }\r
195         }\r
196 \r
197         public ConfigManager Config\r
198         {\r
199             get { return config; }\r
200         }\r
201 \r
202         public frmMain MainForm\r
203         {\r
204             get { return mainForm; }\r
205         }\r
206 \r
207         public TabsConsole TabConsole\r
208         {\r
209             get { return tabsConsole; }\r
210         }\r
211     }\r
212 }\r