diff options
Diffstat (limited to 'OpenSim/Services/PresenceService/PresenceService.cs')
-rw-r--r-- | OpenSim/Services/PresenceService/PresenceService.cs | 146 |
1 files changed, 135 insertions, 11 deletions
diff --git a/OpenSim/Services/PresenceService/PresenceService.cs b/OpenSim/Services/PresenceService/PresenceService.cs index 2157462..fc6a6e1 100644 --- a/OpenSim/Services/PresenceService/PresenceService.cs +++ b/OpenSim/Services/PresenceService/PresenceService.cs | |||
@@ -41,27 +41,151 @@ namespace OpenSim.Services.PresenceService | |||
41 | { | 41 | { |
42 | public class PresenceService : PresenceServiceBase, IPresenceService | 42 | public class PresenceService : PresenceServiceBase, IPresenceService |
43 | { | 43 | { |
44 | // private static readonly ILog m_log = | 44 | private static readonly ILog m_log = |
45 | // LogManager.GetLogger( | 45 | LogManager.GetLogger( |
46 | // MethodBase.GetCurrentMethod().DeclaringType); | 46 | MethodBase.GetCurrentMethod().DeclaringType); |
47 | 47 | ||
48 | public PresenceService(IConfigSource config) | 48 | public PresenceService(IConfigSource config) |
49 | : base(config) | 49 | : base(config) |
50 | { | 50 | { |
51 | m_log.Debug("[PRESENCE SERVICE]: Starting presence service"); | ||
51 | } | 52 | } |
52 | 53 | ||
53 | public bool Report(PresenceInfo presence) | 54 | public bool LoginAgent(string userID, UUID sessionID, |
55 | UUID secureSessionID) | ||
54 | { | 56 | { |
55 | PresenceData p = new PresenceData(); | 57 | m_Database.Prune(userID); |
56 | p.Data = new Dictionary<string, string>(); | ||
57 | 58 | ||
58 | p.UUID = presence.PrincipalID; | 59 | PresenceData[] d = m_Database.Get("UserID", userID); |
59 | p.currentRegion = presence.RegionID; | ||
60 | 60 | ||
61 | foreach (KeyValuePair<string, string> kvp in presence.Data) | 61 | PresenceData data = new PresenceData(); |
62 | p.Data[kvp.Key] = kvp.Value; | ||
63 | 62 | ||
64 | return false; | 63 | data.UserID = userID; |
64 | data.RegionID = UUID.Zero; | ||
65 | data.SessionID = sessionID; | ||
66 | data.Data["SecureSessionID"] = secureSessionID.ToString(); | ||
67 | data.Data["Online"] = "true"; | ||
68 | data.Data["Login"] = Util.UnixTimeSinceEpoch().ToString(); | ||
69 | if (d.Length > 0) | ||
70 | { | ||
71 | data.Data["HomeRegionID"] = d[0].Data["HomeRegionID"]; | ||
72 | data.Data["HomePosition"] = d[0].Data["HomePosition"]; | ||
73 | data.Data["HomeLookAt"] = d[0].Data["HomeLookAt"]; | ||
74 | } | ||
75 | |||
76 | m_Database.Store(data); | ||
77 | |||
78 | return true; | ||
79 | } | ||
80 | |||
81 | public bool LogoutAgent(UUID sessionID) | ||
82 | { | ||
83 | PresenceData data = m_Database.Get(sessionID); | ||
84 | if (data == null) | ||
85 | return false; | ||
86 | |||
87 | PresenceData[] d = m_Database.Get("UserID", data.UserID); | ||
88 | |||
89 | if (d.Length > 1) | ||
90 | { | ||
91 | m_Database.Delete("SessionID", sessionID.ToString()); | ||
92 | } | ||
93 | |||
94 | data.Data["Online"] = "false"; | ||
95 | data.Data["Logout"] = Util.UnixTimeSinceEpoch().ToString(); | ||
96 | |||
97 | m_Database.Store(data); | ||
98 | |||
99 | return true; | ||
100 | } | ||
101 | |||
102 | public bool LogoutRegionAgents(UUID regionID) | ||
103 | { | ||
104 | m_Database.LogoutRegionAgents(regionID); | ||
105 | |||
106 | return true; | ||
107 | } | ||
108 | |||
109 | |||
110 | public bool ReportAgent(UUID sessionID, UUID regionID, Vector3 position, Vector3 lookAt) | ||
111 | { | ||
112 | m_log.DebugFormat("[PRESENCE SERVICE]: ReportAgent with session {0} in region {1}", sessionID, regionID); | ||
113 | PresenceData pdata = m_Database.Get(sessionID); | ||
114 | if (pdata == null) | ||
115 | return false; | ||
116 | if (pdata.Data["Online"] == "false") | ||
117 | return false; | ||
118 | |||
119 | return m_Database.ReportAgent(sessionID, regionID, | ||
120 | position.ToString(), lookAt.ToString()); | ||
121 | } | ||
122 | |||
123 | public PresenceInfo GetAgent(UUID sessionID) | ||
124 | { | ||
125 | PresenceInfo ret = new PresenceInfo(); | ||
126 | |||
127 | PresenceData data = m_Database.Get(sessionID); | ||
128 | if (data == null) | ||
129 | return null; | ||
130 | |||
131 | ret.UserID = data.UserID; | ||
132 | ret.RegionID = data.RegionID; | ||
133 | if (data.Data.ContainsKey("Online")) | ||
134 | ret.Online = bool.Parse(data.Data["Online"]); | ||
135 | if (data.Data.ContainsKey("Login")) | ||
136 | ret.Login = Util.ToDateTime(Convert.ToInt32(data.Data["Login"])); | ||
137 | if (data.Data.ContainsKey("Logout")) | ||
138 | ret.Logout = Util.ToDateTime(Convert.ToInt32(data.Data["Logout"])); | ||
139 | if (data.Data.ContainsKey("Position")) | ||
140 | ret.Position = Vector3.Parse(data.Data["Position"]); | ||
141 | if (data.Data.ContainsKey("LookAt")) | ||
142 | ret.LookAt = Vector3.Parse(data.Data["LookAt"]); | ||
143 | if (data.Data.ContainsKey("HomeRegionID")) | ||
144 | ret.HomeRegionID = new UUID(data.Data["HomeRegionID"]); | ||
145 | if (data.Data.ContainsKey("HomePosition")) | ||
146 | ret.HomePosition = Vector3.Parse(data.Data["HomePosition"]); | ||
147 | if (data.Data.ContainsKey("HomeLookAt")) | ||
148 | ret.HomeLookAt = Vector3.Parse(data.Data["HomeLookAt"]); | ||
149 | |||
150 | return ret; | ||
151 | } | ||
152 | |||
153 | public PresenceInfo[] GetAgents(string[] userIDs) | ||
154 | { | ||
155 | List<PresenceInfo> info = new List<PresenceInfo>(); | ||
156 | |||
157 | foreach (string userIDStr in userIDs) | ||
158 | { | ||
159 | PresenceData[] data = m_Database.Get("UserID", | ||
160 | userIDStr); | ||
161 | |||
162 | foreach (PresenceData d in data) | ||
163 | { | ||
164 | PresenceInfo ret = new PresenceInfo(); | ||
165 | |||
166 | ret.UserID = d.UserID; | ||
167 | ret.RegionID = d.RegionID; | ||
168 | ret.Online = bool.Parse(d.Data["Online"]); | ||
169 | ret.Login = Util.ToDateTime(Convert.ToInt32( | ||
170 | d.Data["Login"])); | ||
171 | ret.Logout = Util.ToDateTime(Convert.ToInt32( | ||
172 | d.Data["Logout"])); | ||
173 | ret.Position = Vector3.Parse(d.Data["Position"]); | ||
174 | ret.LookAt = Vector3.Parse(d.Data["LookAt"]); | ||
175 | ret.HomeRegionID = new UUID(d.Data["HomeRegionID"]); | ||
176 | ret.HomePosition = Vector3.Parse(d.Data["HomePosition"]); | ||
177 | ret.HomeLookAt = Vector3.Parse(d.Data["HomeLookAt"]); | ||
178 | |||
179 | info.Add(ret); | ||
180 | } | ||
181 | } | ||
182 | |||
183 | return info.ToArray(); | ||
184 | } | ||
185 | |||
186 | public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt) | ||
187 | { | ||
188 | return m_Database.SetHomeLocation(userID, regionID, position, lookAt); | ||
65 | } | 189 | } |
66 | } | 190 | } |
67 | } | 191 | } |