package cn.muchinfo.rma.netcore.socket;

/**
 * Socket回调
 * @param <T> Packet40 or Packet50
 */
public interface MTP2SocketListener<T> {

    /**
     * 连接成功的回调
     * @param socket socket
     */
    void onConnected(MTP2Socket<T> socket);

    /**
     * 连接断开的回调
     * @param socket socket
     */
    void onClosed(MTP2Socket<T> socket);

    /**
     * 连接发生错误的回调
     * @param socket socket
     * @param err 错误
     */
    void onError(MTP2Socket<T> socket, Error err);

    /**
     * 接收到推送类报文的回调
     * @param socket socket
     * @param data 推送类报文，Packet40 or Packet50
     */
    void onReceivePush(MTP2Socket<T> socket, T data);

    /**
     * 重连状态发生改变时的回调
     * @param socket socket
     * @param state 0: 开始重连
     *              1: 尝试重连失败，将在下一个周期后再次尝试重连
     *              2: 重连成功，将进行业务操作
     *              3: 重连成功后业务操作失败（交易：Token检验失败；行情：行情订阅失败），由业务模块发起
     *              4: 重连成功后业务操作成功（包括交易服务的账户登录状态更新或行情服务的行情订阅等
     */
    void onReconnectChangeState(MTP2Socket<T> socket, int state);
}
