예제 #1
0
    /// <summary>
    /// 创建实例
    /// </summary>
    public static SocketReconnectSuccessRequest create(int lastReceiveIndex)
    {
        SocketReconnectSuccessRequest re = (SocketReconnectSuccessRequest)BytesControl.createRequest(dataID);

        re.lastReceiveIndex = lastReceiveIndex;
        return(re);
    }
예제 #2
0
        /** 重连的下一步(主线程) */
        protected void doReconnectNext(short lastReceiveIndex, bool needReMsg)
        {
            short dd = indexD(_sendMsgIndex, lastReceiveIndex);

            if (dd < 0 || dd >= ShineSetting.requestCacheLen)
            {
                Ctrl.warnLog("重连时,消息缓存已失效");

                closeForIO(Close_ReconnectFailed, false);
                return;
            }

            if (needReMsg)
            {
                sendAbs(SocketReconnectSuccessRequest.create(_receiveMsgIndex));
            }

            for (short i = lastReceiveIndex; i != _sendMsgIndex; i++)
            {
                BaseRequest request = _sendCacheRequestQueue[i & ShineSetting.requestCacheMark];

                if (request == null)
                {
                    Ctrl.warnLog("找不到缓存消息,或是超时被释放");
                    closeForIO(Close_ReconnectFailed, false);
                    return;
                }
                else
                {
                    doWriteRequestToStream(request, i);
                }
            }

            _reconnecting            = false;
            _disConnectLastSendIndex = 0;

            //推送一次
            toFlush();

            Ctrl.log("socket重连成功:");
        }