internal void Connect(string appId)
        {
            m_isInitiator            = true;
            m_futureClose            = double.MaxValue;
            m_futureDisconnectReason = null;
            m_applicationIdentifier  = appId;            //Store appId. It will be used in reconnect attempts.

            m_owner.LogVerbose("Sending Connect request to " + m_remoteEndPoint, this);
            var msgBuffer = m_owner.GetTempBuffer();

            msgBuffer.Write(appId);
            msgBuffer.Write(m_owner.m_localRndSignature);
            msgBuffer.Write(m_localRndSeqNr);

            double localTimeSent = NetTime.Now + m_owner.m_localTimeOffset;

            msgBuffer.Write(localTimeSent);

            if (m_localHailData != null && m_localHailData.Length > 0)
            {
                msgBuffer.Write(m_localHailData);
            }

            m_handshakeInitiated = localTimeSent;
            SendSingleUnreliableSystemMessage(NetSystemType.Connect, msgBuffer);
            SetStatus(NetConnectionStatus.Connecting, "Connecting");
        }
        internal void Heartbeat(double now)
        {
            if (m_requests == null)
            {
                return;
            }

            foreach (NetDiscoveryRequest request in m_requests)
            {
                request.Heartbeat(this, now);
                if (now > request.TimeOut)
                {
                    m_netBase.LogVerbose("Removing discovery request " + request.Number);
                    m_requests.Remove(request);
                    if (m_requests.Count < 1)
                    {
                        m_requests = null;
                    }
                    break;
                }
            }
        }
        internal void Connect()
        {
            m_isInitiator            = true;
            m_handshakeInitiated     = NetTime.Now;
            m_futureClose            = double.MaxValue;
            m_futureDisconnectReason = null;

            m_owner.LogVerbose("Sending Connect request to " + m_remoteEndPoint, this);
            OutgoingNetMessage msg = m_owner.CreateSystemMessage(NetSystemType.Connect);

            msg.m_data.Write(m_owner.Configuration.ApplicationIdentifier);
            msg.m_data.Write(m_owner.m_randomIdentifier);
            if (m_localHailData != null && m_localHailData.Length > 0)
            {
                msg.m_data.Write(m_localHailData);
            }
            m_unsentMessages.Enqueue(msg);
            SetStatus(NetConnectionStatus.Connecting, "Connecting");
        }