示例#1
0
        // Retrieve all the config values we need to start up
        public void SetConfiguration(ConfigManagerClient configManager)
        {
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("SetConfiguration start", LogLevel.Info);
            mIpAddress = configManager.GetString("state_server_location", "127.0.0.1");
            mStageName = configManager.GetString("instance_name", "DEV");


            mWebEntryPointId = configManager.GetString("web_entry_point", FunnelGlobals.FASHION_MINIGAME);

            mAssetBaseUrl = configManager.GetString("asset_base_url", ProtocolUtility.GetAssetDataPath());
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("asssetBaseUrl " + mAssetBaseUrl, LogLevel.Info);

            mWebServicesBaseUrl = configManager.GetString("web_services_base_url", "http://services.hangoutdev.net");
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("web_services_base_url " + mWebServicesBaseUrl, LogLevel.Info);

            mCampaignId = configManager.GetString("campaign_id", "NO_VALUE_FROM_JS");
            mReferrerId = configManager.GetString("inviter_id", "NO_VALUE_FROM_JS");
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("campaign_id " + mCampaignId, LogLevel.Info);

            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("inviter_id " + mReferrerId, LogLevel.Info);
            mSelectedAvatar = new AvatarId((uint)configManager.GetInt("selected_avatar", 1));
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("mSelectedAvatar " + mSelectedAvatar, LogLevel.Info);

            mFacebookAccountId = configManager.GetLong("fb_account_id", 0);
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("mFacebookAccountId " + mFacebookAccountId, LogLevel.Info);
            mSessionKey = configManager.GetString("fb_session_key", "");
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("mSessionKey " + mSessionKey, LogLevel.Info);
            mNickName  = configManager.GetString("fake_nickname", "");
            mFirstName = configManager.GetString("fake_first_name", "");
            mLastName  = configManager.GetString("fake_last_name", "");
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("fake_nickname " + mNickName, LogLevel.Info);
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("fake_first_name " + mFirstName, LogLevel.Info);
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("fake_last_name " + mLastName, LogLevel.Info);
            GameFacade.Instance.RetrieveMediator <LoggerMediator>().Logger.Log("SetConfiguration finished", LogLevel.Info);
        }
示例#2
0
        private object Parse(System.Type toType, string fromString)
        {
            object result = null;

            if (toType == typeof(float))
            {
                result = float.Parse(fromString);
            }
            else if (toType == typeof(int))
            {
                result = int.Parse(fromString);
            }
            else if (toType == typeof(string))
            {
                result = fromString;
            }
            else if (toType == typeof(Color))
            {
                result = ColorUtility.HexToColor(fromString);
            }
            else if (toType == typeof(long))
            {
                result = long.Parse(fromString);
            }
            else if (toType == typeof(AvatarId))
            {
                result = new AvatarId(uint.Parse(fromString));
            }
            else
            {
                throw new Exception("There is no Parse function available for a " + toType.Name + " tweakable.");
            }

            return(result);
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="serverAccount"></param>
        /// <param name="defaultAvatarId"></param>
        /// <param name="createAvatarForUserServiceCallback"></param>
        public static void CreateAvatarForUser(ServerAccount serverAccount, AvatarId defaultAvatarId, Action <XmlDocument> createAvatarForUserServiceCallback)
        {
            mLogger.DebugFormat("CreateAvatarForUser called accountId={0} defaultAvatarId={1}", serverAccount.AccountId, defaultAvatarId);
            WebServiceRequest getAvatarList = new WebServiceRequest(StateServerConfig.WebServicesBaseUrl, "Avatars", "CreateAvatar");

            getAvatarList.AddParam(kAccountId, serverAccount.AccountId.ToString());
            getAvatarList.AddParam(kDefaultAvatarId, defaultAvatarId.ToString());
            getAvatarList.GetWebResponseAsync(delegate(XmlDocument xmlResponse)
            {
                mLogger.DebugFormat("CreateAvatarForUser responded accountId={0} defaultAvatarId={1}", serverAccount.AccountId, defaultAvatarId);
                createAvatarForUserServiceCallback(xmlResponse);
            });
        }
示例#4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="avatarId"></param>
        /// <param name="avatarDna"></param>
        /// <param name="updateAvatarDnaServiceFinishedCallback"></param>
        public static void UpdateAvatarDna(AvatarId avatarId, XmlDocument avatarDna, System.Action <XmlDocument> updateAvatarDnaServiceFinishedCallback)
        {
            mLogger.DebugFormat("UpdateAvatarDna called avatarId={0}", avatarId);
            WebServiceRequest updateAvatarDna = new WebServiceRequest(StateServerConfig.WebServicesBaseUrl, "Avatars", "UpdateAvatarDNA");

            updateAvatarDna.AddParam(kAvatarId, avatarId.ToString());
            updateAvatarDna.AddParam(kAvatarDna, avatarDna.OuterXml);
            updateAvatarDna.GetWebResponseAsync(delegate(XmlDocument xmlResponse)
            {
                mLogger.DebugFormat("UpdateAvatarDna responded avatarId={0}", avatarId);
                updateAvatarDnaServiceFinishedCallback(xmlResponse);
            });
        }
示例#5
0
        /// <summary>
        /// Handle login request from client
        /// </summary>
        /// <param name="loginMessage"></param>
        private void HandleLoginRequest(Message loginMessage, Guid senderId)
        {
            Guid     sessionId    = senderId;
            string   fbAccountId  = CheckType.TryAssignType <string>(loginMessage.Data[0]);
            string   fbSessionKey = CheckType.TryAssignType <string>(loginMessage.Data[1]);
            string   nickName     = CheckType.TryAssignType <string>(loginMessage.Data[2]);
            string   firstName    = CheckType.TryAssignType <string>(loginMessage.Data[3]);
            string   lastName     = CheckType.TryAssignType <string>(loginMessage.Data[4]);
            string   campaignId   = CheckType.TryAssignType <string>(loginMessage.Data[5]);
            string   referrerId   = CheckType.TryAssignType <string>(loginMessage.Data[6]);
            AvatarId avatarId     = CheckType.TryAssignType <AvatarId>(loginMessage.Data[7]);

            Stopwatch loginTimer = new Stopwatch();

            loginTimer.Elapsed.Add(loginMessage.TimeSinceMessageWasCreated);
            loginTimer.Start();

            // TODO: Move the ipaddress handling within the extension
            string userIpAddress = mServerStateMachine.ServerMessageProcessor.ServerReflector.GetClientIPAddress(senderId);

            mLogger.Info(String.Format("HandleLoginRequest | sessionId={0} | fbAcctId={1} | fbSessionKey={2} | nickname={3} | firstname={4} | lastname={5} | avatarId={6} | ip={7}",
                                       sessionId, fbAccountId, fbSessionKey, nickName, firstName, lastName, avatarId.ToString(), userIpAddress));

            Action <ServerAccount> getAccountForUserCallback = delegate(ServerAccount serverAccount)
            {
                mLogger.Debug("GetAccountForUserCallback");

                try
                {
                    if (serverAccount != null)
                    {
                        mServerStateMachine.ProcessUserLogin(sessionId, serverAccount, fbSessionKey, avatarId, loginTimer);
                    }
                    else
                    {
                        mLogger.Warn("LoginFailed|sessionId=" + sessionId);
                        Message loginFailMessage = new Message(MessageType.Connect, MessageSubType.InvalidLogin, new List <object>());
                        mServerStateMachine.SendMessageToReflector(loginFailMessage, sessionId);
                    }
                }
                catch (System.Exception ex)
                {
                    System.Diagnostics.StackTrace currentStackTrace = new System.Diagnostics.StackTrace();
                    mLogger.Error("Got an exception in getAccountForUserCallback", ex);
                }
            };

            mServerStateMachine.UsersManager.GetAccountForUser(fbAccountId, fbSessionKey, nickName, firstName, lastName, userIpAddress, campaignId, referrerId, getAccountForUserCallback);
        }
示例#6
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = Id.GetHashCode();
         hashCode = (hashCode * 397) ^ (AvatarId != null ? AvatarId.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Mention != null ? Mention.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Username != null ? Username.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Discriminator != null ? Discriminator.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ CreatedAt.GetHashCode();
         hashCode = (hashCode * 397) ^ IsBot.GetHashCode();
         hashCode = (hashCode * 397) ^ (Presence != null ? Presence.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (DirectMessageChannel != null ? DirectMessageChannel.GetHashCode() : 0);
         return(hashCode);
     }
 }
        public ServerDistributedAvatar(DistributedObjectId doId, AvatarId avatarId, Guid localSessionId, string nickname, XmlDocument itemIdXml, ServerAccount serverAccount, ServerObjectRepository serverObjectRepository, ServerAssetRepository serverAssetRepository)
            : base(serverObjectRepository, doId)
        {
            mCurrentTelemetryData  = new List <object>();
            mObjectType            = DistributedObjectTypes.Avatar;
            mAvatarId              = avatarId;
            mAvatarName            = nickname;
            mServerAccount         = serverAccount;
            mServerAssetRepository = serverAssetRepository;

            mObjectData.Add(mObjectType);
            mObjectData.Add("Avatar/Avatar Rig");
            //UNCOMMENT THIS TO SEE WHICH SESSION THIS AVATAR BELONGS TO
            //Console.Write("creating server distributed avatar data with session id: " + localSessionId);
            mObjectData.Add(localSessionId);
            mObjectData.Add(itemIdXml.InnerXml);
            mObjectData.Add(mAvatarName);
        }
        public DeveloperSettings()
        {
            try
            {
                XmlDocument tweaks = new XmlDocument();
                tweaks.Load(SETTINGS_PATH);
                string mockFacebookAccountId = tweaks.SelectSingleNode("/Test/Tweakable[@name='Mock Facebook AccountId']").Attributes["value"].InnerText;
                mMockFacebookSessionKey = tweaks.SelectSingleNode("/Test/Tweakable[@name='Mock Facebook SessionKey']").Attributes["value"].InnerText;
                mMockFacebookNickName   = tweaks.SelectSingleNode("/Test/Tweakable[@name='Mock Facebook NickName']").Attributes["value"].InnerText;
                mMockFirstName          = tweaks.SelectSingleNode("/Test/Tweakable[@name='Mock FirstName']").Attributes["value"].InnerText;
                mMockLastName           = tweaks.SelectSingleNode("/Test/Tweakable[@name='Mock LastName']").Attributes["value"].InnerText;
                mCampaignId             = tweaks.SelectSingleNode("/Test/Tweakable[@name='CampaignId']").Attributes["value"].InnerText;
                mReferrerId             = tweaks.SelectSingleNode("/Test/Tweakable[@name='ReferrerId']").Attributes["value"].InnerText;

                mMockFacebookAccountId = Convert.ToInt64(mockFacebookAccountId);
                mMockDefaultAvatarId   = new AvatarId(1);
            }
            catch { }
        }
示例#9
0
        public AvatarManagerLoadTesting(ServerStateMachine serverStateMachine, ServerAccount serverAccount)
        {
            Console.WriteLine("Start Rooms Tests...");

            TestAvatarManager testAvatarManager = new TestAvatarManager(serverStateMachine);

            ZoneId   zoneId          = new ZoneId(0);
            AvatarId defaultAvatarId = new AvatarId(0);

            LoadTestCreateNewAvatar(testAvatarManager, zoneId, serverAccount, defaultAvatarId, delegate()
            {
                LoadTestGetAvatar(testAvatarManager, zoneId, serverAccount, defaultAvatarId, delegate()
                {
                    //LoadTestJoinRoom(testAvatarManager, delegate()
                    //{
                    //});
                });
            });


            //Console.WriteLine("Finished All Rooms Tests!");
        }
示例#10
0
        public void CreateNewAvatarForAccount(Guid sessionId, ZoneId zoneId, ServerAccount serverAccount, AvatarId defaultAvatarId, System.Action <bool> createAvatarFinishedCallback)
        {
            Action <XmlDocument> createAvatarServiceCallback = delegate(XmlDocument xmlResponse)
            {
                XmlNode avatarXmlNode = xmlResponse.SelectSingleNode("Avatars/Avatar");

                if (avatarXmlNode != null)
                {
                    Metrics.Log(LogGlobals.CATEGORY_ACCOUNT, LogGlobals.EVENT_AVATAR_CREATED, LogGlobals.AVATAR_ID_LABEL, defaultAvatarId.ToString(), serverAccount.AccountId.ToString());
                    GetAvatarServiceResponse(avatarXmlNode, serverAccount.Nickname, sessionId, zoneId, createAvatarFinishedCallback);
                }
                else
                {
                    StateServerAssert.Assert(new System.Exception("Error: Could not create avatar: " + xmlResponse.InnerText));
                    createAvatarFinishedCallback(false);
                }
            };

            AvatarManagerServiceAPI.CreateAvatarForUser(serverAccount, defaultAvatarId, createAvatarServiceCallback);
        }
示例#11
0
        public void GetAvatar(Guid sessionId, ZoneId zoneId, ServerAccount serverAccount, AvatarId defaultAvatarId, System.Action <bool> getAvatarFinishedCallback)
        {
            Action <XmlDocument> getAvatarCallback = delegate(XmlDocument xmlResponse)
            {
                XmlNode avatarXmlNode = xmlResponse.SelectSingleNode("Avatars/Avatar");

                //if no avatars were found for this account, create one!
                if (avatarXmlNode == null)
                {
                    CreateNewAvatarForAccount(sessionId, zoneId, serverAccount, defaultAvatarId, getAvatarFinishedCallback);
                }
                //otherwise, just grab the first avatar out of the avatar returned list
                else
                {
                    GetAvatarServiceResponse(avatarXmlNode, serverAccount.Nickname, sessionId, zoneId, getAvatarFinishedCallback);
                }
            };

            AvatarManagerServiceAPI.GetAvatarForUser(serverAccount, getAvatarCallback);
        }
示例#12
0
        private void LoadTestCreateNewAvatarCallback(TestAvatarManager testAvatarManager, ZoneId zoneId, ServerAccount serverAccount, AvatarId defaultAvatarId, int avatarIndex, System.IO.TextWriter tw, System.Action createdAvatarsDoneCallback)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            testAvatarManager.CreateNewAvatarForAccount(Guid.Empty, zoneId, serverAccount, defaultAvatarId,
                                                        delegate(bool room)
            {
                stopWatch.Stop();
                tw.WriteLine("It took " + stopWatch.Elapsed.ToString() + " to create avatar#: " + avatarIndex);
                Console.WriteLine("It took " + stopWatch.Elapsed.ToString() + " to create avatar#: " + avatarIndex);
                mNumberOfAvatarsCreated++;
                mAvatarsCreated.Add(avatarIndex);

                if (mNumberOfAvatarsToCreate == mNumberOfAvatarsCreated)
                {
                    createdAvatarsDoneCallback();
                }
            });
        }
示例#13
0
        private void LoadTestCreateNewAvatar(TestAvatarManager testAvatarManager, ZoneId zoneId, ServerAccount serverAccount, AvatarId defaultAvatarId, System.Action finishedCreatingAllAvatars)
        {
            // create a writer and open the file
            System.IO.TextWriter tw = new System.IO.StreamWriter("C:/TestCreateNewAvatarLoadTest.txt");

            Console.WriteLine("Creating " + mNumberOfAvatarsToCreate + " avatars...");
            tw.WriteLine("Creating " + mNumberOfAvatarsToCreate + " avatars...");

            Stopwatch runEntireTestStopWatch = new Stopwatch();

            runEntireTestStopWatch.Start();

            System.Action createdAvatarsDoneCallback = delegate()
            {
                runEntireTestStopWatch.Stop();
                tw.WriteLine("Total time it took to create " + mNumberOfAvatarsToCreate + " of avatars: " + runEntireTestStopWatch.Elapsed.ToString());
                Console.WriteLine("Total time it took to create " + mNumberOfAvatarsToCreate + " of avatars: " + runEntireTestStopWatch.Elapsed.ToString());

                // close the stream
                tw.Close();
                finishedCreatingAllAvatars();
            };

            BackgroundWorker bgWorker = new BackgroundWorker();

            bgWorker.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs args)
            {
                for (int i = 0; i < mNumberOfAvatarsToCreate; ++i)
                {
                    LoadTestCreateNewAvatarCallback(testAvatarManager, zoneId, serverAccount, defaultAvatarId, i, tw, createdAvatarsDoneCallback);
                    System.Threading.Thread.Sleep((int)(mAvatarsPerSecond * 1000));
                }
            });

            bgWorker.RunWorkerAsync();
        }
示例#14
0
        private void LoadTestGetAvatarCallback(TestAvatarManager testAvatarManager, ZoneId zoneId, ServerAccount serverAccount, AvatarId defaultAvatarId, int index, System.IO.TextWriter tw, System.Action gotAvatarsDoneCallback)
        {
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            testAvatarManager.GetAvatar(Guid.Empty, zoneId, serverAccount, defaultAvatarId,
                                        delegate(bool gotAvatar)
            {
                stopWatch.Stop();
                tw.WriteLine("It took " + stopWatch.Elapsed.ToString() + " to get avatar#: " + index);
                Console.WriteLine("It took " + stopWatch.Elapsed.ToString() + " to get avatar#: " + index);
                mNumberOfAvatarGotten++;

                if (mNumberOfAvatarsToCreate == mNumberOfAvatarGotten)
                {
                    gotAvatarsDoneCallback();
                }
            });
        }
示例#15
0
        /// <summary>
        /// Called by ConnectionHandler on successful login
        /// </summary>
        /// <param name="sessionId"></param>
        /// <param name="userAccount"></param>
        /// <param name="facebookSessionKey"></param>
        /// <param name="defaultAvatarId"></param>
        public void ProcessUserLogin(Guid sessionId, ServerAccount userAccount, string facebookSessionKey, AvatarId defaultAvatarId, Stopwatch loginTimer)
        {
            mSessionManager.AddSession(sessionId, userAccount);
            BossServerAPI.RegisterNewSession(userAccount.AccountId, sessionId.ToString(), "1", ZoneId.LimboZone.ToString(), mStateServerId, delegate(XmlDocument xmlDocument) { });
            BossServerAPI.UpdateStateServer(mStateServerId, mServerMessageProcessor.ServerReflector.GetNumConnections(), "1", delegate(XmlDocument xmlDocument) { });

            mAvatarManager.GetAvatar(sessionId, ZoneId.LimboZone, userAccount, defaultAvatarId, delegate(bool successfullyGotAvatar)
            {
                //send an error message to the client if we can't get or create an avatar
                if (successfullyGotAvatar == false)
                {
                    LoginError(sessionId, ErrorIndex.CannotGetOrCreateAvatar, MessageSubType.UserLoginGetOrCreateAvatarError);
                }
                else
                {
                    // We got all the required data for the avatar.   Send a login success message.
                    // Check for the room and get the facebook friends in the background, as these calls take too long and aren't required to let the user continue.
                    LoginSuccess(sessionId, loginTimer);

                    // Check if a user has a default room, and create a room for the user if it doesn't exist
                    mRoomManager.GetOrCreateDefaultRoomForUser(sessionId, userAccount, delegate(IServerDistributedRoom room)
                    {
                        if (room == null)
                        {
                            //send an error message to the client if we can't get or create a room
                            LoginError(sessionId, ErrorIndex.CannotGetOrCreateRoom, MessageSubType.UserLoginGetOrCreateRoomError);
                        }
                        else
                        {
                            // Get facebook friends, and cache it on the account.  We have to do this now before the session id for facebook expires
                            mFriendsManager.GetAllFacebookFriendsForUser(sessionId, userAccount.FacebookAccountId, facebookSessionKey, delegate(List <FacebookFriendInfo> friendInfos)
                            {
                                userAccount.AddFacebookFriends(friendInfos);
                            });
                        }
                    });
                }
            });
        }