OSDN Git Service

* Added wireframe preview with PrimWorshop
[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 = true;\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             client.Settings.LOGIN_TIMEOUT = 120 * 1000;\r
80             client.Settings.SIMULATOR_TIMEOUT = 120 * 1000;\r
81 \r
82             netcom = new RadegastNetcom(client);\r
83 \r
84             imageCache = new ImageCache();\r
85             state = new StateManager(this);\r
86             InitializeConfig();\r
87 \r
88             mainForm = new frmMain(this);\r
89             mainForm.InitializeControls();\r
90             tabsConsole = mainForm.TabConsole;\r
91 \r
92             Application.ApplicationExit += new EventHandler(Application_ApplicationExit);\r
93             groups = new Dictionary<UUID, Group>();\r
94          \r
95             client.Groups.OnCurrentGroups += new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
96             client.Groups.OnGroupLeft += new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
97             client.Groups.OnGroupDropped += new GroupManager.GroupDroppedCallback(Groups_OnGroupDropped);\r
98             client.Groups.OnGroupJoined += new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
99             client.Groups.OnGroupProfile += new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
100             client.Avatars.OnAvatarNames += new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
101         }\r
102 \r
103         public void CleanUp()\r
104         {\r
105             if (client != null)\r
106             {\r
107                 client.Groups.OnCurrentGroups -= new GroupManager.CurrentGroupsCallback(Groups_OnCurrentGroups);\r
108                 client.Groups.OnGroupLeft -= new GroupManager.GroupLeftCallback(Groups_OnGroupLeft);\r
109                 client.Groups.OnGroupDropped -= new GroupManager.GroupDroppedCallback(Groups_OnGroupDropped);\r
110                 client.Groups.OnGroupJoined -= new GroupManager.GroupJoinedCallback(Groups_OnGroupJoined);\r
111                 client.Groups.OnGroupProfile -= new GroupManager.GroupProfileCallback(Groups_OnGroupProfile);\r
112                 client.Avatars.OnAvatarNames -= new AvatarManager.AvatarNamesCallback(Avatars_OnAvatarNames);\r
113             }\r
114 \r
115             if (MonoRuntime)\r
116             {\r
117                 Environment.Exit(0);\r
118             }\r
119 \r
120         }\r
121 \r
122         void Avatars_OnAvatarNames(Dictionary<UUID, string> names)\r
123         {\r
124             lock (nameCache)\r
125             {\r
126                 foreach (KeyValuePair<UUID, string> av in names)\r
127                 {\r
128                     if (OnAvatarName != null) try { OnAvatarName(av.Key, av.Value); }\r
129                         catch (Exception) { };\r
130 \r
131                     if (!nameCache.ContainsKey(av.Key))\r
132                     {\r
133                         nameCache.Add(av.Key, av.Value);\r
134                     }\r
135                 }\r
136             }\r
137         }\r
138 \r
139         public string getAvatarName(UUID key)\r
140         {\r
141             if (nameCache.ContainsKey(key))\r
142             {\r
143                 return nameCache[key];\r
144             }\r
145             else\r
146             {\r
147                 client.Avatars.RequestAvatarName(key);\r
148                 return "Loading...";\r
149             }\r
150         }\r
151 \r
152         void Groups_OnGroupProfile(Group group)\r
153         {\r
154             if (groups.ContainsKey(group.ID))\r
155             {\r
156                 groups[group.ID] = group;\r
157             }\r
158         }\r
159 \r
160         void Groups_OnGroupJoined(UUID groupID, bool success)\r
161         {\r
162             if (success && !groups.ContainsKey(groupID))\r
163             {\r
164                 groups.Add(groupID, new Group());\r
165                 client.Groups.RequestGroupProfile(groupID);\r
166             }\r
167         }\r
168 \r
169         void Groups_OnGroupLeft(UUID groupID, bool success)\r
170         {\r
171             if (groups.ContainsKey(groupID))\r
172             {\r
173                 groups.Remove(groupID);\r
174             }\r
175         }\r
176 \r
177         void Groups_OnGroupDropped(UUID groupID)\r
178         {\r
179             if (groups.ContainsKey(groupID))\r
180             {\r
181                 groups.Remove(groupID);\r
182             }\r
183         }\r
184 \r
185         void Groups_OnCurrentGroups(Dictionary<UUID, Group> gr)\r
186         {\r
187             this.groups = gr;\r
188         }\r
189 \r
190         private void Application_ApplicationExit(object sender, EventArgs e)\r
191         {\r
192             config.SaveCurrentConfig();\r
193         }\r
194 \r
195         private void InitializeConfig()\r
196         {\r
197             config = new ConfigManager(this);\r
198             config.ApplyDefault();\r
199 \r
200             netcom.LoginOptions.FirstName = config.CurrentConfig.FirstName;\r
201             netcom.LoginOptions.LastName = config.CurrentConfig.LastName;\r
202             netcom.LoginOptions.Password = config.CurrentConfig.PasswordMD5;\r
203             netcom.LoginOptions.IsPasswordMD5 = true;\r
204         }\r
205 \r
206         public GridClient Client\r
207         {\r
208             get { return client; }\r
209         }\r
210 \r
211         public RadegastNetcom Netcom\r
212         {\r
213             get { return netcom; }\r
214         }\r
215 \r
216         public ImageCache ImageCache\r
217         {\r
218             get { return imageCache; }\r
219         }\r
220 \r
221         public StateManager State\r
222         {\r
223             get { return state; }\r
224         }\r
225 \r
226         public ConfigManager Config\r
227         {\r
228             get { return config; }\r
229         }\r
230 \r
231         public frmMain MainForm\r
232         {\r
233             get { return mainForm; }\r
234         }\r
235 \r
236         public TabsConsole TabConsole\r
237         {\r
238             get { return tabsConsole; }\r
239         }\r
240     }\r
241 }\r