250501 커밋
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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()}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user