Sketcher2 source code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
2.5 KiB

/**
*
*/
package com.jotuntech.sketcher.client;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.util.concurrent.ArrayBlockingQueue;
import com.jotuntech.sketcher.common.User;
/**
* Client connection
*
* @author Thor Harald Johansen
*/
public class Connection {
/** Return values for Command */
public final static int SEND_NONE = 0; /** Send to nobody */
public final static int SEND_SELF = 1; /** Send to self only */
public final static int SEND_OTHERS = 2; /** Send to others only */
public final static int SEND_ALL = 3; /** Send to self and others */
public final static long PING_INTERVAL = 10000;
/** Socket channel */
private SocketChannel channel;
/** User to which connection belongs. */
private User user;
/** Input buffer */
private ByteBuffer inputBuffer;
/** Output buffer */
private ByteBuffer outputBuffer;
/** Send queue */
private ArrayBlockingQueue<CommandEntry> sendQueue = new ArrayBlockingQueue<CommandEntry>(98304);
/** Time of death */
private long timeOfDeath;
/** Last ping */
private long lastPing;
public Connection() {
}
public Connection(SocketChannel channel) throws IOException {
/** Store socket channel. */
this.channel = channel;
/** Allocate transmission buffers */
inputBuffer = ByteBuffer.allocate(65538);
outputBuffer = ByteBuffer.allocate(65538);
/** Disable time of death */
timeOfDeath = Long.MAX_VALUE;
}
/** Set user for connection */
public void setUser(User user) {
this.user = user;
}
/** Get user for connection */
public User getUser() {
return user;
}
public void setChannel(SocketChannel channel) {
this.channel = channel;
}
public SocketChannel getChannel() {
return channel;
}
public ByteBuffer getInputBuffer() {
return inputBuffer;
}
public ByteBuffer getOutputBuffer() {
return outputBuffer;
}
public ArrayBlockingQueue<CommandEntry> getSendQueue() {
return sendQueue;
}
public void setTimeOfDeath(long timeOfDeath) {
this.timeOfDeath = timeOfDeath;
}
public boolean hasTimeOfDeath() {
return timeOfDeath != Long.MAX_VALUE;
}
public boolean isTimeOfDeath() {
return timeOfDeath != Long.MAX_VALUE && System.currentTimeMillis() >= timeOfDeath;
}
public void setLastPing(long lastPing) {
this.lastPing = lastPing;
}
public long getLastPing() {
return lastPing;
}
}