For sure:
https://java.net/people/986467-jmaasing
thanks a lot.
2014-06-12 0:26 GMT+02:00 Oleksiy Stashok <oleksiy.stashok_at_oracle.com>:
> Unfortunately there's no pull requests in JIRA AFAIK.
> Can you pls. create a java.net id and join the project, so I can give you
> a developer permission?
>
> Thank you.
>
> WBR,
> Alexey.
>
>
> On 11.06.14 14:01, Johan Maasing wrote:
>
> 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
>>
>>
>>
>
>