Package com.davfx.ninio.common

Examples of com.davfx.ninio.common.Queue


    return this;
  }
 
  @Override
  public void connect(final TelnetClientHandler clientHandler) {
    final Queue q;
    final boolean shouldCloseQueue;
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        clientHandler.failed(e);
        return;
      }
      shouldCloseQueue = true;
    } else {
      q = queue;
      shouldCloseQueue = false;
    }

    final Address a;
    if (host != null) {
      if (port < 0) {
        a = new Address(host, address.getPort());
      } else {
        a = new Address(host, port);
      }
    } else {
      a = address;
    }

    q.post(new Runnable() {
      @Override
      public void run() {
        ByteBufferAllocator allocator = new OnceByteBufferAllocator();
        Ready ready = readyFactory.create(q, allocator);
        ready.connect(a, new ReadyConnection() {
          private TelnetResponseReader reader = null;
          @Override
          public void handle(Address address, ByteBuffer buffer) {
            reader.handle(address, buffer);
          }
         
          @Override
          public void failed(IOException e) {
            if (shouldCloseQueue) {
              q.close();
            }
            clientHandler.failed(e);
          }
         
          @Override
          public void connected(FailableCloseableByteBufferHandler write) {
            reader = new TelnetResponseReader(clientHandler, write);
            clientHandler.launched(new TelnetClientHandler.Callback() {
              @Override
              public void close() {
                reader.close();
                if (shouldCloseQueue) {
                  q.close();
                }
              }
             
              @Override
              public void send(String line) {
                reader.send(line);
              }
            });
          }
         
          @Override
          public void close() {
            if (shouldCloseQueue) {
              q.close();
            }
            reader.close();
          }
        });
      }
View Full Code Here


    this.port = port;
    return this;
  }
 
  public AutoCloseable start(final SimpleHttpServerHandler handler) {
    final Queue q;
    final boolean shouldCloseQueue;
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        LOGGER.error("Queue could not be created", e);
        return null;
      }
      shouldCloseQueue = true;
    } else {
      q = queue;
      shouldCloseQueue = false;
    }

    Address a = address;
    if (port >= 0) {
      a = new Address(port);
    }
   
    new HttpServer(q, trust, a, new HttpServerHandlerFactory() {
      @Override
      public HttpServerHandler create() {
        return new HttpServerHandlerToSimpleHttpServerHandler(handler);
      }
     
      @Override
      public void closed() {
        if (shouldCloseQueue) {
          q.close();
        }
        LOGGER.debug("Server closed");
      }

      @Override
      public void failed(IOException e) {
        if (shouldCloseQueue) {
          q.close();
        }
        LOGGER.error("Server could not be launched", e);
      }
    });
   
    return new AutoCloseable() {
      @Override
      public void close() {
        if (shouldCloseQueue) {
          q.close();
        }
      }
    };
  }
View Full Code Here

    this.readyFactory = readyFactory;
    return this;
  }
 
  public void connect(final PingClientHandler clientHandler) {
    final Queue q;
    final ScheduledExecutorService re;
    final boolean shouldCloseQueue;
   
    final ReadyFactory rf;
    final InternalPingServerReadyFactory readyFactoryToClose;
    if (readyFactory == null) {
      readyFactoryToClose = new InternalPingServerReadyFactory();
      rf = readyFactoryToClose;
    } else {
      rf = readyFactory;
      readyFactoryToClose = null;
    }
   
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        clientHandler.failed(e);
        return;
      }
      re = Executors.newSingleThreadScheduledExecutor();
      shouldCloseQueue = true;
    } else {
      q = queue;
      re = repeatExecutor;
      shouldCloseQueue = false;
    }

    final Address a;
    if (host != null) {
      if (port < 0) {
        a = new Address(host, address.getPort());
      } else {
        a = new Address(host, port);
      }
    } else {
      a = address;
    }
   
    final Set<InstanceMapper> instanceMappers = new HashSet<>();
    re.scheduleAtFixedRate(new Runnable() {
      @Override
      public void run() {
        q.post(new Runnable() {
          @Override
          public void run() {
            Date now = new Date();
            for (InstanceMapper i : instanceMappers) {
              i.repeat(now, minTimeToRepeat, timeoutFromBeginning);
            }
           
            Iterator<InstanceMapper> ii = instanceMappers.iterator();
            while (ii.hasNext()) {
              InstanceMapper i = ii.next();
              if (i.instances.isEmpty()) {
                ii.remove();
              }
            }
          }
        });
      }
    }, 0, (long) (repeatTime * 1000d), TimeUnit.MILLISECONDS);

    q.post(new Runnable() {
      @Override
      public void run() {
        ByteBufferAllocator allocator = new OnceByteBufferAllocator();
        Ready ready = rf.create(q, allocator);
       
        ready.connect(a, new ReadyConnection() {
          private final InstanceMapper instanceMapper = new InstanceMapper();

          @Override
          public void handle(Address address, ByteBuffer buffer) {
            ByteBuffer bb = buffer.duplicate();

            int version = buffer.get() & 0xFF;
            if (version != 1) {
              LOGGER.warn("Invalid version: {}", version);
              return;
            }
            int messageType = buffer.get() & 0xFF;
            if (messageType != 2) {
              LOGGER.warn("Invalid message type: {}", messageType);
              return;
            }
            int ipVersion = buffer.get() & 0xFF;
            int crcPos = buffer.position();
            short crc = buffer.getShort();
            if (CrcUtils.crc16(bb, crcPos) != crc) {
              LOGGER.warn("Invalid crc");
              return;
            }
            byte[] ip = new byte[(ipVersion == 4) ? 4 : 16];
            buffer.get(ip);
            int numberOfRetries = buffer.getInt();
            int[] statuses = new int[numberOfRetries];
            double[] times = new double[numberOfRetries];
            for (int i = 0; i < numberOfRetries; i++) {
              int replyTime = buffer.getInt();
              if (replyTime < 0) {
                // Error
                statuses[i] = -replyTime;
                times[i] = Double.NaN;
              } else {
                times[i] = replyTime / 1000d;
                statuses[i] = PingClientHandler.VALID_STATUS;
              }
            }

            instanceMapper.handle(new PingableAddress(ip), statuses, times);
          }
         
          @Override
          public void failed(IOException e) {
            if (shouldCloseQueue) {
              re.shutdown();
              q.close();
            }
            if (readyFactoryToClose != null) {
              readyFactoryToClose.close();
            }
            if (instanceMappers.remove(instanceMapper)) {
              clientHandler.failed(e);
            }
          }
         
          @Override
          public void connected(final FailableCloseableByteBufferHandler write) {
            instanceMappers.add(instanceMapper);
           
            final PingWriter w = new PingWriter(write);
           
            clientHandler.launched(new PingClientHandler.Callback() {
              @Override
              public void close() {
                if (instanceMappers.remove(instanceMapper)) {
                  instanceMapper.closedByUser();
                }
               
                write.close();

                if (shouldCloseQueue) {
                  re.shutdown();
                  q.close();
                }
                if (readyFactoryToClose != null) {
                  readyFactoryToClose.close();
                }
              }
              @Override
              public void ping(PingableAddress address, int numberOfRetries, double timeBetweenRetries, double retryTimeout, PingCallback callback) {
                Instance i = new Instance(callback, w, address, numberOfRetries, timeBetweenRetries, retryTimeout);
                instanceMapper.map(i);
                w.ping(address, numberOfRetries, timeBetweenRetries, retryTimeout);
              }
            });
          }
         
          @Override
          public void close() {
            if (shouldCloseQueue) {
              re.shutdown();
              q.close();
            }
            if (readyFactoryToClose != null) {
              readyFactoryToClose.close();
            }
            if (instanceMappers.remove(instanceMapper)) {
View Full Code Here

    this.port = port;
    return this;
  }
 
  public AutoCloseable start(final JsonHttpServerHandler handler) {
    final Queue q;
    final boolean shouldCloseQueue;
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        LOGGER.error("Queue could not be created", e);
        return null;
      }
      shouldCloseQueue = true;
    } else {
      q = queue;
      shouldCloseQueue = false;
    }

    Address a = address;
    if (port >= 0) {
      a = new Address(port);
    }
   
    new HttpServer(q, trust, a, new HttpServerHandlerFactory() {
      @Override
      public HttpServerHandler create() {
        return new HttpServerHandler() {
          private HttpRequest request = null;
          private InMemoryPost post = null;
         
          @Override
          public void handle(HttpRequest request) {
            this.request = request;
          }

          @Override
          public void handle(Address address, ByteBuffer buffer) {
            if (post == null) {
              post = new InMemoryPost();
            }
            post.add(buffer);
          }
         
          @Override
          public void ready(final Write write) {
            HttpQuery query = new HttpQuery(request.getPath());
           
            String path = query.getPath();
            Parameters parameters = query.getParameters();
           
            JsonHttpServerHandler.Callback callback = new JsonHttpServerHandler.Callback() {
              @Override
              public void send(JsonElement response) {
                if (response == null) {
                  HttpResponse r = new HttpResponse(Http.Status.INTERNAL_SERVER_ERROR, Http.Message.INTERNAL_SERVER_ERROR);
                  write.write(r);
                  write.close();
                  return;
                } else {
                  HttpResponse r = new HttpResponse(Http.Status.OK, Http.Message.OK);
                  r.getHeaders().put(Http.CONTENT_TYPE, Http.ContentType.JSON);
                  ByteBuffer bb = ByteBuffer.wrap(response.toString().getBytes(Http.UTF8_CHARSET));
                  r.getHeaders().put(Http.CONTENT_LENGTH, String.valueOf(bb.remaining()));
                  write.write(r);
                  write.handle(null, bb);
                  write.close();
                }
              }
            };
           
            switch (request.getMethod()) {
            case GET:
              handler.get(path, parameters, callback);
              break;
            case DELETE:
              handler.delete(path, parameters, callback);
              break;
            case HEAD:
              handler.head(path, parameters, callback);
              break;
            case PUT:
              handler.put(path, parameters, callback);
              break;
            case POST:
              handler.post(path, parameters, post, callback);
              break;
            default:
              HttpResponse r = new HttpResponse(Http.Status.INTERNAL_SERVER_ERROR, Http.Message.INTERNAL_SERVER_ERROR);
              write.write(r);
              write.close();
              break;
            }
            request = null;
            post = null;
          }
         
          @Override
          public void failed(IOException e) {
            LOGGER.debug("Client connection failed", e);
          }
         
          @Override
          public void close() {
            LOGGER.debug("Connection closed by peer");
          }
        };
      }
     
      @Override
      public void closed() {
        if (shouldCloseQueue) {
          q.close();
        }
        LOGGER.debug("Server closed");
      }

      @Override
      public void failed(IOException e) {
        if (shouldCloseQueue) {
          q.close();
        }
        LOGGER.error("Server could not be launched", e);
      }
    });
   
    return new AutoCloseable() {
      @Override
      public void close() {
        if (shouldCloseQueue) {
          q.close();
        }
      }
    };
  }
View Full Code Here

    this.readyFactory = readyFactory;
    return this;
  }
 
  public void connect(final SnmpClientHandler clientHandler) {
    final Queue q;
    final ScheduledExecutorService re;
    final boolean shouldCloseQueue;
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        clientHandler.failed(e);
        return;
      }
      re = Executors.newSingleThreadScheduledExecutor();
      shouldCloseQueue = true;
    } else {
      q = queue;
      re = repeatExecutor;
      shouldCloseQueue = false;
    }

    final Address a;
    if (host != null) {
      if (port < 0) {
        a = new Address(host, address.getPort());
      } else {
        a = new Address(host, port);
      }
    } else {
      a = address;
    }
   
    final Set<InstanceMapper> instanceMappers = new HashSet<>();
    re.scheduleAtFixedRate(new Runnable() {
      @Override
      public void run() {
        q.post(new Runnable() {
          @Override
          public void run() {
            Date now = new Date();
            for (InstanceMapper i : instanceMappers) {
              i.repeat(now, minTimeToRepeat, timeoutFromBeginning, timeoutFromLastReception);
            }
           
            Iterator<InstanceMapper> ii = instanceMappers.iterator();
            while (ii.hasNext()) {
              InstanceMapper i = ii.next();
              if (i.instances.isEmpty()) {
                ii.remove();
              }
            }
          }
        });
      }
    }, 0, (long) (repeatTime * 1000d), TimeUnit.MILLISECONDS);

    q.post(new Runnable() {
      @Override
      public void run() {
        ByteBufferAllocator allocator = new OnceByteBufferAllocator();
        Ready ready = readyFactory.create(q, allocator);
       
        ready.connect(a, new ReadyConnection() {
          private final InstanceMapper instanceMapper = new InstanceMapper();

          @Override
          public void handle(Address address, ByteBuffer buffer) {
            int instanceId;
            int errorStatus;
            int errorIndex;
            Iterable<Result> results;
            try {
              if (authEngine == null) {
                Version2cPacketParser parser = new Version2cPacketParser(buffer);
                instanceId = parser.getRequestId();
                errorStatus = parser.getErrorStatus();
                errorIndex = parser.getErrorIndex();
                results = parser.getResults();
              } else {
                Version3PacketParser parser = new Version3PacketParser(authEngine, buffer);
                instanceId = parser.getRequestId();
                errorStatus = parser.getErrorStatus();
                errorIndex = parser.getErrorIndex();
                results = parser.getResults();
              }
            } catch (Exception e) {
              LOGGER.error("Invalid packet", e);
              return;
            }
           
            instanceMapper.handle(instanceId, errorStatus, errorIndex, results);
          }
         
          @Override
          public void failed(IOException e) {
            if (shouldCloseQueue) {
              re.shutdown();
              q.close();
            }
            if (instanceMappers.remove(instanceMapper)) {
              clientHandler.failed(e);
            }
          }
         
          @Override
          public void connected(final FailableCloseableByteBufferHandler write) {
            instanceMappers.add(instanceMapper);
           
            final SnmpWriter w = new SnmpWriter(write, community, authEngine);
           
            clientHandler.launched(new SnmpClientHandler.Callback() {
              @Override
              public void close() {
                if (instanceMappers.remove(instanceMapper)) {
                  instanceMapper.closedByUser();
                }
               
                write.close();

                if (shouldCloseQueue) {
                  re.shutdown();
                  q.close();
                }
              }
              @Override
              public void get(Oid oid, GetCallback callback) {
                Instance i = new Instance(instanceMapper, callback, w, oid, getLimit, bulkSize);
                instanceMapper.map(i);
                w.get(i.instanceId, oid);
              }
            });
          }
         
          @Override
          public void close() {
            if (shouldCloseQueue) {
              re.shutdown();
              q.close();
            }
            if (instanceMappers.remove(instanceMapper)) {
              instanceMapper.closedByPeer();
            }
          }
View Full Code Here

  private final WaitingTelnetClientCache ssh;
  private final SnmpClientCache snmp;
  private final PingClientCache ping;

  public AllAvailableScriptRunner() throws IOException {
    queue = new Queue();
    executorScriptRunner = new ExecutorScriptRunner();
   
    http = new HttpClient(queue, null);
   
    telnet = new WaitingTelnetClientCache(queue);
View Full Code Here

  }
 
  public Finished finish() {
    final HttpClient onClient;
    final boolean shouldCloseClient;
    final Queue q;
    final boolean shouldCloseQueue;
    if (client == null) {
      if (queue == null) {
        try {
          q = new Queue();
        } catch (IOException e) {
          LOGGER.error("Queue could not be created", e);
          return null;
        }
        shouldCloseQueue = true;
      } else {
        q = queue;
        shouldCloseQueue = false;
      }
      onClient = new HttpClient(q, trust);
      shouldCloseClient = true;
    } else {
      onClient = client;
      shouldCloseClient = false;
      q = null;
      shouldCloseQueue = false;
    }
   
    return new Finished() {
      @Override
      public void close() {
        if (shouldCloseQueue) {
          q.close();
        }
        if (shouldCloseClient) {
          onClient.close();
        }
      }
View Full Code Here

    this.exec = exec;
    return this;
  }
 
  public void connect(final ReadyConnection clientHandler) {
    final Queue q;
    final boolean shouldCloseQueue;
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        clientHandler.failed(e);
        return;
      }
      shouldCloseQueue = true;
    } else {
      q = queue;
      shouldCloseQueue = false;
    }

    final Address a;
    if (host != null) {
      if (port < 0) {
        a = new Address(host, address.getPort());
      } else {
        a = new Address(host, port);
      }
    } else {
      a = address;
    }

    q.post(new Runnable() {
      @Override
      public void run() {
        ByteBufferAllocator allocator = new OnceByteBufferAllocator();
        Ready ready = readyFactory.create(q, allocator);
        ready.connect(a, new ReadyConnection() {
          private void closeAll() {
            if (shouldCloseQueue) {
              q.close();
            }
          }

          @Override
          public void failed(IOException e) {
View Full Code Here

    this.readyFactory = readyFactory;
    return this;
  }
 
  public void connect(final FtpClientHandler clientHandler) {
    final Queue q;
    final boolean shouldCloseQueue;
    if (queue == null) {
      try {
        q = new Queue();
      } catch (IOException e) {
        clientHandler.failed(e);
        return;
      }
      shouldCloseQueue = true;
    } else {
      q = queue;
      shouldCloseQueue = false;
    }

    final Address a;
    if (host != null) {
      if (port < 0) {
        a = new Address(host, address.getPort());
      } else {
        a = new Address(host, port);
      }
    } else {
      a = address;
    }
   
    q.post(new Runnable() {
      @Override
      public void run() {
        final ByteBufferAllocator allocator = new OnceByteBufferAllocator();
        Ready ready = readyFactory.create(q, allocator);
        ready.connect(a, new ReadyConnection() {
          private FtpResponseReader reader = null;
          @Override
          public void handle(Address address, ByteBuffer buffer) {
            reader.handle(address, buffer);
          }
         
          @Override
          public void failed(IOException e) {
            if (shouldCloseQueue) {
              q.close();
            }
            clientHandler.failed(e);
          }
         
          @Override
          public void connected(FailableCloseableByteBufferHandler write) {
            reader = new FtpResponseReader(q, allocator, login, password, clientHandler, write);
            clientHandler.launched(new FtpClientHandler.Callback() {
              @Override
              public void close() {
                reader.close();
                if (shouldCloseQueue) {
                  q.close();
                }
              }
              @Override
              public void list(String path, ListCallback callback) {
                reader.list(path, callback);
              }
              @Override
              public void download(String path, DownloadCallback handler) {
                reader.download(path, handler);
              }
            });
          }
         
          @Override
          public void close() {
            if (shouldCloseQueue) {
              q.close();
            }
            reader.close();
          }
        });
      }
View Full Code Here

      }
    }
  }

  public void start() throws IOException {
    final Queue queue = new Queue();
    Executors.newSingleThreadExecutor().execute(new Runnable() {
      @Override
      public void run() {
        while (true) {
          try (ServerSocket ss = new ServerSocket(port)) {
View Full Code Here

TOP

Related Classes of com.davfx.ninio.common.Queue

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.