package net.johnewart.gearman.server.net;
import io.netty.channel.Channel;
import net.johnewart.gearman.common.interfaces.EngineWorker;
import net.johnewart.gearman.common.packets.Packet;
import net.johnewart.gearman.common.packets.response.NoOp;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
public class NetworkEngineWorker implements EngineWorker {
private final Channel channel;
private final Set<String> abilities;
private Boolean awake;
public NetworkEngineWorker(Channel channel)
{
this.channel = channel;
this.abilities = new HashSet<>();
this.awake = new Boolean(true);
}
public void send(Packet packet)
{
channel.writeAndFlush(packet);
}
public void addAbility(String ability)
{
this.abilities.add(ability);
}
@Override
public Set<String> getAbilities() {
return abilities;
}
@Override
public void wakeUp()
{
synchronized (awake) {
if(!awake) {
send(new NoOp());
awake = true;
}
}
}
@Override
public void markAsleep() {
synchronized (awake) {
awake = false;
}
}
public void removeAbility(String functionName) {
this.abilities.remove(functionName);
}
}