using System;
using System.Net;
using System.Threading;
using ActorCore;
using MrWu.Debug;
using NetWorkMessage;
using Server.Core;
using Server.Net;
namespace Server.Net
{
///
/// ActorSession
///
public class ActorSession : BaseSession
{
///
/// 实例Id
///
public long InstanceId { get; set; }
private static long IdGenerate = 0;
private long GetInstanceId()
{
if (InstanceId >= long.MaxValue)
{
IdGenerate = 0;
}
IdGenerate++;
return IdGenerate;
}
public ActorSession(long id, TService service, Action disposedAction) : base(id, service, disposedAction)
{
InstanceId = GetInstanceId();
Debug.Info($"创建实例:{InstanceId}");
}
public void Send(ActorId fromActorId,ActorId actorId, IMessage message)
{
this.LastSendTime = TimeInfo.Instance.ClientNow();
Debug.Log($"Session Send {message} {Thread.CurrentThread.ManagedThreadId}");
try
{
(uint opcode, MemoryBuffer memoryBuffer) =
MessageSerializeHelper.ToActorMemoryBuffer(Service, fromActorId, actorId, message);
Service.Send(Id,memoryBuffer);
}
catch (Exception e)
{
Debug.Error($"回复消息报错?{e.ToString()} {message?.GetType()}");
}
}
}
}