Is there some system for pull requests on Kenai? I couldn't find a way to
send you my proposal without pushing to master (which I ofc aren't allowed
to do).
2014-06-11 3:44 GMT+02:00 Oleksiy Stashok <oleksiy.stashok_at_oracle.com>:
> Thanks a lot Johan!
>
> We can keep this sample in our mailing list archive, or, if you have time,
> you can consider adding it to Grizzly documentation
> git://java.net/grizzly~site
>
> I was thinking about adding a cookbook chapter to our documentation with
> useful samples.
> You can find the folder src/site/markdown with the documentation *.md
> files (markdown format) and add one more chapter (for example cookbook.md
> ).
>
> Thank you.
>
> WBR,
> Alexey.
>
>
>
> On 10.06.14 02:56, Johan Maasing wrote:
>
> I'm learning Grizzly and with help from the mailing list I finally got a
> little multi-threaded client running. Hope this example seems like "best
> practice" and can be informative to others.
>
> public class CallbackClient {
> private final static int NUMBER_OF_CLIENT_THREADS = 10;
> private final CountDownLatch finishLatch = new
> CountDownLatch(NUMBER_OF_CLIENT_THREADS);
> private TCPNIOTransport transport;
> private final Attribute<CallbackListener> listenerAttribute =
>
> Grizzly.DEFAULT_ATTRIBUTE_BUILDER.createAttribute("listenerAttribute");
>
> public static void main(String... args) throws InterruptedException,
> IOException {
> CallbackClient app = new CallbackClient();
> app.startup();
> app.run();
> }
>
> private void run() throws InterruptedException {
> for (int n = 0; n < NUMBER_OF_CLIENT_THREADS; n++) {
> final String listenerID = "Listener: " + n ;
> final String message = "Hello from client: " + n + "\n";
> Thread clientThread = new Thread(() -> {
> final GrizzlyFuture<Connection> connectionGrizzlyFuture =
> transport.connect("127.0.0.1", 5431);
> try {
> final Connection connection =
> connectionGrizzlyFuture.get();
> listenerAttribute.set(connection, (CallbackResult
> result) -> {
> System.out.println(listenerID + " callback
> result: " + result.message);
> finishLatch.countDown();
> });
> connection.write(message);
> } catch (InterruptedException | ExecutionException e) {
> e.printStackTrace();
> }
> }
> );
> clientThread.start();
> }
>
> finishLatch.await();
> }
>
> private void startup() throws IOException {
>
> FilterChainBuilder clientFilterChainBuilder =
> FilterChainBuilder.stateless();
> clientFilterChainBuilder.add(new TransportFilter());
> clientFilterChainBuilder.add(new
> StringFilter(Charset.defaultCharset(), "\n"));
> clientFilterChainBuilder.add(new
> CallbackFilter(listenerAttribute));
> transport = TCPNIOTransportBuilder.newInstance().build();
> transport.setProcessor(clientFilterChainBuilder.build());
> transport.start();
> }
>
> public static class CallbackFilter extends BaseFilter {
> private final Attribute<CallbackListener> listenerAttribute;
>
> public CallbackFilter(Attribute<CallbackListener>
> listenerAttribute) {
> this.listenerAttribute = listenerAttribute;
> }
>
> @Override
> public NextAction handleRead(FilterChainContext ctx) throws
> IOException {
> final String message = ctx.getMessage();
> final CallbackListener callbackListener =
> listenerAttribute.get(ctx.getConnection());
> callbackListener.callback(new CallbackResult(message));
> return ctx.getStopAction();
> }
> }
> }
>
>
> Here is an "old-school" blocking IO server that can be used to test the
> client.
> public class EchoServer {
> boolean keepRunning = true;
>
> public static void main(String[] args) throws Exception {
> EchoServer app = new EchoServer();
> app.run();
> }
>
> private void run() throws IOException {
> ServerSocket ss = new ServerSocket(5431);
> while (keepRunning) {
> final Socket socket = ss.accept();
> System.out.println("Server accepted a connection");
> Thread clientThread = new Thread(() -> {
> try {
> BufferedReader in = new BufferedReader(new
> InputStreamReader(socket.getInputStream(), "UTF-8"));
> final String clientMessage = in.readLine();
> final String outMessage = "You said: " + clientMessage
> + "\n";
> System.out.print(outMessage);
> OutputStream outs = socket.getOutputStream() ;
> outs.write(outMessage.getBytes("UTF-8"));
> outs.flush();
> outs.close();
> in.close();
> socket.close();
> } catch (IOException e) {
> e.printStackTrace();
> keepRunning = false;
> }
> });
> clientThread.start();
> }
> }
>
> }
>
> Cheers,
> Johan
>
>
>