using System;
using System.Net;

namespace Server.Net
{
    public abstract class BaseSession : IDisposable
    {
        public long Id { get; set; }

        public TService Service { get; set; }

        public long LastRecvTime { get; set; }
        
        public long LastSendTime { get; set; }

        public int Error { get; set; }

        public IPEndPoint RemoteAddress { get; set; }

        protected readonly Action<long> Disposed;

        public BaseSession(long id, TService service, Action<long> disposedAction)
        {
            this.Id = id;
            this.Service = service;
            this.Disposed = disposedAction;
        }

        public virtual void Dispose()
        {
            this.Service.Remove(Id);
            Disposed?.Invoke(Id);
        }
    }
}