public static Channel GetInstance(string _topic, Socket _socket, PayloadReq _payload)
    {
        Channel channel = _socket.gameObject.AddComponent <Channel>();

        channel.Config(_topic, _socket, _payload);
        return(channel);
    }
    public Channel CreateChannel(string topic, PayloadReq payload)
    {
        Channel channel = Channel.GetInstance(topic, this, payload);

        channels.Add(channel);
        return(channel);
    }
Пример #3
0
    // Initializes the Push
    //
    // channel - The Channel
    // event - The event, for example `"phx_join"`
    // payload - The payload, for example `{user_id: 123}`
    // timeout - The push timeout in milliseconds
    //
    public static Push GetInstance(Channel _channel, string _event, PayloadReq _payload, int _timeout)
    {
        Push push = _channel.gameObject.AddComponent <Push>();

        push.channel    = _channel;
        push.eventName  = _event;
        push.payloadReq = _payload;
        push.Timeout    = _timeout;
        return(push);
    }
    Push PushEvent(string _event, PayloadReq _payloadReq, int timeout)
    {
        if (!joinedOnce)
        {
            throw new InvalidOperationException("tried to push '" + _event + "' to '" + Topic + "' before joining. Use Channel.Join() before pushing events");
        }
        Push pushEvent = Push.GetInstance(this, _event, _payloadReq, timeout);

        if (CanPush())
        {
            pushEvent.Send();
        }
        else
        {
            pushEvent.SetResponseListener();
            pushBuffer.Add(pushEvent);
        }
        return(pushEvent);
    }
    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);
        });
    }
 public Push PushEvent(string _event, PayloadReq _payloadReq)
 {
     return(PushEvent(_event, _payloadReq, timeout));
 }