server-master/srcs/_plugins/Plugin.MongoLogs/Extensions/MongoLoggerExtensions.cs

169 lines
No EOL
7.2 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Conventions;
using MongoDB.Bson.Serialization.Serializers;
using PhoenixLib.Logging;
using PhoenixLib.ServiceBus.Extensions;
using Plugin.MongoLogs.Services;
using Plugin.MongoLogs.Utils;
using Plugin.PlayerLogs;
using Plugin.PlayerLogs.Messages.Act4;
using Plugin.PlayerLogs.Messages.Bazaar;
using Plugin.PlayerLogs.Messages.Family;
using Plugin.PlayerLogs.Messages.Inventory;
using Plugin.PlayerLogs.Messages.LevelUp;
using Plugin.PlayerLogs.Messages.Mail;
using Plugin.PlayerLogs.Messages.Miniland;
using Plugin.PlayerLogs.Messages.Npc;
using Plugin.PlayerLogs.Messages.Player;
using Plugin.PlayerLogs.Messages.Quest;
using Plugin.PlayerLogs.Messages.Raid;
using Plugin.PlayerLogs.Messages.RainbowBattle;
using Plugin.PlayerLogs.Messages.Shop;
using Plugin.PlayerLogs.Messages.Upgrade;
using WingsEmu.DTOs.Items;
namespace Plugin.MongoLogs.Extensions
{
public static class MongoLoggerExtensions
{
public static void AddMongoLogs<T>(this IServiceCollection services) where T : class, IPlayerActionLogMessage
{
Log.Info($"Registering {typeof(T).Name} logs into Mongo storage...");
services.AddMessageSubscriber<T, GenericLogConsumer<T>>();
}
public static void AddMongoLogsPlugin(this IServiceCollection services)
{
// Allow serialization of plugin log entities that are passed as object through generic logging pipeline.
try
{
BsonSerializer.RegisterSerializer(new ObjectSerializer(_ => true));
}
catch
{
// serializer may already be registered by another startup path
}
var pack = new ConventionPack
{
new TypedIgnoreDefaultPropertiesConvention<ItemInstanceDTO>()
};
ConventionRegistry.Register("Ignore Default Pack", pack, t => true);
services.AddMongoLogs<LogPlayerExchangeMessage>();
services.AddMongoLogs<LogPlayerChatMessage>();
// Connection
services.AddMongoLogs<LogPlayerDisconnectedMessage>();
// Act4
services.AddMongoLogs<LogAct4PvpKillMessage>();
services.AddMongoLogs<LogAct4DungeonStartedMessage>();
services.AddMongoLogs<LogAct4FamilyDungeonWonMessage>();
// Level ups
services.AddMongoLogs<LogLevelUpCharacterMessage>();
services.AddMongoLogs<LogLevelUpNosMateMessage>();
// Family
services.AddMongoLogs<LogFamilyCreatedMessage>();
services.AddMongoLogs<LogFamilyDisbandedMessage>();
services.AddMongoLogs<LogFamilyJoinedMessage>();
services.AddMongoLogs<LogFamilyLeftMessage>();
services.AddMongoLogs<LogFamilyMessageMessage>();
services.AddMongoLogs<LogFamilyKickedMessage>();
services.AddMongoLogs<LogFamilyUpgradeBoughtMessage>();
services.AddMongoLogs<LogFamilyWarehouseItemPlacedMessage>();
services.AddMongoLogs<LogFamilyWarehouseItemWithdrawnMessage>();
// Raids
services.AddMongoLogs<LogRaidStartedMessage>();
services.AddMongoLogs<LogRaidCreatedMessage>();
services.AddMongoLogs<LogRaidAbandonedMessage>();
services.AddMongoLogs<LogRaidLeftMessage>();
services.AddMongoLogs<LogRaidJoinedMessage>();
services.AddMongoLogs<LogRaidSwitchButtonToggledMessage>();
services.AddMongoLogs<LogRaidTargetKilledMessage>();
services.AddMongoLogs<LogRaidDiedMessage>();
services.AddMongoLogs<LogRaidRewardReceivedMessage>();
services.AddMongoLogs<LogRaidRevivedMessage>();
services.AddMongoLogs<LogRaidWonMessage>();
services.AddMongoLogs<LogRaidLostMessage>();
// Rainbow Battle
services.AddMongoLogs<LogRainbowBattleWonMessage>();
services.AddMongoLogs<LogRainbowBattleLoseMessage>();
services.AddMongoLogs<LogRainbowBattleTieMessage>();
services.AddMongoLogs<LogRainbowBattleJoinMessage>();
services.AddMongoLogs<LogRainbowBattleFrozenMessage>();
// Mini-games
services.AddMongoLogs<LogMinigameRewardClaimedMessage>();
services.AddMongoLogs<LogMinigameScoreMessage>();
// Items
services.AddMongoLogs<LogItemGambledMessage>();
services.AddMongoLogs<LogItemUpgradedMessage>();
services.AddMongoLogs<LogSpUpgradedMessage>();
services.AddMongoLogs<LogItemSummedMessage>();
services.AddMongoLogs<LogShellIdentifiedMessage>();
services.AddMongoLogs<LogCellonUpgradedMessage>();
services.AddMongoLogs<LogSpPerfectedMessage>();
services.AddMongoLogs<LogBoxOpenedMessage>();
// Quests
//services.AddMongoLogs<LogQuestAddedMessage>();
services.AddMongoLogs<LogQuestAbandonedMessage>();
services.AddMongoLogs<LogQuestCompletedMessage>();
//services.AddMongoLogs<LogQuestObjectiveUpdatedMessage>();
// Shops
services.AddMongoLogs<LogShopPlayerBoughtItemMessage>();
services.AddMongoLogs<LogShopOpenedMessage>();
services.AddMongoLogs<LogShopClosedMessage>();
services.AddMongoLogs<LogShopNpcBoughtItemMessage>();
services.AddMongoLogs<LogShopNpcSoldItemMessage>();
services.AddMongoLogs<LogShopSkillBoughtMessage>();
services.AddMongoLogs<LogShopSkillSoldMessage>();
// Inventory
services.AddMongoLogs<LogInventoryPickedUpItemMessage>();
services.AddMongoLogs<LogInventoryPickedUpPlayerItemMessage>();
services.AddMongoLogs<LogInventoryItemUsedMessage>();
services.AddMongoLogs<LogInventoryItemDeletedMessage>();
// Invitations
services.AddMongoLogs<LogTradeRequestedMessage>();
services.AddMongoLogs<LogGroupInvitedMessage>();
services.AddMongoLogs<LogFamilyInvitedMessage>();
services.AddMongoLogs<LogRaidInvitedMessage>();
// Bazaar
services.AddMongoLogs<LogBazaarItemInsertedMessage>();
services.AddMongoLogs<LogBazaarItemBoughtMessage>();
services.AddMongoLogs<LogBazaarItemExpiredMessage>();
services.AddMongoLogs<LogBazaarItemWithdrawnMessage>();
// Warehouse
services.AddMongoLogs<LogWarehouseItemWithdrawnMessage>();
services.AddMongoLogs<LogWarehouseItemPlacedMessage>();
// Mails
services.AddMongoLogs<LogMailClaimedMessage>();
services.AddMongoLogs<LogMailRemovedMessage>();
services.AddMongoLogs<LogMailSentMessage>();
// Notes
services.AddMongoLogs<LogNoteSentMessage>();
// Npc
services.AddMongoLogs<LogItemProducedMessage>();
services.AddSingleton(new MongoLogsBackgroundService(MongoLogsConfiguration.FromEnv()));
services.AddSingleton<IHostedService>(provider => provider.GetService<MongoLogsBackgroundService>());
}
}
}