diff options
Diffstat (limited to 'OpenSim.RegionServer/OpenSimMain.cs')
-rw-r--r-- | OpenSim.RegionServer/OpenSimMain.cs | 77 |
1 files changed, 26 insertions, 51 deletions
diff --git a/OpenSim.RegionServer/OpenSimMain.cs b/OpenSim.RegionServer/OpenSimMain.cs index f004f91..74b9e44 100644 --- a/OpenSim.RegionServer/OpenSimMain.cs +++ b/OpenSim.RegionServer/OpenSimMain.cs | |||
@@ -53,16 +53,15 @@ namespace OpenSim | |||
53 | 53 | ||
54 | public class OpenSimMain : OpenSimNetworkHandler, conscmd_callback | 54 | public class OpenSimMain : OpenSimNetworkHandler, conscmd_callback |
55 | { | 55 | { |
56 | private SimConfig Cfg; | ||
56 | private PhysicsManager physManager; | 57 | private PhysicsManager physManager; |
57 | private World LocalWorld; | ||
58 | private Grid GridServers; | 58 | private Grid GridServers; |
59 | private SimConfig Cfg; | 59 | private BaseHttpServer _httpServer; |
60 | //private SimCAPSHTTPServer HttpServer; | 60 | private PacketServer _packetServer; |
61 | private BaseHttpServer HttpServer; | 61 | private World LocalWorld; |
62 | private AssetCache AssetCache; | 62 | private AssetCache AssetCache; |
63 | private InventoryCache InventoryCache; | 63 | private InventoryCache InventoryCache; |
64 | //public Dictionary<EndPoint, SimClient> ClientThreads = new Dictionary<EndPoint, SimClient>(); | 64 | //private Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>(); |
65 | private Dictionary<uint, SimClient> ClientThreads = new Dictionary<uint, SimClient>(); | ||
66 | private Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>(); | 65 | private Dictionary<EndPoint, uint> clientCircuits = new Dictionary<EndPoint, uint>(); |
67 | private DateTime startuptime; | 66 | private DateTime startuptime; |
68 | 67 | ||
@@ -125,13 +124,18 @@ namespace OpenSim | |||
125 | m_console.WriteLine("Main.cs:Startup() - Contacting gridserver"); | 124 | m_console.WriteLine("Main.cs:Startup() - Contacting gridserver"); |
126 | Cfg.LoadFromGrid(); | 125 | Cfg.LoadFromGrid(); |
127 | 126 | ||
127 | PacketServer packetServer = new PacketServer(this); | ||
128 | |||
128 | m_console.WriteLine("Main.cs:Startup() - We are " + Cfg.RegionName + " at " + Cfg.RegionLocX.ToString() + "," + Cfg.RegionLocY.ToString()); | 129 | m_console.WriteLine("Main.cs:Startup() - We are " + Cfg.RegionName + " at " + Cfg.RegionLocX.ToString() + "," + Cfg.RegionLocY.ToString()); |
129 | m_console.WriteLine("Initialising world"); | 130 | m_console.WriteLine("Initialising world"); |
130 | LocalWorld = new World(ClientThreads, Cfg.RegionHandle, Cfg.RegionName, Cfg); | 131 | LocalWorld = new World(this._packetServer.ClientThreads, Cfg.RegionHandle, Cfg.RegionName, Cfg); |
131 | LocalWorld.LandMap = Cfg.LoadWorld(); | 132 | LocalWorld.LandMap = Cfg.LoadWorld(); |
132 | LocalWorld.InventoryCache = InventoryCache; | 133 | LocalWorld.InventoryCache = InventoryCache; |
133 | LocalWorld.AssetCache = AssetCache; | 134 | LocalWorld.AssetCache = AssetCache; |
134 | 135 | ||
136 | this._packetServer.LocalWorld = LocalWorld; | ||
137 | this._packetServer.RegisterClientPacketHandlers(); | ||
138 | |||
135 | this.physManager = new OpenSim.Physics.Manager.PhysicsManager(); | 139 | this.physManager = new OpenSim.Physics.Manager.PhysicsManager(); |
136 | this.physManager.LoadPlugins(); | 140 | this.physManager.LoadPlugins(); |
137 | 141 | ||
@@ -152,16 +156,14 @@ namespace OpenSim | |||
152 | AssetCache.LoadDefaultTextureSet(); | 156 | AssetCache.LoadDefaultTextureSet(); |
153 | } | 157 | } |
154 | 158 | ||
155 | RegisterClientPacketHandlers(); | ||
156 | |||
157 | m_console.WriteLine("Main.cs:Startup() - Initialising HTTP server"); | 159 | m_console.WriteLine("Main.cs:Startup() - Initialising HTTP server"); |
158 | // HttpServer = new SimCAPSHTTPServer(GridServers.GridServer, Cfg.IPListenPort); | 160 | // HttpServer = new SimCAPSHTTPServer(GridServers.GridServer, Cfg.IPListenPort); |
159 | HttpServer = new BaseHttpServer(Cfg.IPListenPort); | 161 | _httpServer = new BaseHttpServer(Cfg.IPListenPort); |
160 | 162 | ||
161 | if (gridServer.GetName() == "Remote") | 163 | if (gridServer.GetName() == "Remote") |
162 | { | 164 | { |
163 | //we are in Grid mode so set a XmlRpc handler to handle "expect_user" calls from the user server | 165 | //we are in Grid mode so set a XmlRpc handler to handle "expect_user" calls from the user server |
164 | HttpServer.AddXmlRPCHandler("expect_user", | 166 | _httpServer.AddXmlRPCHandler("expect_user", |
165 | delegate(XmlRpcRequest request) | 167 | delegate(XmlRpcRequest request) |
166 | { | 168 | { |
167 | Hashtable requestData = (Hashtable)request.Params[0]; | 169 | Hashtable requestData = (Hashtable)request.Params[0]; |
@@ -179,7 +181,6 @@ namespace OpenSim | |||
179 | }); | 181 | }); |
180 | } | 182 | } |
181 | 183 | ||
182 | |||
183 | LoginServer loginServer = null; | 184 | LoginServer loginServer = null; |
184 | LoginServer adminLoginServer = null; | 185 | LoginServer adminLoginServer = null; |
185 | 186 | ||
@@ -195,20 +196,20 @@ namespace OpenSim | |||
195 | this.GridServers.UserServer = loginServer; | 196 | this.GridServers.UserServer = loginServer; |
196 | adminLoginServer = loginServer; | 197 | adminLoginServer = loginServer; |
197 | 198 | ||
198 | HttpServer.AddXmlRPCHandler("login_to_simulator", loginServer.LocalUserManager.XmlRpcLoginMethod); | 199 | _httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.LocalUserManager.XmlRpcLoginMethod); |
199 | } | 200 | } |
200 | else | 201 | else |
201 | { | 202 | { |
202 | //sandbox mode with loginserver not using accounts | 203 | //sandbox mode with loginserver not using accounts |
203 | HttpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod); | 204 | _httpServer.AddXmlRPCHandler("login_to_simulator", loginServer.XmlRpcLoginMethod); |
204 | } | 205 | } |
205 | } | 206 | } |
206 | 207 | ||
207 | AdminWebFront adminWebFront = new AdminWebFront("Admin", LocalWorld, InventoryCache, adminLoginServer); | 208 | AdminWebFront adminWebFront = new AdminWebFront("Admin", LocalWorld, InventoryCache, adminLoginServer); |
208 | adminWebFront.LoadMethods( HttpServer ); | 209 | adminWebFront.LoadMethods( _httpServer ); |
209 | 210 | ||
210 | m_console.WriteLine("Main.cs:Startup() - Starting HTTP server"); | 211 | m_console.WriteLine("Main.cs:Startup() - Starting HTTP server"); |
211 | HttpServer.Start(); | 212 | _httpServer.Start(); |
212 | 213 | ||
213 | MainServerListener(); | 214 | MainServerListener(); |
214 | 215 | ||
@@ -260,19 +261,20 @@ namespace OpenSim | |||
260 | // do we already have a circuit for this endpoint | 261 | // do we already have a circuit for this endpoint |
261 | if (this.clientCircuits.ContainsKey(epSender)) | 262 | if (this.clientCircuits.ContainsKey(epSender)) |
262 | { | 263 | { |
263 | ClientThreads[this.clientCircuits[epSender]].InPacket(packet); | 264 | //ClientThreads[this.clientCircuits[epSender]].InPacket(packet); |
265 | this._packetServer.ClientInPacket(this.clientCircuits[epSender], packet); | ||
264 | } | 266 | } |
265 | else if (packet.Type == PacketType.UseCircuitCode) | 267 | else if (packet.Type == PacketType.UseCircuitCode) |
266 | { // new client | 268 | { // new client |
267 | UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet; | 269 | UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet; |
268 | this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code); | 270 | this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code); |
269 | SimClient newuser = new SimClient(epSender, useCircuit, LocalWorld, ClientThreads, AssetCache, GridServers.GridServer, this, InventoryCache, m_sandbox); | 271 | SimClient newuser = new SimClient(epSender, useCircuit, LocalWorld, _packetServer.ClientThreads, AssetCache, GridServers.GridServer, this, InventoryCache, m_sandbox); |
270 | if ((this.GridServers.UserServer != null) && (user_accounts)) | 272 | if ((this.GridServers.UserServer != null) && (user_accounts)) |
271 | { | 273 | { |
272 | newuser.UserServer = this.GridServers.UserServer; | 274 | newuser.UserServer = this.GridServers.UserServer; |
273 | } | 275 | } |
274 | //OpenSimRoot.Instance.ClientThreads.Add(epSender, newuser); | 276 | //OpenSimRoot.Instance.ClientThreads.Add(epSender, newuser); |
275 | ClientThreads.Add(useCircuit.CircuitCode.Code, newuser); | 277 | this._packetServer.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser); |
276 | } | 278 | } |
277 | else | 279 | else |
278 | { // invalid client | 280 | { // invalid client |
@@ -301,6 +303,11 @@ namespace OpenSim | |||
301 | 303 | ||
302 | } | 304 | } |
303 | 305 | ||
306 | public void RegisterPacketServer(PacketServer server) | ||
307 | { | ||
308 | this._packetServer = server; | ||
309 | } | ||
310 | |||
304 | public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)//EndPoint packetSender) | 311 | public virtual void SendPacketTo(byte[] buffer, int size, SocketFlags flags, uint circuitcode)//EndPoint packetSender) |
305 | { | 312 | { |
306 | // find the endpoint for this circuit | 313 | // find the endpoint for this circuit |
@@ -396,38 +403,6 @@ namespace OpenSim | |||
396 | break; | 403 | break; |
397 | } | 404 | } |
398 | } | 405 | } |
399 | |||
400 | protected virtual void RegisterClientPacketHandlers() | ||
401 | { | ||
402 | SimClient.AddPacketHandler(PacketType.ModifyLand, LocalWorld.ModifyTerrain); | ||
403 | SimClient.AddPacketHandler(PacketType.ChatFromViewer, LocalWorld.SimChat); | ||
404 | SimClient.AddPacketHandler(PacketType.RezObject, LocalWorld.RezObject); | ||
405 | SimClient.AddPacketHandler(PacketType.DeRezObject, LocalWorld.DeRezObject); | ||
406 | SimClient.AddPacketHandler(PacketType.UUIDNameRequest, this.RequestUUIDName); | ||
407 | } | ||
408 | |||
409 | #region Client Packet Handlers | ||
410 | |||
411 | public bool RequestUUIDName(SimClient simClient, Packet packet) | ||
412 | { | ||
413 | System.Text.Encoding enc = System.Text.Encoding.ASCII; | ||
414 | Console.WriteLine(packet.ToString()); | ||
415 | UUIDNameRequestPacket nameRequest = (UUIDNameRequestPacket)packet; | ||
416 | UUIDNameReplyPacket nameReply = new UUIDNameReplyPacket(); | ||
417 | nameReply.UUIDNameBlock = new UUIDNameReplyPacket.UUIDNameBlockBlock[nameRequest.UUIDNameBlock.Length]; | ||
418 | |||
419 | for (int i = 0; i < nameRequest.UUIDNameBlock.Length; i++) | ||
420 | { | ||
421 | nameReply.UUIDNameBlock[i] = new UUIDNameReplyPacket.UUIDNameBlockBlock(); | ||
422 | nameReply.UUIDNameBlock[i].ID = nameRequest.UUIDNameBlock[i].ID; | ||
423 | nameReply.UUIDNameBlock[i].FirstName = enc.GetBytes("Who\0"); //for now send any name | ||
424 | nameReply.UUIDNameBlock[i].LastName = enc.GetBytes("Knows\0"); //in future need to look it up | ||
425 | } | ||
426 | simClient.OutPacket(nameReply); | ||
427 | return true; | ||
428 | } | ||
429 | |||
430 | #endregion | ||
431 | } | 406 | } |
432 | 407 | ||
433 | 408 | ||