All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tigerbrokers.stock.openapi.client.util.StompMessageUtil Maven / Gradle / Ivy

package com.tigerbrokers.stock.openapi.client.util;

import com.tigerbrokers.stock.openapi.client.struct.enums.QuoteSubject;
import com.tigerbrokers.stock.openapi.client.struct.enums.Subject;
import com.tigerbrokers.stock.openapi.client.util.builder.HeaderBuilder;
import io.netty.buffer.ByteBufAllocator;
import io.netty.handler.codec.stomp.DefaultStompFrame;
import io.netty.handler.codec.stomp.StompCommand;
import io.netty.handler.codec.stomp.StompFrame;
import io.netty.handler.codec.stomp.StompHeaders;
import java.nio.charset.Charset;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Description:
 * Created by lijiawen on 2018/05/23.
 */
public class StompMessageUtil {

  private static AtomicInteger increment = new AtomicInteger(0);

  public static StompFrame buildConnectMessage(String login, String passcode, String version) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.CONNECT);
    stompFrame.headers()
        .set(HeaderBuilder.instance().version(version).sdkVersion()
            .id(increment.addAndGet(1))
            .host().login(login).passcode(passcode).build());
    return stompFrame;
  }

  /**
   * @param login login
   * @param passcode passcode
   * @param version version
   * @param sendInterval The client can guarantee the minimum interval for sending heartbeats, 0 means the client does not send heartbeats
   * @param receiveInterval The client wants to receive the heartbeat interval of the server, 0 means the client does not want to receive the server's heartbeat
   * @return StompFrame
   */
  public static StompFrame buildConnectMessage(String login, String passcode, String version, int sendInterval,
      int receiveInterval) {
    if (sendInterval < 0 || receiveInterval < 0) {
      throw new RuntimeException("sendInterval < 0 or receiveInterval < 0");
    }
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.CONNECT);
    stompFrame.headers()
        .set(HeaderBuilder.instance()
            .version(version)
            .sdkVersion()
            .id(increment.addAndGet(1))
            .host()
            .login(login)
            .passcode(passcode)
            .heartBeat(sendInterval, receiveInterval)
            .build());
    return stompFrame;
  }

  public static StompFrame buildSendMessage(int reqType, String message) {
    if (reqType <= 0) {
      throw new RuntimeException("reqType不能为空");
    }
    StompFrame stompFrame;
    int id = increment.addAndGet(1);
    if (message != null) {
      stompFrame =
          new DefaultStompFrame(StompCommand.SEND, ByteBufAllocator.DEFAULT.buffer().writeBytes(
              message.getBytes(Charset.defaultCharset())));
    } else {
      stompFrame = new DefaultStompFrame(StompCommand.SEND);
    }
    StompHeaders headers = HeaderBuilder.instance().id(id).host().reqType(reqType).build();
    stompFrame.headers().set(headers);

    return stompFrame;
  }

  public static StompFrame buildCommonSendMessage(String message) {
    StompFrame stompFrame;
    int id = increment.addAndGet(1);
    if (message != null) {
      stompFrame =
          new DefaultStompFrame(StompCommand.SEND, ByteBufAllocator.DEFAULT.buffer().writeBytes(
              message.getBytes(Charset.defaultCharset())));
    } else {
      stompFrame = new DefaultStompFrame(StompCommand.SEND);
    }
    StompHeaders headers = HeaderBuilder.instance().id(id).host().build();
    stompFrame.headers().set(headers);

    return stompFrame;
  }

  public static StompFrame buildSubscribeMessage(Subject subject) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.SUBSCRIBE);
    int id = increment.addAndGet(1);
    StompHeaders headers = HeaderBuilder.instance().id(id).host().subject(subject).build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }

  public static StompFrame buildSubscribeMessage(String account, Subject subject, Set focusKeys) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.SUBSCRIBE);
    int id = increment.addAndGet(1);
    StompHeaders headers = HeaderBuilder.instance()
        .id(id)
        .account(account)
        .host()
        .subject(subject)
        .focusKeys(focusKeys)
        .build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }

  public static StompFrame buildSubscribeMessage(Set symbols, QuoteSubject subject) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.SUBSCRIBE);
    int id = increment.addAndGet(1);
    StompHeaders headers =
        HeaderBuilder.instance()
            .id(id)
            .host()
            .subject(subject.name())
            .symbols(symbols)
            .build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }

  public static StompFrame buildSubscribeMessage(Set symbols, QuoteSubject subject, Set focusKeys) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.SUBSCRIBE);
    int id = increment.addAndGet(1);
    StompHeaders headers =
        HeaderBuilder.instance()
            .id(id)
            .host()
            .subject(subject.name())
            .symbols(symbols)
            .focusKeys(focusKeys)
            .build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }

  public static StompFrame buildUnSubscribeMessage(Subject subject) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.UNSUBSCRIBE);
    int id = increment.addAndGet(1);
    StompHeaders headers = HeaderBuilder.instance().id(id).host().subject(subject).build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }

  public static StompFrame buildUnSubscribeMessage(Set symbols, QuoteSubject subject) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.UNSUBSCRIBE);
    int id = increment.addAndGet(1);
    StompHeaders headers =
        HeaderBuilder.instance().id(id).host().subject(subject.name()).symbols(symbols).build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }

  public static StompFrame buildDisconnectMessage(String login) {
    StompFrame stompFrame = new DefaultStompFrame(StompCommand.DISCONNECT);
    StompHeaders headers = HeaderBuilder.instance().login(login).host().build();
    stompFrame.headers().set(headers);
    return stompFrame;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy