public void Init(ReceiveInvokeElement receiveInvokeElement, TcpSendMsg heartbeatMsg, int heartbeatInterval)
        {
            this.receiveIvokeElement       = receiveInvokeElement;
            tcpClient.ReceiveInvokeElement = receiveInvokeElement;

            if (heartbeatMsg != null)
            {
                heartbeatMsg.Encode();
                this.heartbeatMsg = heartbeatMsg;
            }

            this.heartbeatInterval  = heartbeatInterval;
            this.maxReceiveInterval = heartbeatInterval * 2;
        }
        public void SendMessage(TcpSendMsg msg, bool immediate)
        {
            msg.Encode();
            msg.SendImmediate = immediate;

            if (Interlocked.Read(ref tcpSocketState) == 1)
            {
                if (immediate)
                {
                    tcpClient.BeginSend(msg.Packet, msg);
                }
                else
                {
                    EnqueueSendMsgPool(msg);
                    SendMsgPacket();
                }
            }
        }