Пример #1
0
        private GroupRequestID GetClientGroupRequestID(IClientAPI client)
        {
            if (client == null)
            {
                return new GroupRequestID();
            }

            lock (m_clientRequestIDInfo)
            {
                if (!m_clientRequestIDInfo.ContainsKey(client.AgentId))
                {
                    GroupRequestIDInfo info = new GroupRequestIDInfo();
                    info.RequestID.AgentID = client.AgentId;
                    info.RequestID.SessionID = client.SessionId;

                    //UserProfileData userProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(client.AgentId);
                    UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(client.Scene.RegionInfo.ScopeID, client.AgentId);
                    if (account == null)
                    {
                        // This should be impossible.  If I've been passed a reference to a client
                        // that client should be registered with the UserService.  So something
                        // is horribly wrong somewhere.

                        m_log.WarnFormat("[GROUPS]: Could not find a user profile for {0} / {1}", client.Name, client.AgentId);

                        // Default to local user service and hope for the best?
                        // REFACTORING PROBLEM
                        //info.RequestID.UserServiceURL = m_sceneList[0].CommsManager.NetworkServersInfo.UserURL;

                    }
                    else
                    {
                        string domain = string.Empty; //m_sceneList[0].CommsManager.NetworkServersInfo.UserURL;
                        object homeUriObj;
                        if (account.ServiceURLs.TryGetValue("HomeURI", out homeUriObj) && homeUriObj != null)
                            domain = homeUriObj.ToString();
                        // They're a local user, use this:
                        info.RequestID.UserServiceURL = domain;
                    }

                    m_clientRequestIDInfo.Add(client.AgentId, info);
                }

                m_clientRequestIDInfo[client.AgentId].LastUsedTMStamp = DateTime.Now;

                return m_clientRequestIDInfo[client.AgentId].RequestID;
            }
// Unreachable code!
//            return new GroupRequestID();
        }
        private GroupRequestID GetClientGroupRequestID(IClientAPI client)
        {
            if (client == null)
            {
                return new GroupRequestID();
            }

            lock (m_clientRequestIDInfo)
            {
                if (!m_clientRequestIDInfo.ContainsKey(client.AgentId))
                {
                    GroupRequestIDInfo info = new GroupRequestIDInfo();
                    info.RequestID.AgentID = client.AgentId;
                    info.RequestID.SessionID = client.SessionId;

                    UserProfileData userProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(client.AgentId);
                    if (userProfile == null)
                    {
                        // This should be impossible.  If I've been passed a reference to a client
                        // that client should be registered with the UserService.  So something
                        // is horribly wrong somewhere.

                        m_log.WarnFormat("[GROUPS]: Could not find a user profile for {0} / {1}", client.Name, client.AgentId);

                        // Default to local user service and hope for the best?
                        info.RequestID.UserServiceURL = m_sceneList[0].CommsManager.NetworkServersInfo.UserURL;

                    }
                    else if (userProfile is ForeignUserProfileData)
                    {
                        // They aren't from around here
                        ForeignUserProfileData fupd = (ForeignUserProfileData)userProfile;
                        info.RequestID.UserServiceURL = fupd.UserServerURI;
                    }
                    else
                    {
                        // They're a local user, use this:
                        info.RequestID.UserServiceURL = m_sceneList[0].CommsManager.NetworkServersInfo.UserURL;
                    }

                    m_clientRequestIDInfo.Add(client.AgentId, info);
                }

                m_clientRequestIDInfo[client.AgentId].LastUsedTMStamp = DateTime.Now;
            }
            return m_clientRequestIDInfo[client.AgentId].RequestID;
        }