Пример #1
0
        private void GetAvatarServiceResponse(XmlNode avatarXmlNode, string nickname, Guid sessionId, ZoneId zoneId, Action <bool> gotAvatarServiceResponse)
        {
            List <ItemId> itemIds = null;
            AvatarId      avatarId;

            try
            {
                if (AvatarXmlUtil.GetAvatarInfoFromAvatarXmlNode(avatarXmlNode, out avatarId, out itemIds))
                {
                    Dna savedDna = mServerAssetRepository.GetDna(itemIds);

                    // Create an updated dna by starting with the reference dna and updating it with the savedDna
                    GetReferenceAvatar(delegate(Dna referenceAvatarDna)
                    {
                        Dna avatarDna = new Dna(mReferenceAvatarDna);
                        avatarDna.UpdateDna(savedDna);
                        // TODO?  If UpdateDna overwrites something or fills in missing data we should save the dna back to the db

                        // Get xml from updated avatar dna
                        XmlDocument dnaXml = mServerAssetRepository.GetXmlDna(avatarDna.GetItemIdList());

                        DistributedObjectId distributedObjectId = mDistributedObjectIdManager.GetNewId();

                        ServerAccount serverAccount = mServerStateMachine.SessionManager.GetServerAccountFromSessionId(sessionId);
                        ServerDistributedAvatar serverDistributedAvatar = new ServerDistributedAvatar(distributedObjectId, avatarId, sessionId, nickname, dnaXml, serverAccount, mServerObjectRepository, mServerAssetRepository);
                        //register object with object repository
                        mServerObjectRepository.AddObjectToSessionId(sessionId, serverDistributedAvatar);
                        //register object with session manager
                        mServerEngine.ProcessZoneChange(serverDistributedAvatar, zoneId);
                        gotAvatarServiceResponse(true);
                    });
                }
                else
                {
                    gotAvatarServiceResponse(false);
                }
            }
            catch (System.Exception ex)
            {
                StateServerAssert.Assert(ex);
                gotAvatarServiceResponse(false);
            }
        }