001package com.avaje.ebeaninternal.server.cluster.message;
002
003import com.avaje.ebeaninternal.server.cluster.BinaryMessageList;
004import com.avaje.ebeaninternal.server.cluster.ClusterManager;
005import com.avaje.ebeaninternal.server.transaction.RemoteTransactionEvent;
006
007import java.io.IOException;
008
009/**
010 * Mechanism to convert RemoteTransactionEvent to/from byte[] content.
011 */
012public class MessageReadWrite {
013
014  private final ClusterManager clusterManager;
015
016  public MessageReadWrite(ClusterManager clusterManager) {
017    this.clusterManager = clusterManager;
018  }
019
020  /**
021   * Convert the RemoteTransactionEvent to raw byte[] content.
022   */
023  public byte[] write(RemoteTransactionEvent transEvent) throws IOException {
024
025    BinaryMessageList messageList = new BinaryMessageList();
026    transEvent.writeBinaryMessage(messageList);
027
028    BinaryDataWriter writer = new BinaryDataWriter(transEvent.getServerName(), messageList);
029    return writer.write();
030  }
031
032  /**
033   * Convert the byte[] content to RemoteTransactionEvent.
034   */
035  public RemoteTransactionEvent read(byte[] data) throws IOException {
036
037    BinaryDataReader reader = new BinaryDataReader(clusterManager, data);
038    return reader.read();
039  }
040}