250501 커밋

This commit is contained in:
2025-05-01 07:23:28 +09:00
parent 98bb2e3c5c
commit 23176551b7
353 changed files with 9972 additions and 6652 deletions

View File

@@ -38,7 +38,7 @@ public abstract class EntityTicker : EntityBase, ITaskTicker
}
}
public EntityTicker(EntityType entityType, EntityBase parent, Int32 onTickIntervalMilliseconds, CancellationTokenSource toCancelToken)
public EntityTicker(EntityType entityType, EntityBase parent, Int32 onTickIntervalMilliseconds, CancellationTokenSource? toCancelToken)
: base(entityType, parent)
{
m_tick_interval_milliseconds = onTickIntervalMilliseconds;

View File

@@ -5,84 +5,135 @@ using System.Text;
using System.Threading.Tasks;
using ServerCore; using ServerBase;
using ServerCore;
namespace ServerBase;
//=============================================================================================
// Result 관련 확장 함수
//
// author : kangms
//
//=============================================================================================
/*=============================================================================================
Result 관련 확장 함수
1. Result + Guard 조합 처리
public Result doFunction(string input)
{
var owner = getOwner();
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!")
ArgumentNullReferenceCheckHelper.throwIfNull(input, () => $"input is null !!! - {owner.toBasicString()}")
var result = new Result();
try
{
// 내부 로직 수행
if (input.isNullOrWhiteSpace())
{
result.setFail(ServerErrorCode.InvalidArgument, "Input is empty.");
return result;
}
// 비즈니스 로직 처리 성공
result.setSuccess("Operation completed.");
return result;
}
catch (Exception e)
{
// 예상치 못한 예외 발생시 실패 처리
err_msg = $"Exception !!!, Failed to perform, in xxx() !!! : exception:{e} - {owner.toBasicString()}";
result.setFail(ServerErrorCode.InternalError, err_msg);
return result;
}
}
2. Result 값에 따른 예외 처리
var result = server_logic.doFunction();
// 실패시, 예외가 발생 한다 !!!, (발생되기 원하는 예외타입을 작성)
result.throwIfFail(
() => $"Failed to doFunction() !!!, Details: {result.toBasicString()}",
msg => new DesiredException(msg)
);
author : kangms
=============================================================================================*/
public static class ResultHelper
{
public static bool isSuccess(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
if (true == result.ErrorCode.isSuccess())
{
return true;
}
return false;
return result.ErrorCode.isSuccess();
}
public static bool isFail(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
if (true == result.ErrorCode.isFail())
{
return true;
}
return false;
return result.ErrorCode.isFail();
}
public static void setSuccess(this Result result, string resultString = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
result.set(ServerErrorCode.Success, resultString);
}
public static void setFail(this Result result, ServerErrorCode errorCode, string resultString = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
public static void setFail(this Result result, ServerErrorCode errorCode, string resultString = "")
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
result.set(errorCode, resultString);
}
public static string getResultString(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
public static string getResultString(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
return result.ResultString;
}
public static ServerErrorCode getErrorCode(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
return result.ErrorCode;
}
public static void set(this Result result, ServerErrorCode errorCode, string resultString)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
result.ErrorCode = errorCode;
result.ResultString = resultString;
}
public static string toBasicString(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => $"result is null !!!");
public static ServerErrorCode getErrorCode(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
return result.ErrorCode;
}
public static void set(this Result result, ServerErrorCode errorCode, string resultString)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
result.ErrorCode = errorCode;
result.ResultString = resultString;
}
public static void throwIfFail( this Result result
, Func<string>? fnLog = null
, Func<string, Exception>? overrideException = null )
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
if (result.ErrorCode.isSuccess())
return;
string message = fnLog?.Invoke() ?? $"Operation failed. ErrorCode: {result.ErrorCode}, ResultString: {result.ResultString}";
if (null != overrideException)
{
throw overrideException(message);
}
throw new InvalidOperationException(message);
}
public static string toBasicString(this Result result)
{
ArgumentNullReferenceCheckHelper.throwIfNull(result, () => "Result is null !!!");
return $"ErrorInfo: errCode:{result.getErrorCode()}, errDesc:{result.getResultString()}";
}
}
}

View File

@@ -28,7 +28,7 @@ namespace ServerBase;
public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbitMqSession, IModule, IWithPacketNamespaceVerifier
{
public delegate Task FnServerMessageRecvFromConsumer(BasicDeliverEventArgs ea, IMessage message);
public FnServerMessageRecvFromConsumer? _fnServerMessageRecvFromConsumer;
public FnServerMessageRecvFromConsumer? m_fn_server_message_recv_from_consumer;
private readonly PacketReceiver m_packet_receiver;
@@ -66,7 +66,7 @@ public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbit
{
var packet_namespace = ".PacketHandler";
if (null != toCheckNamespace
if ( null != toCheckNamespace
&& true == toCheckNamespace.Contains(packet_namespace))
{
return true;
@@ -132,14 +132,14 @@ public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbit
Log.getLogger().error("rabbitMq registerRecvHandler error");
return result;
}
_fnServerMessageRecvFromConsumer = fnFromConsumer;
m_fn_server_message_recv_from_consumer = fnFromConsumer;
return base.startConsumer();
}
public async Task<bool> onRecvProtocol<T>(BasicDeliverEventArgs ea, T recvProtocol)
where T : Google.Protobuf.IMessage
where T : Google.Protobuf.IMessage
{
Log.getLogger().info($"receive:{recvProtocol.ToString()} - {toBasicString()}");
@@ -227,13 +227,13 @@ public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbit
return;
}
if(_fnServerMessageRecvFromConsumer == null)
if(m_fn_server_message_recv_from_consumer == null)
{
Log.getLogger().error("_fnServerMessageRecvFromConsumer is null");
return;
}
await _fnServerMessageRecvFromConsumer.Invoke(ea, message);
await m_fn_server_message_recv_from_consumer.Invoke(ea, message);
}
protected override void onRecvProtoMessageFromConsumer(object? sender, BasicDeliverEventArgs ea)
@@ -241,19 +241,19 @@ public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbit
}
protected virtual bool onCheckByExchangeType<T>(BasicDeliverEventArgs ea, T recvProtocol)
where T : Google.Protobuf.IMessage
where T : Google.Protobuf.IMessage
{
return true;
}
public Task<object>? SendKick( string destServer, string name, Int32 delayMS
, Action<Task<object>>? callback )
{
int reqId = nextReqId();
{
int reqId = nextReqId();
Task<object>? waitTask = null;
if (callback != null)
{
{
CancellationTokenSource cancelTokenSrc = new CancellationTokenSource(delayMS);
waitTask = registerCompletionSource(reqId, cancelTokenSrc.Token, callback);
@@ -271,18 +271,19 @@ public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbit
SendMessage(destServer, message);
return waitTask;
}
}
public void SendMessage(string to, ServerMessage message)
public void SendMessage(string to, ServerMessage message)
{
var con = getConnection();
if(null == con)
{
IConnection? con = getConnection();
if(con == null)
{
Log.getLogger().error("GetConnection return null");
return;
}
using (var channel = con.CreateModel())
{
return;
}
using (var channel = con.CreateModel())
{
Stopwatch? stopwatch = null;
var event_tid = string.Empty;
@@ -301,16 +302,16 @@ public abstract partial class RabbitMqConnector : RabbitMQConnectorBase, IRabbit
autoDelete: true,
arguments: null );
message.MessageTime = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow);
message.MessageSender = getServiceName();
message.MessageTime = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow);
message.MessageSender = getServiceName();
string messageJson = JsonFormatter.Default.Format(message);
var body = Encoding.UTF8.GetBytes(messageJson);
string messageJson = JsonFormatter.Default.Format(message);
var body = Encoding.UTF8.GetBytes(messageJson);
channel.BasicPublish( exchange: "",
routingKey: to,
basicProperties: null,
body: body );
channel.BasicPublish( exchange: "",
routingKey: to,
basicProperties: null,
body: body );
Log.getLogger().info($"send to MQS !!!, msg:{messageJson} - receiver:{to}");