초기커밋
This commit is contained in:
126
GameServer/Contents/Quest/QuestMetaBase/QuestMetaManager.cs
Normal file
126
GameServer/Contents/Quest/QuestMetaBase/QuestMetaManager.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ServerCore; using ServerBase;
|
||||
using ServerCommon;
|
||||
using UGQDatabase.Models;
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class QuestMetaManager : Singleton<QuestMetaManager>
|
||||
{
|
||||
IQuestMeta m_system_quest_meta;
|
||||
IQuestMeta m_ugq_live_quest_meta;
|
||||
IQuestMeta m_ugq_test_quest_meta;
|
||||
public QuestMetaManager()
|
||||
{
|
||||
m_system_quest_meta = new QuestSystemMeta();
|
||||
m_ugq_live_quest_meta = new QuestUgqLiveMeta();
|
||||
m_ugq_test_quest_meta = new QuestUgqTestMeta();
|
||||
}
|
||||
|
||||
//system quest일때 사용
|
||||
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(UInt32 questId)
|
||||
{
|
||||
return await m_system_quest_meta.getQuestMetaInfo(null, questId, 0);
|
||||
}
|
||||
|
||||
//시스템 퀘스트 인지 아닌지 잘 모를때 사용
|
||||
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(Player player, UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
(var result, IQuestMeta i_quest_meta) = await getIUgqMeta(questId, questRevision);
|
||||
return await i_quest_meta.getQuestMetaInfo(player, questId, questRevision);
|
||||
}
|
||||
|
||||
//Ugq 퀘스트를 명시적으로 호출할때 사용
|
||||
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(Player player, UInt32 questId, UInt32 questRevision, QuestContentState contentState)
|
||||
{
|
||||
(var result, IQuestMeta i_quest_meta) = getIUgqMeta(questRevision, contentState);
|
||||
return await i_quest_meta.getQuestMetaInfo(player, questId, questRevision);
|
||||
}
|
||||
|
||||
//Ugq 퀘스트를 명시적으로 호출할때 사용
|
||||
public async Task<(Result, QuestMetaAllBaseInfo)> getQuestMeta(Player player, UInt32 questId, UInt32 questRevision, UgqStateType UgqStateState)
|
||||
{
|
||||
(var result, IQuestMeta i_quest_meta) = getIUgqMeta(questRevision, UgqStateState);
|
||||
return await i_quest_meta.getQuestMetaInfo(player, questId, questRevision);
|
||||
}
|
||||
|
||||
|
||||
private (Result, IQuestMeta) getIUgqMeta(UInt32 questRevision, QuestContentState contentState)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
if (questRevision == 0)
|
||||
{
|
||||
return (result, m_system_quest_meta);
|
||||
}
|
||||
|
||||
switch (contentState)
|
||||
{
|
||||
case QuestContentState.Live:
|
||||
return (result, m_ugq_live_quest_meta);
|
||||
case QuestContentState.Test:
|
||||
return (result, m_ugq_test_quest_meta);
|
||||
default:
|
||||
var err_msg = $"Not Support QuestContentState : {contentState}";
|
||||
result.setFail(ServerErrorCode.MetaInfoException, err_msg);
|
||||
return (result, null!);
|
||||
}
|
||||
}
|
||||
|
||||
private (Result, IQuestMeta) getIUgqMeta(UInt32 questRevision, UgqStateType ugqQuestType)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
if (questRevision == 0)
|
||||
{
|
||||
return (result, m_system_quest_meta);
|
||||
}
|
||||
|
||||
switch (ugqQuestType)
|
||||
{
|
||||
case UgqStateType.Live:
|
||||
return (result, m_ugq_live_quest_meta);
|
||||
case UgqStateType.Test:
|
||||
return (result, m_ugq_test_quest_meta);
|
||||
default:
|
||||
var err_msg = $"Not Support ugqQuestType : {ugqQuestType}";
|
||||
result.setFail(ServerErrorCode.MetaInfoException, err_msg);
|
||||
return (result, null!);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<(Result, IQuestMeta)> getIUgqMeta(UInt32 questId, UInt32 questRevision)
|
||||
{
|
||||
var result = new Result();
|
||||
if(questRevision == 0)
|
||||
{
|
||||
return (result, m_system_quest_meta);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Live 상태가 많을 것으로 생각해서 많은것 먼저조회 해서 가져 오도록 하자.
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var ugq_api_manager = server_logic.GetUqgApiManager();
|
||||
|
||||
(result, var simple_game_quest_data) = await ugq_api_manager.getUgqQuestSimpleInfo(questId, questRevision, QuestContentState.Live);
|
||||
if (result.isSuccess() && simple_game_quest_data is not null)
|
||||
return (result, m_ugq_live_quest_meta);
|
||||
|
||||
(result, simple_game_quest_data) = await ugq_api_manager.getUgqQuestSimpleInfo(questId, questRevision, QuestContentState.Test);
|
||||
if (result.isSuccess() && simple_game_quest_data is not null)
|
||||
return (result, m_ugq_test_quest_meta);
|
||||
|
||||
//여기까지 오면 에러...
|
||||
var err_msg = $"Not Exist QuestUgqMetaInfo QuestID : {questId} - QuestRevision : {questRevision}";
|
||||
result.setFail(ServerErrorCode.MetaInfoException, err_msg);
|
||||
Log.getLogger().error(result.toBasicString());
|
||||
return (result, null!);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user