// 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); }
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); }
/// <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); }); }
/// <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); }); }
/// <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); }
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 { } }
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!"); }
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); }
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); }
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(); } }); }
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(); }
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(); } }); }
/// <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); }); } }); } }); }