Files
hjha-server/GlobalSever/GlobalManager/MainActor.cs
xiaoou e9616125ce feat: initial commit - HJHA game server full source
6 major server modules (PdkFriendServer/GlobalSever/ServerCore/GameModule/GameNetModule) +
game logic (GameFix/GameDAL/ServerData) +
network layer (NetWorkMessage) +
data layer (ObjectModel) +
utilities (MrWu/Core/Config/CloudAPI/dll) +
adapters (zyxAdapter/base)

.NET 8.0 C# solution, 16 projects, 958 source files
2026-07-07 12:02:15 +08:00

93 lines
3.0 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using ActorCore;
using NetWorkMessage;
using Server.Net;
namespace Server
{
public class MainActor : Actor
{
public override SchedulerType SchedulerType => SchedulerType.Main;
public override MailBoxType MailBoxType => MailBoxType.UnOrderedMessage;
public static ActorId MainActorId
{
get;
private set;
}
protected virtual bool IsOrderMessage => true;
public MainActor(byte moduleId, byte nodeNum) : base(moduleId, nodeNum, ActorTypeId.Main)
{
MainActorId = new ActorId(moduleId, nodeNum, ActorTypeId.Main);
}
public override void RegisterHandle()
{
this.RegisterMessageHandle(typeof(ClientMessage),OuterMessageHandle);
this.RegisterMessageHandle(typeof(UserPropChangeMessage),OnUserPropChangeMessage);
this.RegisterMessageHandle(typeof(UserCurrencyChangeMessage),OnUserCurrencyChangeMessage);
this.RegisterRPCHandle(typeof(RpcTestRequest),OnRpcTestRequest);
MessageDispatcher.Instance.Start(IsOrderMessage,CoroutineLockManager);
}
private Task OuterMessageHandle(ActorId fromActorId,IMessage message)
{
if (message is ClientMessage clientMessage)
{
GameMessageDispatcher.Instance.Dispatch(clientMessage.OpCode, clientMessage);
}
return Task.CompletedTask;
}
private Task OnUserPropChangeMessage(ActorId fromActorId,IMessage message)
{
if (message is UserPropChangeMessage userPropChangeMessage)
{
GameDispatcher.Instance.Dispatch(GameMsgId.UserPropChange,userPropChangeMessage);
}
return Task.CompletedTask;
}
private Task OnUserCurrencyChangeMessage(ActorId formActorId, IMessage message)
{
if (message is UserCurrencyChangeMessage userCurrencyChangeMessage)
{
GameDispatcher.Instance.Dispatch(GameMsgId.UserCurrencyChange,userCurrencyChangeMessage);
}
return Task.CompletedTask;
}
private Task OnRpcTestRequest(ActorId fromActorId,IRequest request,IResponse response)
{
if (request is RpcTestRequest rpcTestRequest && response is RpcTestResponse rpcTestResponse)
{
rpcTestResponse.Id = rpcTestRequest.Id;
}
return Task.CompletedTask;
}
protected override void Update()
{
if (UserSessionManager.Instance != null)
{
UserSessionManager.Instance.Update();
}
//处理客户端消息
MessageDispatcher.Instance.Handle();
}
public override void Dispose()
{
base.Dispose();
}
}
}