OSDN Git Service

* Rewrote Tools -> Nearby objects (should be much faster and more stable)
[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         private GridManager grid;\r
16 \r
17         private ImageCache imageCache;\r
18         private StateManager state;\r
19         private ConfigManager config;\r
20 \r
21         private frmMain mainForm;\r
22         private TabsConsole tabsConsole;\r
23         public readonly string userDir;\r
24         public readonly string animCacheDir;\r
25 \r
26         public Dictionary<UUID, Group> groups;\r
27         public Dictionary<UUID, string> nameCache = new Dictionary<UUID,string>();\r
28 \r
29         public delegate void OnAvatarNameCallBack(UUID agentID, string agentName);\r
30         public event OnAvatarNameCallBack OnAvatarName;\r
31 \r
32         public readonly bool advancedDebugging = false;\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             Settings.PIPELINE_REFRESH_INTERVAL = 2000.0f;\r
51 \r
52             client = new GridClient();\r
53             client.Settings.ALWAYS_REQUEST_OBJECTS = true;\r
54             client.Settings.ALWAYS_DECODE_OBJECTS = true;\r
55             client.Settings.OBJECT_TRACKING = true;\r
56             client.Settings.ENABLE_SIMSTATS = true;\r
57             client.Settings.FETCH_MISSING_INVENTORY = true;\r
58             client.Settings.MULTIPLE_SIMS = true;\r
59             client.Settings.SEND_AGENT_THROTTLE = true;\r
60             client.Settings.SEND_AGENT_UPDATES = true;\r
61 \r
62             client.Settings.USE_TEXTURE_CACHE = true;\r
63             client.Settings.TEXTURE_CACHE_DIR = Path.Combine(userDir,  "cache");\r
64             client.Assets.Cache.AutoPruneEnabled = false;\r
65     \r
66             client.Throttle.Texture = 2446000.0f;\r
67             client.Throttle.Asset = 2446000.0f;\r
68             client.Settings.THROTTLE_OUTGOING_PACKETS = false;\r
69             \r
70             netcom = new RadegastNetcom(client);\r
71             grid = new GridManager(client);\r
72 \r
73             imageCache = new ImageCache();\r
74             state = new StateManager(this);\r
75             InitializeConfig();\r
76 \r
77             mainForm = new frmMain(this);\r
78             mainForm.InitializeControls();\r
79             tabsConsole = mainForm.TabConsole;\r
80 \r
81             Application.ApplicationExit += new EventHandler(Application_ApplicationExit);\r
82             groups = new Dictionary<UUID, Group>();\r
83             client.Groups.OnCurrentGroups += new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
84             client.Groups.OnGroupLeft += new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
85             client.Groups.OnGroupJoined += new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
86             client.Groups.OnGroupProfile += new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
87             client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
88         }\r
89 \r
90         void Avatars_OnAvatarNames(Dictionary<UUID, string> names)\r
91         {\r
92             lock (nameCache)\r
93             {\r
94                 foreach (KeyValuePair<UUID, string> av in names)\r
95                 {\r
96                     if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }\r
97                         catch (Exception) { };\r
98 \r
99                     if (!nameCache.ContainsKey(av.Key))\r
100                     {\r
101                         nameCache.Add(av.Key, av.Value);\r
102                     }\r
103                 }\r
104             }\r
105         }\r
106 \r
107         public string getAvatarName(UUID key)\r
108         {\r
109             if (nameCache.ContainsKey(key))\r
110             {\r
111                 return nameCache[key];\r
112             }\r
113             else\r
114             {\r
115                 client.Avatars.RequestAvatarName(key);\r
116                 return "Loading...";\r
117             }\r
118         }\r
119 \r
120         void Groups_OnGroupProfile(Group group)\r
121         {\r
122             if (groups.ContainsKey(group.ID))\r
123             {\r
124                 groups[group.ID] = group;\r
125             }\r
126         }\r
127 \r
128         void Groups_OnGroupJoined(UUID groupID, bool success)\r
129         {\r
130             if (success && !groups.ContainsKey(groupID))\r
131             {\r
132                 groups.Add(groupID, new Group());\r
133                 client.Groups.RequestGroupProfile(groupID);\r
134             }\r
135         }\r
136 \r
137         void Groups_OnGroupLeft(UUID groupID, bool success)\r
138         {\r
139             if (groups.ContainsKey(groupID))\r
140             {\r
141                 groups.Remove(groupID);\r
142             }\r
143         }\r
144 \r
145         void Groups_OnCurrentGroups(Dictionary<UUID, Group> gr)\r
146         {\r
147             this.groups = gr;\r
148         }\r
149 \r
150         private void Application_ApplicationExit(object sender, EventArgs e)\r
151         {\r
152             config.SaveCurrentConfig();\r
153         }\r
154 \r
155         private void InitializeConfig()\r
156         {\r
157             config = new ConfigManager(this);\r
158             config.ApplyDefault();\r
159 \r
160             netcom.LoginOptions.FirstName = config.CurrentConfig.FirstName;\r
161             netcom.LoginOptions.LastName = config.CurrentConfig.LastName;\r
162             netcom.LoginOptions.Password = config.CurrentConfig.PasswordMD5;\r
163             netcom.LoginOptions.IsPasswordMD5 = true;\r
164         }\r
165 \r
166         public GridClient Client\r
167         {\r
168             get { return client; }\r
169         }\r
170 \r
171         public RadegastNetcom Netcom\r
172         {\r
173             get { return netcom; }\r
174         }\r
175 \r
176         public GridManager Grid\r
177         {\r
178             get { return grid; }\r
179         }\r
180 \r
181         public ImageCache ImageCache\r
182         {\r
183             get { return imageCache; }\r
184         }\r
185 \r
186         public StateManager State\r
187         {\r
188             get { return state; }\r
189         }\r
190 \r
191         public ConfigManager Config\r
192         {\r
193             get { return config; }\r
194         }\r
195 \r
196         public frmMain MainForm\r
197         {\r
198             get { return mainForm; }\r
199         }\r
200 \r
201         public TabsConsole TabConsole\r
202         {\r
203             get { return tabsConsole; }\r
204         }\r
205 \r
206     }\r
207 }\r