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); }); }
void Rejoin(int timeout) { state = CHANNEL_STATES.JOINING; joinPush.Resend(timeout); }