package com.codegy.aerlink.connection.command;
import java.util.Arrays;
import java.util.UUID;
/**
* Created by Guiye on 18/5/15.
*/
public class Command {
public static final int IMPORTANCE_MIN = 1;
public static final int IMPORTANCE_NORMAL = 3;
public static final int IMPORTANCE_MAX = 500;
private UUID serviceUUID;
private UUID characteristic;
private byte[] packet;
private boolean writeCommand;
private boolean notifySuccess;
private int retryCount = 0;
private int importance = IMPORTANCE_NORMAL;
private Runnable successBlock;
private Runnable failureBlock;
//private int writeType = BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT;
public Command(UUID serviceUUID, String characteristic) {
this.serviceUUID = serviceUUID;
this.characteristic = UUID.fromString(characteristic);
this.writeCommand = false;
}
public Command(UUID serviceUUID, String characteristic, byte[] packet) {
this.serviceUUID = serviceUUID;
this.characteristic = UUID.fromString(characteristic);
this.packet = packet;
this.writeCommand = true;
}
public UUID getServiceUUID() {
return serviceUUID;
}
public UUID getCharacteristic() {
return characteristic;
}
public byte[] getPacket() {
return packet;
}
public boolean isWriteCommand() {
return writeCommand;
}
public boolean isNotifySuccess() {
return notifySuccess;
}
public void setNotifySuccess(boolean notifySuccess) {
this.notifySuccess = notifySuccess;
}
public int getRetryCount() {
return retryCount;
}
public void setImportance(int importance) {
this.importance = importance;
}
public void setSuccessBlock(Runnable successBlock) {
this.successBlock = successBlock;
}
public void setFailureBlock(Runnable failureBlock) {
this.failureBlock = failureBlock;
}
public void completeWithSuccess() {
if (successBlock != null) {
successBlock.run();
}
}
public void completeWithFailure() {
if (failureBlock != null) {
failureBlock.run();
}
}
/*
public int getWriteType() {
return writeType;
}
public void setWriteType(int writeType) {
this.writeType = writeType;
}
*/
public boolean shouldRetryAgain() {
if (retryCount >= importance) {
return false ;
}
if (importance <= IMPORTANCE_MAX) {
retryCount++;
}
return true;
}
@Override
public boolean equals(Object o) {
if (o != null && o instanceof Command) {
Command otherCommand = (Command) o;
return serviceUUID.equals(otherCommand.getServiceUUID()) &&
characteristic.equals(otherCommand.characteristic) &&
Arrays.equals(packet, otherCommand.getPacket());
}
return false;
}
}