登录和输入控件
This commit is contained in:
@@ -55,6 +55,7 @@ namespace NBC.Network.Interface
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
await Run(session, (T) message);
|
||||
}
|
||||
catch (Exception e)
|
||||
|
||||
@@ -274,67 +274,6 @@ namespace NBC.Network.Interface
|
||||
messageHandler.Handle(session, rpcId, protocolCode, message).Coroutine();
|
||||
}
|
||||
|
||||
// 如果编译符号FANTASY_NET存在,定义处理路由消息的方法
|
||||
#if FANTASY_NET
|
||||
/// <summary>
|
||||
/// 处理路由消息,将消息分发给相应的路由消息处理器。
|
||||
/// </summary>
|
||||
/// <param name="session">会话对象</param>
|
||||
/// <param name="type">消息类型</param>
|
||||
/// <param name="entity">实体对象</param>
|
||||
/// <param name="message">消息对象</param>
|
||||
/// <param name="rpcId">RPC标识</param>
|
||||
public async FTask RouteMessageHandler(Session session, Type type, Entity entity, object message, uint rpcId)
|
||||
{
|
||||
if (!_routeMessageHandlers.TryGetValue(type, out var routeMessageHandler))
|
||||
{
|
||||
Log.Warning($"Scene:{session.Scene.Id} Found Unhandled RouteMessage: {message.GetType()}");
|
||||
|
||||
if (message is IRouteRequest request)
|
||||
{
|
||||
FailRouteResponse(session, request.GetType(), InnerErrorCode.ErrEntityNotFound, rpcId);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
var runtimeId = entity.RuntimeId;
|
||||
var sessionRuntimeId = session.RuntimeId;
|
||||
|
||||
if (entity is Scene)
|
||||
{
|
||||
// 如果是Scene的话、就不要加锁了、如果加锁很一不小心就可能会造成死锁
|
||||
await routeMessageHandler.Handle(session, entity, rpcId, message);
|
||||
return;
|
||||
}
|
||||
|
||||
// 使用协程锁来确保多线程安全
|
||||
using (await _receiveRouteMessageLock.Wait(runtimeId))
|
||||
{
|
||||
if (sessionRuntimeId != session.RuntimeId)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (runtimeId != entity.RuntimeId)
|
||||
{
|
||||
if (message is IRouteRequest request)
|
||||
{
|
||||
FailRouteResponse(session, request.GetType(), InnerErrorCode.ErrEntityNotFound, rpcId);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
await routeMessageHandler.Handle(session, entity, rpcId, message);
|
||||
}
|
||||
}
|
||||
|
||||
internal bool GetCustomRouteType(long protocolCode, out int routeType)
|
||||
{
|
||||
return _customRouteMap.TryGetValue(protocolCode, out routeType);
|
||||
}
|
||||
#endif
|
||||
internal void FailRouteResponse(Session session, Type requestType, uint error, uint rpcId)
|
||||
{
|
||||
var response = CreateRouteResponse(requestType, error);
|
||||
|
||||
Reference in New Issue
Block a user