diff options
Diffstat (limited to 'OpenSim/Grid')
-rw-r--r-- | OpenSim/Grid/MessagingServer/Main.cs | 4 | ||||
-rw-r--r-- | OpenSim/Grid/MessagingServer/MessageService.cs | 77 | ||||
-rw-r--r-- | OpenSim/Grid/UserServer/Main.cs | 29 | ||||
-rw-r--r-- | OpenSim/Grid/UserServer/MessageServersConnector.cs | 93 | ||||
-rw-r--r-- | OpenSim/Grid/UserServer/UserManager.cs | 47 |
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 | } |