using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections.Concurrent; using System.Collections; using Amazon.DynamoDBv2.DocumentModel; using Axion.Collections.Concurrent; using Newtonsoft.Json.Linq; using Microsoft.Extensions.Configuration; using ServerCore; using ServerBase; using MODULE_ID = System.UInt32; using SESSION_ID = System.Int32; using META_ID = System.UInt32; using ENTITY_GUID = System.String; using ACCOUNT_ID = System.String; using OWNER_GUID = System.String; using USER_GUID = System.String; using CHARACTER_GUID = System.String; using ITEM_GUID = System.String; namespace ServerBase; //============================================================================================= // Module 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IModule { ModuleContext getModuleContext(); Task startModule(); Task stopModule(); string toBasicString(); } //============================================================================================= // ConfigParam 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IConfigParam { Result tryReadFromJsonOrDefault(JObject jObject); string toBasicString(); } //============================================================================================= // IConfiguration 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithConfiguration { Result mergeConfiguration(IConfiguration configuration); string toBasicString(); } //============================================================================================= // Actor 관련 인터페이스 : Root 인터페이스 // // author : kangms // //============================================================================================= public interface IActor { string toBasicString(); } //============================================================================================= // LogActor 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithLogActor { ILogActor toLogActor(); } //============================================================================================= // 함수 파라메터 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithParam { string toBasicString(); } //============================================================================================= // Result 반환 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithResult { Result Result { get; set; } bool isResultOnly(); } //============================================================================================= // Result + TResultValue 반환 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithResultValue : IWithResult { TResultValue ValueOfResult { get; } } //============================================================================================= // Task Serializer 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithTaskSerializer { TaskSerializer getTaskSerializer(); } //============================================================================================= // Owner 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithEntityOwner { EntityBase getOwner(); } //============================================================================================= // Tick 관련 제어 인터페이스 // // author : kangms // //============================================================================================= public interface ITicker { void onTick(); } //============================================================================================= // Task 기반 Tick 관련 제어 인터페이스 // // author : kangms // //============================================================================================= public interface ITaskTicker { Task onCreateTask(); Task onTaskTick(); } //============================================================================================= // 초기화 관련 제어 인터페이스 // // author : kangms // //============================================================================================= public interface IInitializer { Task onInit(); } public interface IWithInitializers { void appendInitializer(IInitializer initializer); List tryConvertInitializes() where T : class; } //============================================================================================= // Network 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IPacketCommand { string getCommandKey(); string toBasicString(); } public interface IWithPacketNamespaceVerifier { bool isValidPacketNamespace(string toCheckNamespace, IPacketCommand packetCommand); } public interface ISession { string toBasicString(); } public interface IProudNetSession : ISession { Nettention.Proud.IRmiHost getRmiHost(); } public interface IRabbitMqSession : ISession { } //============================================================================================= // HelperFunction 관련 제어 인터페이스 // // author : kangms // //============================================================================================= public interface IHelperFunction { IEntityWithSession getOwner(); } //============================================================================================= // Entity와 연결된 Session 인터페이스 // // author : kangms // //============================================================================================= public interface IEntityWithSession : ISession { Nettention.Proud.HostID getHostId(); ListenSessionBase? getListenSessionBase(); void setListenSessionBase(ListenSessionBase listenSessionBase); SESSION_ID getSessionId(); string getAccountId(); string getUserGuid(); string getUserNickname(); string toSummaryString(); } //============================================================================================= // AttribBase의 Wrapper Class 인터페이스 // // author : kangms // //============================================================================================= public interface IAttribWrapper { bool onCopyToDynamoDbEntry(ref Amazon.DynamoDBv2.DocumentModel.Document doc); bool onCopyFromDynamoDbEntry(Amazon.DynamoDBv2.DocumentModel.Document doc); bool onFillupJsonStringToJObject(ref JObject jobject); Type getAttribType(); AttribBase getAttribBase(); } //============================================================================================= // DynamoDbDoc 데이터를 Cache & EntityAttribute & BackupDoc 복사해주는 인터페이스 // // author : kangms // //============================================================================================= public interface ICopyCacheFromDoc { bool copyCacheFromDoc(DynamoDbDocBase customDoc); } public interface ICopyEntityAttributeFromDoc { bool copyEntityAttributeFromDoc(DynamoDbDocBase customDoc); } public interface ICopyBackupDocFromDoc { bool copyBackupDocFromDoc(DynamoDbDocBase customDoc); } //============================================================================================= // Cache 데이터를 특정 데이터 타입으로 복사해주는 인터페이스 // // author : kangms // //============================================================================================= public interface ICopyDocFromCache { bool copyDocFromCache(CacheBase cacheBase); } public interface ICopyEntityAttributeFromCache { bool copyEntityAttributeFromCache(CacheBase cacheBase); } //============================================================================================= // EntityAttribute 데이터를 특정 데이터 타입으로 복사해주는 인터페이스 // // author : kangms // //============================================================================================= public interface ICopyDocFromEntityAttribute { bool copyDocFromEntityAttribute(EntityAttributeBase entityAttributeBase); } public interface ICopyCacheFromEntityAttribute { bool copyCacheFromEntityAttribute(EntityAttributeBase entityAttributeBase); } // DataCopyHelper.copyEntityAttributeTransactorFromEntityAttribute() 호출하고 있지 않다. // TransactionRunner가 IEntityAttributeTransactor.cloneFromOriginEntityAttribute() 호출하여 복사 하고 있다. // IEntityAttributeTransactor.cloneFromOriginEntityAttribute() 호출시 // Origin의 속성값과 비교하여, 초기값이 아니고, 값이 다른 경우만 복사해 주는 로직으로 수정 한다. - kangms public interface ICopyEntityAttributeTransactorFromEntityAttribute { bool copyEntityAttributeTransactorFromEntityAttribute(EntityAttributeBase entityAttributeBase); } //============================================================================================= // EntityAttributeTransactor 데이터를 특정 데이터 타입으로 복사해주는 인터페이스 // // author : kangms // //============================================================================================= public interface ICopyDocFromEntityAttributeTransactor { bool copyDocFromEntityAttributeTransactor(IEntityAttributeTransactor entityAttributeTransactor); } public interface ICopyEntityAttributeFromEntityAttributeTransactor { bool copyEntityAttributeFromEntityAttributeTransactor(IEntityAttributeTransactor entityAttributeTransactor); } //============================================================================================= // Cache 정보 관리를 위한 인터페이스 // // author : kangms // //============================================================================================= public interface ICache { string toBasicString(); } //============================================================================================= // Event Task를 위한 인터페이스 // // author : kangms // //============================================================================================= public interface IEventTask { void setCompleted(); bool isCompleted(); Task onTriggerEffect(); string toBasicString(); } //============================================================================================= // Rule를 위한 인터페이스 // // author : kangms // //============================================================================================= public interface IRule : IInitializer { Task configure(); } //============================================================================================= // Slots 관련 인터페이스 // // author : kangms // //============================================================================================= public interface ISlots { bool onInitSlots(int slotMaxCount); ICollection getSlots(); List getEntityBases(); string toBasicString(); } //============================================================================================= // SlotsWithType 관련 인터페이스 // // author : kangms // //============================================================================================= public interface ISlotsWithType : ISlots where TSlotType : notnull { ServerErrorCode onIsEquipable(TSlotType targetSlot); ServerErrorCode onTryEquip(TSlotType targetSlot); ServerErrorCode onTryEquipWithEntityBase(TSlotType targetSlot, EntityBase entityBase); ServerErrorCode onIsUnequipable(TSlotType targetSlot); ServerErrorCode onTryUnequip(TSlotType targetSlot); ServerErrorCode onTryUnequipWithEntityBase(TSlotType targetSlot, out EntityBase? unequipedEntityBase); EntityBase? onFindEntityBase(TSlotType targetSlot); } //============================================================================================= // EntityAttribute 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IEntityAttribute { EntityBase getOwner(); EntityAttributeBase? getEntityAttributeBase(); void onClear(); string toBasicString(); } //============================================================================================= // EntityDbTransact 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IEntityDbTransact { EntityBase getOwner(); IEntityDbTransactAttribute? getEntityDbTransactAttribute(); void onClear(); string toBasicString(); } public interface IEntityDbTransactAttribute { EntityBase getOwner(); void onClear(); string toBasicString(); } //============================================================================================= // IEntityAttributeTransactor 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IEntityAttributeTransactor { bool cloneFromOriginEntityAttribute(EntityAttributeBase fromOriginEntityAttribute); EntityAttributeBase? getOriginEntityAttribute(); EntityAttributeBase? getClonedEntityAttribute(); bool isReadOnly(); Task<(Result, DynamoDbDocBase?)> makeDocBase(); ENTITY_GUID getEntityGuid(); EntityBase getOwner(); string toBasicString(); } //============================================================================================= // EntityDeltaRecorder 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IEntityDeltaRecorder { object getEntityDeltaType(); } //============================================================================================= // MergeWithEntityAttribute 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IMergeWithEntityAttribute { // DBQWriteToAttributeAllWithTransactionRunner.onQueryResponseCommit()에서 호출 한다. Result onMerge(EntityAttributeBase otherEntityAttribute); } //============================================================================================= // DeleteWithEntityAttribute 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IDeleteWithEntityAttribute { Result onDelete(); } //============================================================================================= // WithCommonResultFiller 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithCommonResultFiller { void onFillCommonResult(EntityCommonResult commonResult, EntityAttributeBase origin, QueryBatchBase? queryBatch = null); } //============================================================================================= // MergeWithInventory 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IMergeWithInventory { Task onMerge(List reservedSlotOnInvens, TransactionRunner transactionRunner); } //============================================================================================= // Notify 관련 인터페이스 // // author : chan // //============================================================================================= public interface IInitNotifyPacket { void InitNotifyMessage(); } //============================================================================================= // Logic 관련 인터페이스 // // author : kangms // //============================================================================================= public interface ILogic { } //============================================================================================= // 서버 수준의 Logic 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IServerLogic : ILogic, IActor { string getServerType(); string getServerName(); ServerConfig getServerConfig(); IModule getModule(MODULE_ID moduleId); Result registerEntityTicker(EntityTicker entityTicker); } //============================================================================================= // 서버 주요 지표 관련 인터페이스 // // author : kangms // //============================================================================================= public interface IWithServerMetrics { Task setupServerMetrics(); bool isSetupCompleted(); ServerMetricsCacheRequest getServerMetricsCacheRequest(); Task syncServerInfoToCache(); string toBasicString(); } //============================================================================================= // 관련 인터페이스 // // author : chan // //============================================================================================= public interface IRemoteTransaction { Task callRemoteChargeAIPoint(double beamDelta); Task callNotifyCaliumEvent(string eventName, CurrencyType currencyType, double delta); }