コード例 #1
0
    void Config(string _topic, Socket _socket, PayloadReq _payload)
    {
        state = CHANNEL_STATES.CLOSED;

        Topic      = _topic;
        Socket     = _socket;
        payloadReq = _payload;
        timeout    = _socket.Timeout;
        joinedOnce = false;
        joinPush   = Push.GetInstance(this, CHANNEL_EVENTS.JOIN, payloadReq, timeout);

        joinPush.Receive("ok", (nop) => {
            state = CHANNEL_STATES.JOINED;
            pushBuffer.ForEach(events => events.Send());
        });

        joinPush.Receive("timeout", (nop) => {
            if (state != CHANNEL_STATES.JOINING)
            {
                return;
            }
            Debug.Log("Timeout on topic: " + Topic + " " + joinPush.Timeout);
            state            = CHANNEL_STATES.ERRORED;
            startRejoinTimer = true;
        });

        OnClose((payloadResp, refResp) => {
            Debug.Log("Close channel: " + Topic);
            state = CHANNEL_STATES.CLOSED;
            Socket.Remove(this);
        });

        OnError((payloadResp, refResp) => {
            Debug.Log("Error on topic: " + Topic + " reason: " + payloadResp.status);
            state            = CHANNEL_STATES.ERRORED;
            startRejoinTimer = true;
        });
        OnReply((payloadResp, refResp) => {
            Trigger(ReplyEventName(refResp), payloadResp);
        });
    }
コード例 #2
0
 void Rejoin(int timeout)
 {
     state = CHANNEL_STATES.JOINING;
     joinPush.Resend(timeout);
 }