using EVCB_OCPP.Packet.Messages.Basic;
using SuperSocket.SocketBase;
using SuperWebSocket;
using System;

namespace OCPPServer.Protocol
{
    public class ClientData : WebSocketSession<ClientData>
    { /// <summary>
      /// 根據unique id來儲存.取出OCPP Request
      /// </summary>
        public Queue queue = new Queue();

        public EVCB_OCPP20.Packet.Messages.Basic.Queue queue20 = new EVCB_OCPP20.Packet.Messages.Basic.Queue();

        public bool IsCheckIn { set; get; }

        public string ChargeBoxId { set; get; }

        public Guid CustomerId { get; set; }

        public string MachineId { set; get; }

        public bool ISOCPP20 { set; get; }

        public bool ResetSecurityProfile { set; get; }

        public string CustomerName { get; set; }

        public delegate void OCPPClientDataEventHandler<ClientData, String>(ClientData clientdata, String msg);

        public event OCPPClientDataEventHandler<ClientData, String> m_ReceiveData;

        public ClientData()
        {
            IsCheckIn = false;
            ChargeBoxId = SessionID;
            MachineId = SessionID;

        }



        /// <summary>
        /// Sends the raw binary data to client.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="offset">The offset.</param>
        /// <param name="length">The length.</param>
        public void SendRawData(byte[] data, int offset, int length)
        {
            base.Send(data, offset, length);
        }

        //receive data event trigger
        public void ReceiveData(ClientData clientdata, string msg)
        {
            if (m_ReceiveData != null)
                m_ReceiveData(clientdata, msg);
        }

        /// <summary>
        /// Called when [session closed].
        /// </summary>
        /// <param name="reason">The reason.</param>
        protected override void OnSessionClosed(CloseReason reason)
        {
        }

    }
}