OSDN Git Service

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