diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index f2ab174..7094213 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -45,6 +45,7 @@ using OpenSim.Framework.Servers.HttpServer; | |||
45 | using log4net; | 45 | using log4net; |
46 | using FriendInfo = OpenSim.Services.Interfaces.FriendInfo; | 46 | using FriendInfo = OpenSim.Services.Interfaces.FriendInfo; |
47 | using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; | 47 | using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; |
48 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
48 | 49 | ||
49 | namespace OpenSim.Region.CoreModules.Avatar.Friends | 50 | namespace OpenSim.Region.CoreModules.Avatar.Friends |
50 | { | 51 | { |
@@ -94,6 +95,28 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
94 | } | 95 | } |
95 | } | 96 | } |
96 | 97 | ||
98 | protected IFriendsService FriendsService | ||
99 | { | ||
100 | get | ||
101 | { | ||
102 | if (m_FriendsService == null) | ||
103 | { | ||
104 | if (m_Scenes.Count > 0) | ||
105 | m_FriendsService = m_Scenes[0].RequestModuleInterface<IFriendsService>(); | ||
106 | } | ||
107 | |||
108 | return m_FriendsService; | ||
109 | } | ||
110 | } | ||
111 | |||
112 | protected IGridService GridService | ||
113 | { | ||
114 | get | ||
115 | { | ||
116 | return m_Scenes[0].GridService; | ||
117 | } | ||
118 | } | ||
119 | |||
97 | public FriendsModule() | 120 | public FriendsModule() |
98 | : base("POST", "/friends") | 121 | : base("POST", "/friends") |
99 | { | 122 | { |
@@ -431,22 +454,66 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
431 | 454 | ||
432 | private void OnInstantMessage(IClientAPI client, GridInstantMessage im) | 455 | private void OnInstantMessage(IClientAPI client, GridInstantMessage im) |
433 | { | 456 | { |
457 | if (im.dialog == (byte)OpenMetaverse.InstantMessageDialog.FriendshipOffered) | ||
458 | { | ||
459 | // we got a friendship offer | ||
460 | UUID principalID = new UUID(im.fromAgentID); | ||
461 | UUID friendID = new UUID(im.toAgentID); | ||
462 | |||
463 | // this user wants to be friends with the other user | ||
464 | FriendsService.StoreFriend(principalID, friendID.ToString(), 1); | ||
465 | |||
466 | // Now let's ask the other user to be friends with this user | ||
467 | ForwardFriendshipOffer(principalID, friendID, im); | ||
468 | } | ||
469 | } | ||
470 | |||
471 | private void ForwardFriendshipOffer(UUID agentID, UUID friendID, GridInstantMessage im) | ||
472 | { | ||
473 | IClientAPI friendClient = LocateClientObject(friendID); | ||
474 | if (friendClient != null) | ||
475 | { | ||
476 | // the prospective friend in this sim as root agent | ||
477 | friendClient.SendInstantMessage(im); | ||
478 | // we're done | ||
479 | return; | ||
480 | } | ||
481 | |||
482 | // The prospective friend is not here [as root]. Let's forward. | ||
483 | PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { friendID.ToString() }); | ||
484 | PresenceInfo friendSession = PresenceInfo.GetOnlinePresence(friendSessions); | ||
485 | if (friendSession != null) | ||
486 | { | ||
487 | GridRegion region = GridService.GetRegionByUUID(m_Scenes[0].RegionInfo.ScopeID, friendSession.RegionID); | ||
488 | // ... | ||
489 | // m_FriendsSimConnector.FriendshipOffered(region, agentID, friemdID, im.message); | ||
490 | } | ||
434 | } | 491 | } |
435 | 492 | ||
436 | private void OnApproveFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) | 493 | private void OnApproveFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) |
437 | { | 494 | { |
495 | FriendsService.StoreFriend(agentID, friendID.ToString(), 1); | ||
496 | |||
497 | // TODO: Notify the new friend | ||
438 | } | 498 | } |
439 | 499 | ||
440 | private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) | 500 | private void OnDenyFriendRequest(IClientAPI client, UUID agentID, UUID friendID, List<UUID> callingCardFolders) |
441 | { | 501 | { |
502 | // TODO: Notify the friend-wanna-be | ||
442 | } | 503 | } |
443 | 504 | ||
444 | private void OnTerminateFriendship(IClientAPI client, UUID agentID, UUID exfriendID) | 505 | private void OnTerminateFriendship(IClientAPI client, UUID agentID, UUID exfriendID) |
445 | { | 506 | { |
507 | FriendsService.Delete(agentID, exfriendID.ToString()); | ||
508 | |||
509 | // TODO: Notify the exfriend | ||
446 | } | 510 | } |
447 | 511 | ||
448 | private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) | 512 | private void OnGrantUserRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) |
449 | { | 513 | { |
514 | FriendsService.StoreFriend(requester, target.ToString(), rights); | ||
515 | |||
516 | // TODO: Notify the friend | ||
450 | } | 517 | } |
451 | } | 518 | } |
452 | } | 519 | } |