25
25
* type, which the receiver uses to determine what additional data should be in
26
26
* the packet, as well as how to interpret the data.
28
public class Packet implements GearmanPacket {
31
private final PacketMagic magic;
33
private final PacketType type;
28
public class GearmanPacketImpl implements GearmanPacket {
31
private final GearmanPacketMagic magic;
33
private final GearmanPacketType type;
35
35
private final byte[] data;
37
public Packet(PacketMagic magic, PacketType type, byte[] data) {
37
public GearmanPacketImpl(GearmanPacketMagic magic, GearmanPacketType type, byte[] data) {
38
38
this.magic = magic;
40
40
this.data = ByteUtils.copy(data);
43
public Packet(InputStream in) {
44
byte[] bytes = new byte[PacketHeader.HEADER_LENGTH];
43
public GearmanPacketImpl(InputStream in) {
44
byte[] bytes = new byte[GearmanPacketHeader.HEADER_LENGTH];
46
46
blockUntilReadFully(in, bytes);
48
PacketHeader header = new PacketHeader(bytes);
48
GearmanPacketHeader header = new GearmanPacketHeader(bytes);
49
49
byte[] data = new byte[header.getDataLength()];
50
50
if (data.length > 0) {
51
51
IOUtil.readFully(in, data);
58
58
private void blockUntilReadFully(InputStream in, byte[] bytes) {
60
while (in.available() < PacketHeader.HEADER_LENGTH) {
60
while (in.available() < GearmanPacketHeader.HEADER_LENGTH) {
63
63
} catch (InterruptedException e) {
175
175
public boolean requiresResponse() {
176
if (magic.equals(PacketMagic.RES)) {
176
if (magic.equals(GearmanPacketMagic.RES)) {
179
if (type.equals(PacketType.PRE_SLEEP) ||
180
type.equals(PacketType.GRAB_JOB) ||
181
type.equals(PacketType.GRAB_JOB_UNIQ) ||
182
type.equals(PacketType.GET_STATUS) ||
183
type.equals(PacketType.ECHO_REQ) ||
184
type.equals(PacketType.SUBMIT_JOB) ||
185
type.equals(PacketType.SUBMIT_JOB_BG) ||
186
type.equals(PacketType.SUBMIT_JOB_LOW) ||
187
type.equals(PacketType.SUBMIT_JOB_LOW_BG) ||
188
type.equals(PacketType.SUBMIT_JOB_HIGH) ||
189
type.equals(PacketType.SUBMIT_JOB_HIGH_BG) ||
190
type.equals(PacketType.OPTION_REQ)) {
179
if (type.equals(GearmanPacketType.PRE_SLEEP) ||
180
type.equals(GearmanPacketType.GRAB_JOB) ||
181
type.equals(GearmanPacketType.GRAB_JOB_UNIQ) ||
182
type.equals(GearmanPacketType.GET_STATUS) ||
183
type.equals(GearmanPacketType.ECHO_REQ) ||
184
type.equals(GearmanPacketType.SUBMIT_JOB) ||
185
type.equals(GearmanPacketType.SUBMIT_JOB_BG) ||
186
type.equals(GearmanPacketType.SUBMIT_JOB_LOW) ||
187
type.equals(GearmanPacketType.SUBMIT_JOB_LOW_BG) ||
188
type.equals(GearmanPacketType.SUBMIT_JOB_HIGH) ||
189
type.equals(GearmanPacketType.SUBMIT_JOB_HIGH_BG) ||
190
type.equals(GearmanPacketType.OPTION_REQ)) {