示例#1
0
        private static void GetInternalUserDataCallback(ServerModels.GetUserDataResult result)
        {
            string playFabId = result.PlayFabId;

            foreach (var eachUserEntry in result.Data)
                PfSharedModelEx.serverUsers[playFabId].userInternalData[eachUserEntry.Key] = eachUserEntry.Value.Value;
            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnUserDataLoaded, null, null, PfSharedControllerEx.Api.Server, false);
        }
        private static void GetUserVcCallback(ServerModels.GetUserInventoryResult getResult)
        {
            string playFabId = ((ServerModels.GetUserInventoryRequest)getResult.Request).PlayFabId;

            UserModel userModel;
            if (PfSharedModelEx.serverUsers.TryGetValue(playFabId, out userModel))
                userModel.userVC = getResult.VirtualCurrency;
            foreach (var pair in getResult.VirtualCurrency)
                PfSharedModelEx.virutalCurrencyTypes.Add(pair.Key);
        }
示例#3
0
        private static void SetTitleDataCallback(ServerModels.SetTitleDataResult result)
        {
            string dataKey = ((ServerModels.SetTitleDataRequest)result.Request).Key;
            string dataValue = ((ServerModels.SetTitleDataRequest)result.Request).Value;

            if (string.IsNullOrEmpty(dataValue))
            {
                PfSharedModelEx.titleData.Remove(dataKey);
            }
            else
            {
                PfSharedModelEx.titleData[dataKey] = dataValue;
            }

            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnTitleDataChanged, null, null, PfSharedControllerEx.Api.Server, false);
        }
示例#4
0
        private static void GetCatalogCallback(ServerModels.GetCatalogItemsResult catalogResult)
        {
            PfSharedModelEx.serverCatalog.Clear();
            foreach (var catalogItem in catalogResult.Catalog)
                PfSharedModelEx.serverCatalog[catalogItem.ItemId] = catalogItem;
            PfSharedModelEx.consumableItemIds.Clear();
            PfSharedModelEx.containerItemIds.Clear();

            foreach (var each in catalogResult.Catalog)
            {
                if (each.Container != null)
                    PfSharedModelEx.containerItemIds.Add(each.ItemId);
                else if (each.Consumable != null && each.Consumable.UsageCount > 0)
                    PfSharedModelEx.consumableItemIds.Add(each.ItemId);
            }
            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnCatalogLoaded, null, null, PfSharedControllerEx.Api.Server, false);
        }
示例#5
0
        public static void ServerCharCallBack(ServerModels.ListUsersCharactersResult charResult)
        {
            string playFabId = ((ServerModels.ListUsersCharactersRequest)charResult.Request).PlayFabId;

            UserModel userModel;
            if (!PfSharedModelEx.serverUsers.TryGetValue(playFabId, out userModel))
                return;

            CharacterModel temp;
            foreach (var character in charResult.Characters)
            {
                if (!userModel.serverCharacterModels.TryGetValue(character.CharacterId, out temp))
                    userModel.serverCharacterModels[character.CharacterId] = new Server.PfInvServerChar(playFabId, character.CharacterId, character.CharacterName);
                userModel.serverCharacterModels[character.CharacterId] = new PfInvServerChar(playFabId, character.CharacterId, character.CharacterName);
                PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnUserCharactersLoaded, playFabId, character.CharacterId, PfSharedControllerEx.Api.Server, false);
            }
        }
示例#6
0
 private static void GetInternalTitleDataCallback(ServerModels.GetTitleDataResult result)
 {
     foreach (var eachTitleEntry in result.Data)
         PfSharedModelEx.titleInternalData[eachTitleEntry.Key] = eachTitleEntry.Value;
     PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnTitleDataLoaded, null, null, PfSharedControllerEx.Api.Server, false);
 }
示例#7
0
        public void MoveToUserCallback(ServerModels.MoveItemToUserFromCharacterResult moveResult)
        {
            string playFabId = ((ServerModels.MoveItemToUserFromCharacterRequest)moveResult.Request).PlayFabId;
            string characterId = ((ServerModels.MoveItemToUserFromCharacterRequest)moveResult.Request).CharacterId;
            string movedItemInstanceId = ((ServerModels.MoveItemToUserFromCharacterRequest)moveResult.Request).ItemInstanceId;

            UserModel userModel;
            if (PfSharedModelEx.serverUsers.TryGetValue(playFabId, out userModel))
            {
                var movedItem = userModel.GetServerItem(characterId, movedItemInstanceId);
                if (movedItem != null)
                {
                    userModel.RemoveItems(characterId, new HashSet<string>() { movedItemInstanceId });
                    userModel.serverUserItems.Add(movedItem);
                }
            }

            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnInventoryChanged, playFabId, null, PfSharedControllerEx.Api.Server, false);
            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnInventoryChanged, playFabId, characterId, PfSharedControllerEx.Api.Server, false);
        }
示例#8
0
 public void GetInventoryCallback(ServerModels.GetCharacterInventoryResult getResult)
 {
     PfSharedControllerEx.sb.Length = 0;
     for (int i = 0; i < getResult.Inventory.Count; i++)
     {
         if (i != 0)
             PfSharedControllerEx.sb.Append(", ");
         PfSharedControllerEx.sb.Append(getResult.Inventory[i].DisplayName);
     }
     inventoryDisplay = PfSharedControllerEx.sb.ToString();
     inventory = getResult.Inventory;
 }
示例#9
0
        public void GrantCharacterItemCallback(ServerModels.GrantItemsToCharacterResult grantResult)
        {
            // Merge the items we received with the items we know we have
            //UserModel userModel;
            //if (PfSharedModelEx.serverUsers.TryGetValue(playFabId, out userModel))
            //    userModel.serverUserItems.AddRange(grantResult.ItemGrantResults); // TODO: Type mismatch makes this too complicated for now

            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnInventoryChanged, playFabId, characterId, PfSharedControllerEx.Api.Server, true);
        }
 private void GetServerLbCallback(ServerModels.GetLeaderboardResult result)
 {
     if (result.Leaderboard.Count > 0)
         lastReceivedMessage = "Get Server Leaderboard Successful";
     else
         lastReceivedMessage = "Get Server Leaderboard, empty";
 }
示例#11
0
        private static void UpdateUserDataCallback(ServerModels.UpdateUserDataResult result)
        {
            string playFabId = ((ServerModels.UpdateUserDataRequest)result.Request).PlayFabId;
            Dictionary<string, string> dataUpdated = ((ServerModels.UpdateUserDataRequest)result.Request).Data;

            foreach (var dataPair in dataUpdated)
            {
                if (string.IsNullOrEmpty(dataPair.Value))
                    PfSharedModelEx.serverUsers[playFabId].userData.Remove(dataPair.Key);
                else
                    PfSharedModelEx.serverUsers[playFabId].userData[dataPair.Key] = dataPair.Value;
            }

            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnUserDataChanged, playFabId, null, PfSharedControllerEx.Api.Server, false);
        }
示例#12
0
        public EngineServerHost(IEngine engine, ILogger logger, IBridge gameBridge)
        {
            _engine = engine ?? throw new ArgumentNullException(nameof(engine));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            CommandContext = _engine.CommandSystem.CreateContext("ServerContext");

            _ipname = CommandContext.RegisterVariable(new VariableInfo("ip")
                                                      .WithHelpInfo("The IP address to use for server hosts")
                                                      .WithValue(NetConstants.LocalHost));

            _hostport = CommandContext.RegisterVariable(new VariableInfo("hostport")
                                                        .WithHelpInfo("The port to use for server hosts")
                                                        .WithValue(0));

            _defport = CommandContext.RegisterVariable(new VariableInfo("port")
                                                       .WithHelpInfo("The default port to use for server hosts")
                                                       .WithValue(NetConstants.DefaultServerPort));

            _sv_timeout = CommandContext.RegisterVariable(new VariableInfo("sv_timeout")
                                                          .WithHelpInfo("Maximum time to wait before timing out client connections")
                                                          .WithValue(60));

            _net_sv_log_messages = CommandContext.RegisterVariable(new VariableInfo("net_sv_log_messages")
                                                                   .WithHelpInfo("Whether to log received client-to-server network messages")
                                                                   .WithValue(false)
                                                                   .WithBooleanFilter()
                                                                   .WithChangeHandler((ref VariableChangeEvent @event) =>
            {
                if (_netServer != null)
                {
                    _netServer.TraceMessageLogging = @event.Boolean;
                }
            }));

            _maxPlayers = CommandContext.RegisterVariable(new VariableInfo("maxplayers")
                                                          .WithHelpInfo("The maximum number of players that can connect to this server")
                                                          .WithValue(_engine.IsDedicatedServer ? 6 : NetConstants.MinClients)
                                                          .WithDelegateFilter((ref string _, ref float __) =>
            {
                if (Active)
                {
                    _logger.Information("maxplayers cannot be changed while a server is running.");
                }

                return(!Active);
            })
                                                          .WithNumberFilter()
                                                          .WithMinMaxFilter(NetConstants.MinClients, NetConstants.MaxClients));

            if (_engine.CommandLine.TryGetValue("-port", out var portValue))
            {
                _hostport.String = portValue;
            }

            if (_engine.CommandLine.TryGetValue("-maxplayers", out var maxPlayersValue))
            {
                _maxPlayers.String = maxPlayersValue;
            }

            _serverModels = new ServerModels(_engine.ModelManager, Framework.FallbackModelName);

            LoadGameServer(gameBridge);

            var objectListTypeRegistryBuilder = new TypeRegistryBuilder();

            _serverNetworking.RegisterObjectListTypes(objectListTypeRegistryBuilder);

            _objectListTypeRegistry = objectListTypeRegistryBuilder.BuildRegistry();

            var dataSetBuilder = new BinaryDataSetBuilder();

            RegisterNetworkBinaryData(dataSetBuilder);

            _binaryDataDescriptorSet = dataSetBuilder.BuildTransmissionSet();
        }
示例#13
0
        private static void SubtractCharVcCallback(ServerModels.ModifyCharacterVirtualCurrencyResult modifyResult)
        {
            string playFabId = ((ServerModels.SubtractCharacterVirtualCurrencyRequest)modifyResult.Request).PlayFabId;
            string characterId = ((ServerModels.SubtractCharacterVirtualCurrencyRequest)modifyResult.Request).CharacterId;

            UserModel userModel;
            if (PfSharedModelEx.serverUsers.TryGetValue(playFabId, out userModel))
                userModel.SetVcBalance(characterId, modifyResult.VirtualCurrency, modifyResult.Balance);

            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnVcChanged, playFabId, characterId, PfSharedControllerEx.Api.Client | PfSharedControllerEx.Api.Server, false);
        }
示例#14
0
        private static void ModifyUserVcCallback(ServerModels.ModifyUserVirtualCurrencyResult modifyResult)
        {
            UserModel userModel;
            if (PfSharedModelEx.serverUsers.TryGetValue(modifyResult.PlayFabId, out userModel))
                userModel.SetVcBalance(null, modifyResult.VirtualCurrency, modifyResult.Balance);

            PfSharedControllerEx.PostEventMessage(PfSharedControllerEx.EventType.OnVcChanged, modifyResult.PlayFabId, null, PfSharedControllerEx.Api.Client | PfSharedControllerEx.Api.Server, false);
        }
 private void GrantCharCallback(ServerModels.GrantCharacterToUserResult result)
 {
     lastReceivedMessage = "Grant Char Successful";
 }
示例#16
0
 private void GetServerLbCallback(ServerModels.GetLeaderboardResult result)
 {
     var testContext = (UUnitTestContext)result.CustomData;
     testContext.True(result.Leaderboard.Count > 0, "Server leaderboard should not be empty");
     testContext.EndTest(UUnitFinishState.PASSED, null);
 }
示例#17
0
        public static void GetUserItemsCallback(ServerModels.GetUserInventoryResult getResult)
        {
            string playFabId = ((ServerModels.GetUserInventoryRequest)getResult.Request).PlayFabId;
            PfSharedControllerEx.sb.Length = 0;
            for (int i = 0; i < getResult.Inventory.Count; i++)
            {
                if (i != 0)
                    PfSharedControllerEx.sb.Append(", ");
                PfSharedControllerEx.sb.Append(getResult.Inventory[i].DisplayName);
            }

            UserModel userModel;
            if (PfSharedModelEx.serverUsers.TryGetValue(playFabId, out userModel))
            {
                userModel.userInvDisplay = PfSharedControllerEx.sb.ToString();
                userModel.serverUserItems = getResult.Inventory;
            }
        }
 private void GetCharsCallback(ServerModels.ListUsersCharactersResult result)
 {
     lastReceivedMessage = "Get Chars Successful";
     foreach (var eachCharacter in result.Characters)
         if (eachCharacter.CharacterName == CHAR_NAME)
             targetCharacter = eachCharacter;
 }