aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Grid
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Grid')
-rw-r--r--OpenSim/Grid/MessagingServer/Main.cs4
-rw-r--r--OpenSim/Grid/MessagingServer/MessageService.cs77
-rw-r--r--OpenSim/Grid/UserServer/Main.cs29
-rw-r--r--OpenSim/Grid/UserServer/MessageServersConnector.cs93
-rw-r--r--OpenSim/Grid/UserServer/UserManager.cs47
5 files changed, 242 insertions, 8 deletions
diff --git a/OpenSim/Grid/MessagingServer/Main.cs b/OpenSim/Grid/MessagingServer/Main.cs
index 8472571..5568f73 100644
--- a/OpenSim/Grid/MessagingServer/Main.cs
+++ b/OpenSim/Grid/MessagingServer/Main.cs
@@ -88,6 +88,10 @@ namespace OpenSim.Grid.MessagingServer
88 m_httpServer.AddXmlRPCHandler("login_to_simulator", msgsvc.UserLoggedOn); 88 m_httpServer.AddXmlRPCHandler("login_to_simulator", msgsvc.UserLoggedOn);
89 m_httpServer.AddXmlRPCHandler("logout_of_simulator", msgsvc.UserLoggedOff); 89 m_httpServer.AddXmlRPCHandler("logout_of_simulator", msgsvc.UserLoggedOff);
90 m_httpServer.AddXmlRPCHandler("get_presence_info_bulk", msgsvc.GetPresenceInfoBulk); 90 m_httpServer.AddXmlRPCHandler("get_presence_info_bulk", msgsvc.GetPresenceInfoBulk);
91 m_httpServer.AddXmlRPCHandler("region_startup", msgsvc.RegionStartup);
92 m_httpServer.AddXmlRPCHandler("region_shutdown", msgsvc.RegionShutdown);
93 m_httpServer.AddXmlRPCHandler("agent_location", msgsvc.AgentLocation);
94 m_httpServer.AddXmlRPCHandler("agent_leaving", msgsvc.AgentLeaving);
91 95
92 m_httpServer.Start(); 96 m_httpServer.Start();
93 m_log.Info("[SERVER]: Userserver registration was successful"); 97 m_log.Info("[SERVER]: Userserver registration was successful");
diff --git a/OpenSim/Grid/MessagingServer/MessageService.cs b/OpenSim/Grid/MessagingServer/MessageService.cs
index 66916b6..a4e54c7 100644
--- a/OpenSim/Grid/MessagingServer/MessageService.cs
+++ b/OpenSim/Grid/MessagingServer/MessageService.cs
@@ -558,24 +558,30 @@ namespace OpenSim.Grid.MessagingServer
558 558
559 public bool deregisterWithUserServer() 559 public bool deregisterWithUserServer()
560 { 560 {
561 Hashtable UserParams = new Hashtable(); 561 Hashtable request = new Hashtable();
562
563 return SendToUserServer(request, "deregister_messageserver");
564 }
565
566 public bool SendToUserServer(Hashtable request, string method)
567 {
562 // Login / Authentication 568 // Login / Authentication
563 569
564 if (m_cfg.HttpSSL) 570 if (m_cfg.HttpSSL)
565 { 571 {
566 UserParams["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort; 572 request["uri"] = "https://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
567 } 573 }
568 else 574 else
569 { 575 {
570 UserParams["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort; 576 request["uri"] = "http://" + m_cfg.MessageServerIP + ":" + m_cfg.HttpPort;
571 } 577 }
572 578
573 UserParams["recvkey"] = m_cfg.UserRecvKey; 579 request["recvkey"] = m_cfg.UserRecvKey;
574 UserParams["sendkey"] = m_cfg.UserRecvKey; 580 request["sendkey"] = m_cfg.UserRecvKey;
575 581
576 // Package into an XMLRPC Request 582 // Package into an XMLRPC Request
577 ArrayList SendParams = new ArrayList(); 583 ArrayList SendParams = new ArrayList();
578 SendParams.Add(UserParams); 584 SendParams.Add(request);
579 585
580 bool success = true; 586 bool success = true;
581 string[] servers = m_cfg.UserServerURL.Split(' '); 587 string[] servers = m_cfg.UserServerURL.Split(' ');
@@ -585,7 +591,7 @@ namespace OpenSim.Grid.MessagingServer
585 { 591 {
586 try 592 try
587 { 593 {
588 XmlRpcRequest UserReq = new XmlRpcRequest("deregister_messageserver", SendParams); 594 XmlRpcRequest UserReq = new XmlRpcRequest(method, SendParams);
589 XmlRpcResponse UserResp = UserReq.Send(m_cfg.UserServerURL, 16000); 595 XmlRpcResponse UserResp = UserReq.Send(m_cfg.UserServerURL, 16000);
590 // Process Response 596 // Process Response
591 Hashtable UserRespData = (Hashtable)UserResp.Value; 597 Hashtable UserRespData = (Hashtable)UserResp.Value;
@@ -603,5 +609,62 @@ namespace OpenSim.Grid.MessagingServer
603 } 609 }
604 610
605 #endregion 611 #endregion
612
613 public XmlRpcResponse RegionStartup(XmlRpcRequest request)
614 {
615 Hashtable requestData = (Hashtable)request.Params[0];
616 Hashtable result = new Hashtable();
617 result["success"] = "FALSE";
618
619 if(SendToUserServer(requestData, "region_startup"))
620 result["success"] = "TRUE";
621
622 XmlRpcResponse response = new XmlRpcResponse();
623 response.Value = result;
624 return response;
625 }
626
627 public XmlRpcResponse RegionShutdown(XmlRpcRequest request)
628 {
629 Hashtable requestData = (Hashtable)request.Params[0];
630 Hashtable result = new Hashtable();
631 result["success"] = "FALSE";
632
633 if(SendToUserServer(requestData, "region_shutdown"))
634 result["success"] = "TRUE";
635
636 XmlRpcResponse response = new XmlRpcResponse();
637 response.Value = result;
638 return response;
639 }
640
641 public XmlRpcResponse AgentLocation(XmlRpcRequest request)
642 {
643 Hashtable requestData = (Hashtable)request.Params[0];
644 Hashtable result = new Hashtable();
645 result["success"] = "FALSE";
646
647 if(SendToUserServer(requestData, "agent_location"))
648 result["success"] = "TRUE";
649
650
651 XmlRpcResponse response = new XmlRpcResponse();
652 response.Value = result;
653 return response;
654 }
655
656 public XmlRpcResponse AgentLeaving(XmlRpcRequest request)
657 {
658 Hashtable requestData = (Hashtable)request.Params[0];
659 Hashtable result = new Hashtable();
660 result["success"] = "FALSE";
661
662 if(SendToUserServer(requestData, "agent_leaving"))
663 result["success"] = "TRUE";
664
665 XmlRpcResponse response = new XmlRpcResponse();
666 response.Value = result;
667 return response;
668 }
606 } 669 }
607} 670}
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
index eb47259..f894ca0 100644
--- a/OpenSim/Grid/UserServer/Main.cs
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -110,6 +110,11 @@ namespace OpenSim.Grid.UserServer
110 m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation; 110 m_loginService.OnUserLoggedInAtLocation += NotifyMessageServersUserLoggedInToLocation;
111 m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff; 111 m_userManager.OnLogOffUser += NotifyMessageServersUserLoggOff;
112 112
113 m_messagesService.OnAgentLocation += HandleAgentLocation;
114 m_messagesService.OnAgentLeaving += HandleAgentLeaving;
115 m_messagesService.OnRegionStartup += HandleRegionStartup;
116 m_messagesService.OnRegionShutdown += HandleRegionShutdown;
117
113 m_log.Info("[REGION]: Starting HTTP process"); 118 m_log.Info("[REGION]: Starting HTTP process");
114 119
115 m_httpServer = new BaseHttpServer(Cfg.HttpPort); 120 m_httpServer = new BaseHttpServer(Cfg.HttpPort);
@@ -147,6 +152,10 @@ namespace OpenSim.Grid.UserServer
147 m_httpServer.AddXmlRPCHandler("get_agent_by_uuid", m_userManager.XmlRPCGetAgentMethodUUID); 152 m_httpServer.AddXmlRPCHandler("get_agent_by_uuid", m_userManager.XmlRPCGetAgentMethodUUID);
148 m_httpServer.AddXmlRPCHandler("check_auth_session", m_userManager.XmlRPCCheckAuthSession); 153 m_httpServer.AddXmlRPCHandler("check_auth_session", m_userManager.XmlRPCCheckAuthSession);
149 m_httpServer.AddXmlRPCHandler("set_login_params", m_loginService.XmlRPCSetLoginParams); 154 m_httpServer.AddXmlRPCHandler("set_login_params", m_loginService.XmlRPCSetLoginParams);
155 m_httpServer.AddXmlRPCHandler("region_startup", m_messagesService.RegionStartup);
156 m_httpServer.AddXmlRPCHandler("region_shutdown", m_messagesService.RegionShutdown);
157 m_httpServer.AddXmlRPCHandler("agent_location", m_messagesService.AgentLocation);
158 m_httpServer.AddXmlRPCHandler("agent_leaving", m_messagesService.AgentLeaving);
150 // Message Server ---> User Server 159 // Message Server ---> User Server
151 m_httpServer.AddXmlRPCHandler("register_messageserver", m_messagesService.XmlRPCRegisterMessageServer); 160 m_httpServer.AddXmlRPCHandler("register_messageserver", m_messagesService.XmlRPCRegisterMessageServer);
152 m_httpServer.AddXmlRPCHandler("agent_change_region", m_messagesService.XmlRPCUserMovedtoRegion); 161 m_httpServer.AddXmlRPCHandler("agent_change_region", m_messagesService.XmlRPCUserMovedtoRegion);
@@ -442,5 +451,25 @@ namespace OpenSim.Grid.UserServer
442 m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX, 451 m_messagesService.TellMessageServersAboutUser(agentID, sessionID, RegionID, regionhandle, positionX,
443 positionY, positionZ, firstname, lastname); 452 positionY, positionZ, firstname, lastname);
444 } 453 }
454
455 public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle)
456 {
457 m_userManager.HandleAgentLocation(agentID, regionID, regionHandle);
458 }
459
460 public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle)
461 {
462 m_userManager.HandleAgentLeaving(agentID, regionID, regionHandle);
463 }
464
465 public void HandleRegionStartup(UUID regionID)
466 {
467 m_userManager.HandleRegionStartup(regionID);
468 }
469
470 public void HandleRegionShutdown(UUID regionID)
471 {
472 m_userManager.HandleRegionShutdown(regionID);
473 }
445 } 474 }
446} 475}
diff --git a/OpenSim/Grid/UserServer/MessageServersConnector.cs b/OpenSim/Grid/UserServer/MessageServersConnector.cs
index 61f125e..6659617 100644
--- a/OpenSim/Grid/UserServer/MessageServersConnector.cs
+++ b/OpenSim/Grid/UserServer/MessageServersConnector.cs
@@ -57,7 +57,13 @@ namespace OpenSim.Grid.UserServer
57 public float positionZ; 57 public float positionZ;
58 public string firstname; 58 public string firstname;
59 public string lastname; 59 public string lastname;
60 }; 60 }
61
62 public delegate void AgentLocationDelegate(UUID agentID, UUID regionID, ulong regionHandle);
63 public delegate void AgentLeavingDelegate(UUID agentID, UUID regionID, ulong regionHandle);
64 public delegate void RegionStartupDelegate(UUID regionID);
65 public delegate void RegionShutdownDelegate(UUID regionID);
66
61 67
62 public class MessageServersConnector 68 public class MessageServersConnector
63 { 69 {
@@ -70,6 +76,11 @@ namespace OpenSim.Grid.UserServer
70 76
71 Thread m_NotifyThread; 77 Thread m_NotifyThread;
72 78
79 public event AgentLocationDelegate OnAgentLocation;
80 public event AgentLeavingDelegate OnAgentLeaving;
81 public event RegionStartupDelegate OnRegionStartup;
82 public event RegionShutdownDelegate OnRegionShutdown;
83
73 public MessageServersConnector() 84 public MessageServersConnector()
74 { 85 {
75 MessageServers = new Dictionary<string, MessageServerInfo>(); 86 MessageServers = new Dictionary<string, MessageServerInfo>();
@@ -337,5 +348,85 @@ namespace OpenSim.Grid.UserServer
337 } 348 }
338 } 349 }
339 } 350 }
351
352 public XmlRpcResponse RegionStartup(XmlRpcRequest request)
353 {
354 Hashtable requestData = (Hashtable)request.Params[0];
355 Hashtable result = new Hashtable();
356
357 UUID regionID;
358 if (UUID.TryParse((string)requestData["RegionUUID"], out regionID))
359 {
360 if (OnRegionStartup != null)
361 OnRegionStartup(regionID);
362
363 result["responsestring"] = "TRUE";
364 }
365
366 XmlRpcResponse response = new XmlRpcResponse();
367 response.Value = result;
368 return response;
369 }
370
371 public XmlRpcResponse RegionShutdown(XmlRpcRequest request)
372 {
373 Hashtable requestData = (Hashtable)request.Params[0];
374 Hashtable result = new Hashtable();
375
376 UUID regionID;
377 if (UUID.TryParse((string)requestData["RegionUUID"], out regionID))
378 {
379 if (OnRegionShutdown != null)
380 OnRegionShutdown(regionID);
381
382 result["responsestring"] = "TRUE";
383 }
384
385 XmlRpcResponse response = new XmlRpcResponse();
386 response.Value = result;
387 return response;
388 }
389
390 public XmlRpcResponse AgentLocation(XmlRpcRequest request)
391 {
392 Hashtable requestData = (Hashtable)request.Params[0];
393 Hashtable result = new Hashtable();
394
395 UUID agentID;
396 UUID regionID;
397 ulong regionHandle;
398 if (UUID.TryParse((string)requestData["AgentID"], out agentID) && UUID.TryParse((string)requestData["RegionUUID"], out regionID) && ulong.TryParse((string)requestData["RegionHandle"], out regionHandle))
399 {
400 if (OnAgentLocation != null)
401 OnAgentLocation(agentID, regionID, regionHandle);
402
403 result["responsestring"] = "TRUE";
404 }
405
406 XmlRpcResponse response = new XmlRpcResponse();
407 response.Value = result;
408 return response;
409 }
410
411 public XmlRpcResponse AgentLeaving(XmlRpcRequest request)
412 {
413 Hashtable requestData = (Hashtable)request.Params[0];
414 Hashtable result = new Hashtable();
415
416 UUID agentID;
417 UUID regionID;
418 ulong regionHandle;
419 if (UUID.TryParse((string)requestData["AgentID"], out agentID) && UUID.TryParse((string)requestData["RegionUUID"], out regionID) && ulong.TryParse((string)requestData["RegionHandle"], out regionHandle))
420 {
421 if (OnAgentLeaving != null)
422 OnAgentLeaving(agentID, regionID, regionHandle);
423
424 result["responsestring"] = "TRUE";
425 }
426
427 XmlRpcResponse response = new XmlRpcResponse();
428 response.Value = result;
429 return response;
430 }
340 } 431 }
341} 432}
diff --git a/OpenSim/Grid/UserServer/UserManager.cs b/OpenSim/Grid/UserServer/UserManager.cs
index f7e4e3c..04510b2 100644
--- a/OpenSim/Grid/UserServer/UserManager.cs
+++ b/OpenSim/Grid/UserServer/UserManager.cs
@@ -758,5 +758,52 @@ namespace OpenSim.Grid.UserServer
758 { 758 {
759 throw new Exception("The method or operation is not implemented."); 759 throw new Exception("The method or operation is not implemented.");
760 } 760 }
761
762 public void HandleAgentLocation(UUID agentID, UUID regionID, ulong regionHandle)
763 {
764 UserProfileData userProfile = GetUserProfile(agentID);
765 if (userProfile != null)
766 {
767 userProfile.CurrentAgent.Region = regionID;
768 userProfile.CurrentAgent.Handle = regionHandle;
769 CommitAgent(ref userProfile);
770 }
771 }
772
773 public void HandleAgentLeaving(UUID agentID, UUID regionID, ulong regionHandle)
774 {
775 UserProfileData userProfile = GetUserProfile(agentID);
776 if (userProfile != null)
777 {
778 if (userProfile.CurrentAgent.Region == regionID)
779 {
780 UserAgentData userAgent = userProfile.CurrentAgent;
781 if (userAgent != null && userAgent.AgentOnline)
782 {
783 userAgent.AgentOnline = false;
784 userAgent.LogoutTime = Util.UnixTimeSinceEpoch();
785 if (regionID != UUID.Zero)
786 {
787 userAgent.Region = regionID;
788 }
789 userAgent.Handle = regionHandle;
790 userProfile.LastLogin = userAgent.LogoutTime;
791
792 CommitAgent(ref userProfile);
793 }
794 }
795 }
796 }
797
798 public void HandleRegionStartup(UUID regionID)
799 {
800 LogoutUsers(regionID);
801 }
802
803 public void HandleRegionShutdown(UUID regionID)
804 {
805 LogoutUsers(regionID);
806 }
807
761 } 808 }
762} 809}