Search in sources :

Example 1 with ApnsNotification

use of com.notnoop.apns.ApnsNotification in project camel by apache.

the class ApnsProducer method notify.

private void notify(Exchange exchange) throws ApnsException {
    MessageType messageType = getHeaderMessageType(exchange, MessageType.STRING);
    if (messageType == MessageType.APNS_NOTIFICATION) {
        ApnsNotification apnsNotification = exchange.getIn().getBody(ApnsNotification.class);
        getEndpoint().getApnsService().push(apnsNotification);
    } else {
        constructNotificationAndNotify(exchange, messageType);
    }
}
Also used : ApnsNotification(com.notnoop.apns.ApnsNotification) MessageType(org.apache.camel.component.apns.model.MessageType)

Example 2 with ApnsNotification

use of com.notnoop.apns.ApnsNotification in project java-apns by notnoop.

the class ApnsConnectionImpl method testConnection.

public void testConnection() throws NetworkIOException {
    ApnsConnectionImpl testConnection = null;
    try {
        testConnection = new ApnsConnectionImpl(factory, host, port, proxy, proxyUsername, proxyPassword, reconnectPolicy.copy(), delegate);
        final ApnsNotification notification = new EnhancedApnsNotification(0, 0, new byte[] { 0 }, new byte[] { 0 });
        testConnection.sendMessage(notification);
    } finally {
        if (testConnection != null) {
            testConnection.close();
        }
    }
}
Also used : EnhancedApnsNotification(com.notnoop.apns.EnhancedApnsNotification) ApnsNotification(com.notnoop.apns.ApnsNotification) EnhancedApnsNotification(com.notnoop.apns.EnhancedApnsNotification)

Example 3 with ApnsNotification

use of com.notnoop.apns.ApnsNotification in project java-apns by notnoop.

the class ApnsConnectionCacheTest method cacheLengthNotification.

/**
     * Test to make sure that if the cache length is violated we get
     * a notification
     *
     * @throws InterruptedException
     */
@Test(timeout = 5000)
public void cacheLengthNotification() throws InterruptedException {
    server = new ApnsServerStub(FixedCertificates.serverContext().getServerSocketFactory());
    final CountDownLatch sync = new CountDownLatch(1);
    int ORIGINAL_CACHE_LENGTH = 100;
    final AtomicInteger modifiedCacheLength = new AtomicInteger();
    server.getWaitForError().acquire();
    server.start();
    ApnsService service = APNS.newService().withSSLContext(clientContext()).withGatewayDestination(LOCALHOST, server.getEffectiveGatewayPort()).withDelegate(new ApnsDelegate() {

        public void messageSent(ApnsNotification message, boolean resent) {
        }

        public void messageSendFailed(ApnsNotification message, Throwable e) {
        }

        public void connectionClosed(DeliveryError e, int messageIdentifier) {
        }

        public void cacheLengthExceeded(int newCacheLength) {
            modifiedCacheLength.set(newCacheLength);
            sync.countDown();
        }

        public void notificationsResent(int resendCount) {
        }
    }).build();
    server.stopAt(eMsg1.length() * 5 + eMsg2.length() + eMsg3.length() * 14);
    for (int i = 0; i < 5; ++i) {
        service.push(eMsg1);
    }
    service.push(eMsg2);
    for (int i = 0; i < 101; ++i) {
        service.push(eMsg3);
    }
    server.sendError(8, eMsg2.getIdentifier());
    server.getWaitForError().release();
    server.getMessages().acquire();
    sync.await();
    Assert.assertTrue(ORIGINAL_CACHE_LENGTH < modifiedCacheLength.get());
}
Also used : ApnsServerStub(com.notnoop.apns.utils.ApnsServerStub) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) DeliveryError(com.notnoop.apns.DeliveryError) ApnsNotification(com.notnoop.apns.ApnsNotification) SimpleApnsNotification(com.notnoop.apns.SimpleApnsNotification) EnhancedApnsNotification(com.notnoop.apns.EnhancedApnsNotification) CountDownLatch(java.util.concurrent.CountDownLatch) StartSendingApnsDelegate(com.notnoop.apns.StartSendingApnsDelegate) ApnsDelegate(com.notnoop.apns.ApnsDelegate) ApnsService(com.notnoop.apns.ApnsService)

Example 4 with ApnsNotification

use of com.notnoop.apns.ApnsNotification in project java-apns by notnoop.

the class ApnsConnectionCacheTest method handleReTransmissionError1Good1Bad2Good.

/**
     * Test2 to make sure that after rejected notification
     * in-flight notifications are re-transmitted
     *
     * @throws InterruptedException
     */
@Test(timeout = 5000)
public void handleReTransmissionError1Good1Bad2Good() throws InterruptedException {
    server = new ApnsServerStub(FixedCertificates.serverContext().getServerSocketFactory());
    final CountDownLatch sync = new CountDownLatch(6);
    final AtomicInteger numResent = new AtomicInteger();
    final AtomicInteger numSent = new AtomicInteger();
    final AtomicInteger numStartSend = new AtomicInteger();
    int EXPECTED_RESEND_COUNT = 2;
    int EXPECTED_SEND_COUNT = 3;
    server.getWaitForError().acquire();
    server.start();
    ApnsService service = APNS.newService().withSSLContext(clientContext()).withGatewayDestination(LOCALHOST, server.getEffectiveGatewayPort()).withDelegate(new StartSendingApnsDelegate() {

        public void startSending(final ApnsNotification message, final boolean resent) {
            if (!resent) {
                numStartSend.incrementAndGet();
            }
        }

        public void messageSent(ApnsNotification message, boolean resent) {
            if (!resent) {
                numSent.incrementAndGet();
            }
            sync.countDown();
        }

        public void messageSendFailed(ApnsNotification message, Throwable e) {
            numSent.decrementAndGet();
        }

        public void connectionClosed(DeliveryError e, int messageIdentifier) {
        }

        public void cacheLengthExceeded(int newCacheLength) {
        }

        public void notificationsResent(int resendCount) {
            numResent.set(resendCount);
        }
    }).build();
    server.stopAt(msg1.length() * 3 + eMsg2.length() * 2);
    service.push(msg1);
    service.push(eMsg2);
    service.push(eMsg1);
    service.push(msg2);
    server.sendError(8, eMsg2.getIdentifier());
    server.getWaitForError().release();
    server.getMessages().acquire();
    sync.await();
    Assert.assertEquals(EXPECTED_RESEND_COUNT, numResent.get());
    Assert.assertEquals(EXPECTED_SEND_COUNT, numSent.get());
    Assert.assertEquals(EXPECTED_SEND_COUNT + 1, numStartSend.get());
}
Also used : StartSendingApnsDelegate(com.notnoop.apns.StartSendingApnsDelegate) ApnsServerStub(com.notnoop.apns.utils.ApnsServerStub) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) DeliveryError(com.notnoop.apns.DeliveryError) ApnsNotification(com.notnoop.apns.ApnsNotification) SimpleApnsNotification(com.notnoop.apns.SimpleApnsNotification) EnhancedApnsNotification(com.notnoop.apns.EnhancedApnsNotification) CountDownLatch(java.util.concurrent.CountDownLatch) ApnsService(com.notnoop.apns.ApnsService)

Example 5 with ApnsNotification

use of com.notnoop.apns.ApnsNotification in project java-apns by notnoop.

the class ApnsConnectionCacheTest method handleTransmissionErrorInQueuedConnection.

/**
     * Test to make sure that after rejected notification
     * in-flight notifications are re-transmitted with a queued connection
     *
     * @throws InterruptedException
     */
@Ignore("Fails because old ApnsServerStub does not accept() on the connection socket for all the time.")
@Test(timeout = 10000)
public void handleTransmissionErrorInQueuedConnection() throws InterruptedException {
    server = new ApnsServerStub(FixedCertificates.serverContext().getServerSocketFactory());
    final AtomicInteger sync = new AtomicInteger(138);
    final AtomicInteger numResent = new AtomicInteger();
    final AtomicInteger numSent = new AtomicInteger();
    server.getWaitForError().acquire();
    server.start();
    ApnsService service = APNS.newService().withSSLContext(clientContext()).withGatewayDestination(LOCALHOST, server.getEffectiveGatewayPort()).asQueued().withDelegate(new ApnsDelegate() {

        public void messageSent(ApnsNotification message, boolean resent) {
            if (!resent) {
                numSent.incrementAndGet();
            }
            sync.getAndDecrement();
        }

        public void messageSendFailed(ApnsNotification message, Throwable e) {
            numSent.decrementAndGet();
            sync.incrementAndGet();
        }

        public void connectionClosed(DeliveryError e, int messageIdentifier) {
        }

        public void cacheLengthExceeded(int newCacheLength) {
        }

        public void notificationsResent(int resendCount) {
            numResent.set(resendCount);
            sync.getAndAdd(resendCount);
        }
    }).build();
    server.stopAt(eMsg3.length() * 50 + msg1.length() * 3 + eMsg2.length() * 2 + eMsg1.length() * 85);
    for (int i = 0; i < 50; ++i) {
        service.push(eMsg3);
    }
    service.push(msg1);
    service.push(eMsg2);
    service.push(eMsg1);
    service.push(msg2);
    for (int i = 0; i < 85; ++i) {
        service.push(eMsg1);
    }
    server.sendError(8, eMsg2.getIdentifier());
    server.getWaitForError().release();
    server.getMessages().acquire();
    while (sync.get() != 0) {
        Thread.yield();
    }
}
Also used : ApnsServerStub(com.notnoop.apns.utils.ApnsServerStub) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) DeliveryError(com.notnoop.apns.DeliveryError) ApnsNotification(com.notnoop.apns.ApnsNotification) SimpleApnsNotification(com.notnoop.apns.SimpleApnsNotification) EnhancedApnsNotification(com.notnoop.apns.EnhancedApnsNotification) StartSendingApnsDelegate(com.notnoop.apns.StartSendingApnsDelegate) ApnsDelegate(com.notnoop.apns.ApnsDelegate) ApnsService(com.notnoop.apns.ApnsService)

Aggregations

ApnsNotification (com.notnoop.apns.ApnsNotification)12 EnhancedApnsNotification (com.notnoop.apns.EnhancedApnsNotification)7 DeliveryError (com.notnoop.apns.DeliveryError)6 ApnsService (com.notnoop.apns.ApnsService)5 SimpleApnsNotification (com.notnoop.apns.SimpleApnsNotification)5 StartSendingApnsDelegate (com.notnoop.apns.StartSendingApnsDelegate)5 ApnsServerStub (com.notnoop.apns.utils.ApnsServerStub)5 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)5 CountDownLatch (java.util.concurrent.CountDownLatch)4 Test (org.junit.Test)3 ApnsDelegate (com.notnoop.apns.ApnsDelegate)2 NetworkIOException (com.notnoop.exceptions.NetworkIOException)2 ApnsDeliveryErrorException (com.notnoop.exceptions.ApnsDeliveryErrorException)1 EOFException (java.io.EOFException)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Queue (java.util.Queue)1 ConcurrentLinkedQueue (java.util.concurrent.ConcurrentLinkedQueue)1 MessageType (org.apache.camel.component.apns.model.MessageType)1