blob: df4e6ccbcb25ad5d34975bb955718c8bb75f2f05 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.qpid.proton.reactor.impl;
import java.nio.channels.SelectableChannel;
import org.apache.qpid.proton.engine.Collector;
import org.apache.qpid.proton.engine.Event.Type;
import org.apache.qpid.proton.engine.Record;
import org.apache.qpid.proton.engine.Transport;
import org.apache.qpid.proton.engine.impl.CollectorImpl;
import org.apache.qpid.proton.engine.impl.RecordImpl;
import org.apache.qpid.proton.reactor.Reactor;
import org.apache.qpid.proton.reactor.Selectable;
public class SelectableImpl implements Selectable {
private Callback readable;
private Callback writable;
private Callback error;
private Callback expire;
private Callback release;
private Callback free;
private boolean reading = false;
private boolean writing = false;
private long deadline = 0;
private SelectableChannel channel;
private Record attachments = new RecordImpl();
private boolean registered;
private Reactor reactor;
private Transport transport;
private boolean terminal;
private boolean terminated;
@Override
public boolean isReading() {
return reading;
}
@Override
public boolean isWriting() {
return writing;
}
@Override
public long getDeadline() {
return deadline;
}
@Override
public void setReading(boolean reading) {
this.reading = reading;
}
@Override
public void setWriting(boolean writing) {
this.writing = writing;
}
@Override
public void setDeadline(long deadline) {
this.deadline = deadline;
}
@Override
public void onReadable(Callback runnable) {
this.readable = runnable;
}
@Override
public void onWritable(Callback runnable) {
this.writable = runnable;
}
@Override
public void onExpired(Callback runnable) {
this.expire = runnable;
}
@Override
public void onError(Callback runnable) {
this.error = runnable;
}
@Override
public void onRelease(Callback runnable) {
this.release = runnable;
}
@Override
public void onFree(Callback runnable) {
this.free = runnable;
}
@Override
public void readable() {
if (readable != null) {
readable.run(this);
}
}
@Override
public void writeable() {
if (writable != null) {
writable.run(this);
}
}
@Override
public void expired() {
if (expire != null) {
expire.run(this);
}
}
@Override
public void error() {
if (error != null) {
error.run(this);
}
}
@Override
public void release() {
if (release != null) {
release.run(this);
}
}
@Override
public void free() {
if (free != null) {
free.run(this);
}
}
@Override
public void setChannel(SelectableChannel channel) {
this.channel = channel;
}
@Override
public SelectableChannel getChannel() {
return channel;
}
@Override
public boolean isRegistered() {
return registered;
}
@Override
public void setRegistered(boolean registered) {
this.registered = registered;
}
@Override
public void setCollector(final Collector collector) {
final CollectorImpl collectorImpl = (CollectorImpl)collector;
onReadable(new Callback() {
@Override
public void run(Selectable selectable) {
collectorImpl.put(Type.SELECTABLE_READABLE, selectable);
}
});
onWritable(new Callback() {
@Override
public void run(Selectable selectable) {
collectorImpl.put(Type.SELECTABLE_WRITABLE, selectable);
}
});
onExpired(new Callback() {
@Override
public void run(Selectable selectable) {
collectorImpl.put(Type.SELECTABLE_EXPIRED, selectable);
}
});
onError(new Callback() {
@Override
public void run(Selectable selectable) {
collectorImpl.put(Type.SELECTABLE_ERROR, selectable);
}
});
}
@Override
public Reactor getReactor() {
return reactor;
}
@Override
public void terminate() {
terminal = true;
}
@Override
public boolean isTerminal() {
return terminal;
}
protected Transport getTransport() {
return transport;
}
protected void setTransport(Transport transport) {
this.transport = transport;
}
protected void setReactor(Reactor reactor) {
this.reactor = reactor;
}
@Override
public Record attachments() {
return attachments;
}
public boolean isTerminated() {
return terminated;
}
public void terminated() {
terminated = true;
}
}