Skip to content

Instantly share code, notes, and snippets.

@akashgoswami
Forked from rostyslav/Server.java
Created December 1, 2018 20:39
Show Gist options
  • Select an option

  • Save akashgoswami/680d59164cd5eae108703d18d2b71b96 to your computer and use it in GitHub Desktop.

Select an option

Save akashgoswami/680d59164cd5eae108703d18d2b71b96 to your computer and use it in GitHub Desktop.

Revisions

  1. Rostyslav Rava created this gist Jul 7, 2011.
    132 changes: 132 additions & 0 deletions Server.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,132 @@
    import java.io.*;
    import java.nio.*;
    import java.nio.channels.*;
    import java.net.*;
    import java.util.*;
    import java.nio.charset.*;

    public class Server {

    public Selector sel = null;
    public ServerSocketChannel server = null;
    public SocketChannel socket = null;
    public int port = 4900;
    String result = null;

    public Server() {
    System.out.println("Inside default ctor");
    }

    public Server(int port) {
    System.out.println("Inside the other ctor");
    this.port = port;
    }

    public void initializeOperations() throws IOException, UnknownHostException {
    System.out.println("Inside initialization");
    sel = Selector.open();
    server = ServerSocketChannel.open();
    server.configureBlocking(false);
    InetAddress ia = InetAddress.getLocalHost();
    InetSocketAddress isa = new InetSocketAddress(ia, port);
    server.socket().bind(isa);
    }

    public void startServer() throws IOException {
    System.out.println("Inside startserver");
    initializeOperations();
    System.out.println("Abt to block on select()");
    SelectionKey acceptKey = server.register(sel, SelectionKey.OP_ACCEPT);

    while (acceptKey.selector().select() > 0) {

    Set readyKeys = sel.selectedKeys();
    Iterator it = readyKeys.iterator();

    while (it.hasNext()) {
    SelectionKey key = (SelectionKey) it.next();
    it.remove();

    if (key.isAcceptable()) {
    System.out.println("Key is Acceptable");
    ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
    socket = (SocketChannel) ssc.accept();
    socket.configureBlocking(false);
    SelectionKey another = socket.register(sel, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
    }
    if (key.isReadable()) {
    System.out.println("Key is readable");
    String ret = readMessage(key);
    if (ret.length() > 0) {
    writeMessage(socket, ret);
    }
    }
    if (key.isWritable()) {
    System.out.println("THe key is writable");
    String ret = readMessage(key);
    socket = (SocketChannel) key.channel();
    if (result.length() > 0) {
    writeMessage(socket, ret);
    }
    }
    }
    }
    }

    public void writeMessage(SocketChannel socket, String ret) {
    System.out.println("Inside the loop");

    if (ret.equals("quit") || ret.equals("shutdown")) {
    return;
    }
    File file = new File(ret);
    try {

    RandomAccessFile rdm = new RandomAccessFile(file, "r");
    FileChannel fc = rdm.getChannel();
    ByteBuffer buffer = ByteBuffer.allocate(1024);
    fc.read(buffer);
    buffer.flip();

    Charset set = Charset.forName("UTF-8");
    CharsetDecoder dec = set.newDecoder();
    CharBuffer charBuf = dec.decode(buffer);
    System.out.println(charBuf.toString());
    buffer = ByteBuffer.wrap((charBuf.toString()).getBytes());
    int nBytes = socket.write(buffer);
    System.out.println("nBytes = " + nBytes);
    result = null;
    } catch (Exception e) {
    e.printStackTrace();
    }

    }

    public String readMessage(SelectionKey key) {
    int nBytes = 0;
    socket = (SocketChannel) key.channel();
    ByteBuffer buf = ByteBuffer.allocate(1024);
    try {
    nBytes = socket.read(buf);
    buf.flip();
    Charset charset = Charset.forName("UTF-8");
    CharsetDecoder decoder = charset.newDecoder();
    CharBuffer charBuffer = decoder.decode(buf);
    result = charBuffer.toString();
    } catch (IOException e) {
    e.printStackTrace();
    }
    return result;
    }

    public static void main(String args[]) {
    Server server = new Server();
    try {
    server.startServer();
    } catch (IOException e) {
    e.printStackTrace();
    System.exit(-1);
    }

    }
    }