Search in sources :

Example 6 with HCONV

use of com.sun.jna.platform.win32.Ddeml.HCONV in project jna by java-native-access.

the class DdemlUtilTest method testPoke.

@Test
public void testPoke() throws InterruptedException {
    final String serviceName = "TestService";
    final String topicName = "TestTopic";
    final String itemName = "TestItem";
    final String testValue = "Execute�������";
    final CountDownLatch pokeReceived = new CountDownLatch(1);
    StandaloneDdeClient client = null;
    StandaloneDdeClient server = null;
    try {
        client = new StandaloneDdeClient() {

            {
                this.initialize(Ddeml.APPCMD_CLIENTONLY | Ddeml.CBF_SKIP_REGISTRATIONS | Ddeml.CBF_SKIP_UNREGISTRATIONS);
            }
        };
        server = new StandaloneDdeClient() {

            private final ConnectHandler connectHandler = new ConnectHandler() {

                public boolean onConnect(int transactionType, HSZ topic, HSZ service, Ddeml.CONVCONTEXT convcontext, boolean sameInstance) {
                    return topicName.equals(queryString(topic));
                }
            };

            private final PokeHandler pokeHandler = new PokeHandler() {

                @Override
                public int onPoke(int transactionType, int dataFormat, HCONV hconv, HSZ topic, HSZ item, Ddeml.HDDEDATA hdata) {
                    Pointer[] pointer = new Pointer[] { accessData(hdata, null) };
                    try {
                        String commandString = pointer[0].getWideString(0);
                        if (testValue.equals(commandString) && queryString(topic).equals(topicName) && queryString(item).equals(itemName)) {
                            pokeReceived.countDown();
                            return Ddeml.DDE_FACK;
                        }
                    } finally {
                        synchronized (pointer) {
                        }
                    }
                    return Ddeml.DDE_FNOTPROCESSED;
                }
            };

            {
                registerConnectHandler(connectHandler);
                registerPokeHandler(pokeHandler);
                this.initialize(Ddeml.APPCMD_FILTERINITS | Ddeml.CBF_SKIP_ALLNOTIFICATIONS);
            }
        };
        server.nameService(serviceName, Ddeml.DNS_REGISTER);
        IDdeConnection con = client.connect(serviceName, topicName, null);
        Memory mem = new Memory((testValue.length() + 1) * 2);
        mem.setWideString(0, testValue);
        con.poke(mem, (int) mem.size(), itemName, WinUser.CF_UNICODETEXT, 5 * 1000, null, null);
        assertTrue(pokeReceived.await(5, TimeUnit.SECONDS));
    } finally {
        closeQuitely(client);
        closeQuitely(server);
    }
}
Also used : Memory(com.sun.jna.Memory) HCONV(com.sun.jna.platform.win32.Ddeml.HCONV) Pointer(com.sun.jna.Pointer) CountDownLatch(java.util.concurrent.CountDownLatch) HSZ(com.sun.jna.platform.win32.Ddeml.HSZ) ConnectHandler(com.sun.jna.platform.win32.DdemlUtil.ConnectHandler) PokeHandler(com.sun.jna.platform.win32.DdemlUtil.PokeHandler) HDDEDATA(com.sun.jna.platform.win32.Ddeml.HDDEDATA) StandaloneDdeClient(com.sun.jna.platform.win32.DdemlUtil.StandaloneDdeClient) IDdeConnection(com.sun.jna.platform.win32.DdemlUtil.IDdeConnection) Test(org.junit.Test)

Example 7 with HCONV

use of com.sun.jna.platform.win32.Ddeml.HCONV in project jna by java-native-access.

the class DdemlUtilTest method testAbandonTransaction.

@Test
public void testAbandonTransaction() throws InterruptedException {
    final String serviceName = "TestService";
    final String topicName = "TestTopic";
    final String testExecute = "Execute�������";
    final CountDownLatch allTransactionsInvoked = new CountDownLatch(1);
    final CountDownLatch executesProcessed = new CountDownLatch(3);
    StandaloneDdeClient client = null;
    StandaloneDdeClient server = null;
    try {
        client = new StandaloneDdeClient() {

            private final XactCompleteHandler xactCompleteHandler = new XactCompleteHandler() {

                public void onXactComplete(int transactionType, int dataFormat, HCONV hConv, HSZ topic, HSZ item, HDDEDATA hdata, ULONG_PTR transactionIdentifier, ULONG_PTR statusFlag) {
                    executesProcessed.countDown();
                }
            };

            {
                registerXactCompleteHandler(xactCompleteHandler);
                this.initialize(Ddeml.APPCMD_CLIENTONLY | Ddeml.CBF_SKIP_REGISTRATIONS | Ddeml.CBF_SKIP_UNREGISTRATIONS);
            }
        };
        server = new StandaloneDdeClient() {

            private final ConnectHandler connectHandler = new ConnectHandler() {

                public boolean onConnect(int transactionType, HSZ topic, HSZ service, Ddeml.CONVCONTEXT convcontext, boolean sameInstance) {
                    return topicName.equals(queryString(topic));
                }
            };

            private final ExecuteHandler executeHandler = new ExecuteHandler() {

                public int onExecute(int transactionType, HCONV hconv, HSZ topic, Ddeml.HDDEDATA commandStringData) {
                    try {
                        if (!allTransactionsInvoked.await(5, TimeUnit.SECONDS)) {
                            return Ddeml.DDE_FNOTPROCESSED;
                        }
                        Pointer[] pointer = new Pointer[] { accessData(commandStringData, null) };
                        try {
                            String commandString = pointer[0].getWideString(0);
                            if (testExecute.equals(commandString) && queryString(topic).equals(topicName)) {
                                return Ddeml.DDE_FACK;
                            }
                        } finally {
                            synchronized (pointer) {
                                unaccessData(commandStringData);
                            }
                        }
                        return Ddeml.DDE_FNOTPROCESSED;
                    } catch (InterruptedException ex) {
                        Logger.getLogger(DdemlUtilTest.class.getName()).log(Level.SEVERE, null, ex);
                        return Ddeml.DDE_FNOTPROCESSED;
                    }
                }
            };

            {
                registerConnectHandler(connectHandler);
                registerExecuteHandler(executeHandler);
                this.initialize(Ddeml.APPCMD_FILTERINITS | Ddeml.CBF_SKIP_ALLNOTIFICATIONS);
            }
        };
        server.nameService(serviceName, Ddeml.DNS_REGISTER);
        IDdeConnection con = client.connect(serviceName, topicName, null);
        WinDef.DWORDByReference result = new WinDef.DWORDByReference();
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, result, null);
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, result, null);
        int transactionId2 = result.getValue().intValue();
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, result, null);
        con.abandonTransaction(transactionId2);
        allTransactionsInvoked.countDown();
        assertFalse(executesProcessed.await(2, TimeUnit.SECONDS));
        assertThat(executesProcessed.getCount(), is(1L));
    } finally {
        closeQuitely(client);
        closeQuitely(server);
    }
}
Also used : HCONV(com.sun.jna.platform.win32.Ddeml.HCONV) Pointer(com.sun.jna.Pointer) CountDownLatch(java.util.concurrent.CountDownLatch) ULONG_PTR(com.sun.jna.platform.win32.BaseTSD.ULONG_PTR) HSZ(com.sun.jna.platform.win32.Ddeml.HSZ) ConnectHandler(com.sun.jna.platform.win32.DdemlUtil.ConnectHandler) ExecuteHandler(com.sun.jna.platform.win32.DdemlUtil.ExecuteHandler) HDDEDATA(com.sun.jna.platform.win32.Ddeml.HDDEDATA) StandaloneDdeClient(com.sun.jna.platform.win32.DdemlUtil.StandaloneDdeClient) XactCompleteHandler(com.sun.jna.platform.win32.DdemlUtil.XactCompleteHandler) IDdeConnection(com.sun.jna.platform.win32.DdemlUtil.IDdeConnection) Test(org.junit.Test)

Example 8 with HCONV

use of com.sun.jna.platform.win32.Ddeml.HCONV in project jna by java-native-access.

the class DdemlUtilTest method testConnectListDisconnectListQueryNextServer.

@Test
public void testConnectListDisconnectListQueryNextServer() throws InterruptedException {
    final String serviceName = "TestService";
    final String topicName = "TestTopic";
    final CountDownLatch connectLatch1 = new CountDownLatch(1);
    final CountDownLatch disconnectLatch1 = new CountDownLatch(1);
    final CountDownLatch connectLatch2 = new CountDownLatch(1);
    final CountDownLatch disconnectLatch2 = new CountDownLatch(1);
    StandaloneDdeClient client = null;
    StandaloneDdeClient server1 = null;
    StandaloneDdeClient server2 = null;
    try {
        client = new StandaloneDdeClient() {

            {
                this.initialize(Ddeml.APPCMD_CLIENTONLY | Ddeml.CBF_SKIP_REGISTRATIONS | Ddeml.CBF_SKIP_UNREGISTRATIONS);
            }
        };
        class Server extends StandaloneDdeClient {

            private final CountDownLatch connectLatch;

            private final CountDownLatch disconnectLatch;

            private final ConnectHandler connectHandler = new ConnectHandler() {

                public boolean onConnect(int transactionType, HSZ topic, HSZ service, Ddeml.CONVCONTEXT convcontext, boolean sameInstance) {
                    return topicName.equals(queryString(topic));
                }
            };

            private final ConnectConfirmHandler connectConfirmHandler = new ConnectConfirmHandler() {

                public void onConnectConfirm(int transactionType, Ddeml.HCONV hconv, HSZ topic, HSZ service, boolean sameInstance) {
                    if (topicName.equals(queryString(topic))) {
                        connectLatch.countDown();
                    }
                }
            };

            private final DisconnectHandler disconnectHandler = new DisconnectHandler() {

                public void onDisconnect(int transactionType, HCONV hconv, boolean sameInstance) {
                    disconnectLatch.countDown();
                }
            };

            private final WildconnectHandler wildconnectHandler = new WildconnectHandler() {

                public List<Ddeml.HSZPAIR> onWildconnect(int transactionType, HSZ topic, HSZ service, Ddeml.CONVCONTEXT convcontext, boolean sameInstance) {
                    return Collections.singletonList(new Ddeml.HSZPAIR(service, topic));
                }
            };

            public Server(CountDownLatch connectLatch, CountDownLatch disconnectLatch) {
                registerConnectHandler(connectHandler);
                registerConnectConfirmHandler(connectConfirmHandler);
                registerDisconnectHandler(disconnectHandler);
                registerWildconnectHandler(wildconnectHandler);
                this.initialize(Ddeml.APPCMD_FILTERINITS | Ddeml.CBF_SKIP_REGISTRATIONS | Ddeml.CBF_SKIP_UNREGISTRATIONS);
                this.connectLatch = connectLatch;
                this.disconnectLatch = disconnectLatch;
            }
        }
        ;
        server1 = new Server(connectLatch1, disconnectLatch1);
        server2 = new Server(connectLatch2, disconnectLatch2);
        server1.nameService(serviceName, Ddeml.DNS_REGISTER);
        server2.nameService(serviceName, Ddeml.DNS_REGISTER);
        DdemlUtil.IDdeConnectionList connectionList = client.connectList(serviceName, topicName, null, null);
        IDdeConnection con1 = connectionList.queryNextServer(null);
        assertNotNull(con1);
        IDdeConnection con2 = connectionList.queryNextServer(con1);
        assertNotNull(con2);
        IDdeConnection con3 = connectionList.queryNextServer(con2);
        assertNull(con3);
        connectionList.close();
        assertTrue(connectLatch1.await(5, TimeUnit.SECONDS));
        assertTrue(connectLatch2.await(5, TimeUnit.SECONDS));
        assertTrue(disconnectLatch1.await(5, TimeUnit.SECONDS));
        assertTrue(disconnectLatch2.await(5, TimeUnit.SECONDS));
    } finally {
        closeQuitely(client);
        closeQuitely(server1);
        closeQuitely(server2);
    }
}
Also used : WildconnectHandler(com.sun.jna.platform.win32.DdemlUtil.WildconnectHandler) DisconnectHandler(com.sun.jna.platform.win32.DdemlUtil.DisconnectHandler) HCONV(com.sun.jna.platform.win32.Ddeml.HCONV) ConnectConfirmHandler(com.sun.jna.platform.win32.DdemlUtil.ConnectConfirmHandler) CountDownLatch(java.util.concurrent.CountDownLatch) HSZ(com.sun.jna.platform.win32.Ddeml.HSZ) ConnectHandler(com.sun.jna.platform.win32.DdemlUtil.ConnectHandler) StandaloneDdeClient(com.sun.jna.platform.win32.DdemlUtil.StandaloneDdeClient) HCONV(com.sun.jna.platform.win32.Ddeml.HCONV) List(java.util.List) IDdeConnection(com.sun.jna.platform.win32.DdemlUtil.IDdeConnection) Test(org.junit.Test)

Example 9 with HCONV

use of com.sun.jna.platform.win32.Ddeml.HCONV in project jna by java-native-access.

the class DdemlUtilTest method testQueryConvInfoSetUserHandle.

@Test
public void testQueryConvInfoSetUserHandle() throws InterruptedException {
    final String serviceName = "TestService";
    final String topicName = "TestTopic";
    final String testExecute = "Execute�������";
    final CountDownLatch executesProcessed = new CountDownLatch(1);
    StandaloneDdeClient client = null;
    StandaloneDdeClient server = null;
    try {
        client = new StandaloneDdeClient() {

            private final XactCompleteHandler xactCompleteHandler = new XactCompleteHandler() {

                public void onXactComplete(int transactionType, int dataFormat, HCONV hConv, HSZ topic, HSZ item, HDDEDATA hdata, ULONG_PTR transactionIdentifier, ULONG_PTR statusFlag) {
                    CONVINFO convInfo = wrap(hConv).queryConvInfo(transactionIdentifier.intValue());
                    if (convInfo.hUser.intValue() == 42) {
                        executesProcessed.countDown();
                    }
                }
            };

            {
                registerXactCompleteHandler(xactCompleteHandler);
                this.initialize(Ddeml.APPCMD_CLIENTONLY | Ddeml.CBF_SKIP_REGISTRATIONS | Ddeml.CBF_SKIP_UNREGISTRATIONS);
            }
        };
        server = new StandaloneDdeClient() {

            private final ConnectHandler connectHandler = new ConnectHandler() {

                public boolean onConnect(int transactionType, HSZ topic, HSZ service, Ddeml.CONVCONTEXT convcontext, boolean sameInstance) {
                    return topicName.equals(queryString(topic));
                }
            };

            private final ExecuteHandler executeHandler = new ExecuteHandler() {

                public int onExecute(int transactionType, HCONV hconv, HSZ topic, Ddeml.HDDEDATA commandStringData) {
                    Pointer[] pointer = new Pointer[] { accessData(commandStringData, null) };
                    try {
                        String commandString = pointer[0].getWideString(0);
                        if (testExecute.equals(commandString) && queryString(topic).equals(topicName)) {
                            return Ddeml.DDE_FACK;
                        }
                    } finally {
                        synchronized (pointer) {
                            unaccessData(commandStringData);
                        }
                    }
                    return Ddeml.DDE_FNOTPROCESSED;
                }
            };

            {
                registerConnectHandler(connectHandler);
                registerExecuteHandler(executeHandler);
                this.initialize(Ddeml.APPCMD_FILTERINITS | Ddeml.CBF_SKIP_ALLNOTIFICATIONS);
            }
        };
        server.nameService(serviceName, Ddeml.DNS_REGISTER);
        IDdeConnection con = client.connect(serviceName, topicName, null);
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, null, new BaseTSD.DWORD_PTR(42L));
        assertTrue(executesProcessed.await(3, TimeUnit.SECONDS));
    } finally {
        closeQuitely(client);
        closeQuitely(server);
    }
}
Also used : HCONV(com.sun.jna.platform.win32.Ddeml.HCONV) Pointer(com.sun.jna.Pointer) CountDownLatch(java.util.concurrent.CountDownLatch) ULONG_PTR(com.sun.jna.platform.win32.BaseTSD.ULONG_PTR) HSZ(com.sun.jna.platform.win32.Ddeml.HSZ) CONVINFO(com.sun.jna.platform.win32.Ddeml.CONVINFO) ConnectHandler(com.sun.jna.platform.win32.DdemlUtil.ConnectHandler) ExecuteHandler(com.sun.jna.platform.win32.DdemlUtil.ExecuteHandler) HDDEDATA(com.sun.jna.platform.win32.Ddeml.HDDEDATA) StandaloneDdeClient(com.sun.jna.platform.win32.DdemlUtil.StandaloneDdeClient) XactCompleteHandler(com.sun.jna.platform.win32.DdemlUtil.XactCompleteHandler) IDdeConnection(com.sun.jna.platform.win32.DdemlUtil.IDdeConnection) Test(org.junit.Test)

Example 10 with HCONV

use of com.sun.jna.platform.win32.Ddeml.HCONV in project jna by java-native-access.

the class DdemlUtilTest method testEnableCallback.

@Test
public void testEnableCallback() throws InterruptedException {
    final String serviceName = "TestService";
    final String topicName = "TestTopic";
    final String testExecute = "Execute�������";
    final CountDownLatch executesProcessed = new CountDownLatch(3);
    StandaloneDdeClient client = null;
    StandaloneDdeClient server = null;
    try {
        client = new StandaloneDdeClient() {

            private final XactCompleteHandler xactCompleteHandler = new XactCompleteHandler() {

                public void onXactComplete(int transactionType, int dataFormat, HCONV hConv, HSZ topic, HSZ item, HDDEDATA hdata, ULONG_PTR transactionIdentifier, ULONG_PTR statusFlag) {
                    executesProcessed.countDown();
                }
            };

            {
                registerXactCompleteHandler(xactCompleteHandler);
                this.initialize(Ddeml.APPCMD_CLIENTONLY | Ddeml.CBF_SKIP_REGISTRATIONS | Ddeml.CBF_SKIP_UNREGISTRATIONS);
            }
        };
        server = new StandaloneDdeClient() {

            private final ConnectHandler connectHandler = new ConnectHandler() {

                public boolean onConnect(int transactionType, HSZ topic, HSZ service, Ddeml.CONVCONTEXT convcontext, boolean sameInstance) {
                    return topicName.equals(queryString(topic));
                }
            };

            private final ExecuteHandler executeHandler = new ExecuteHandler() {

                public int onExecute(int transactionType, HCONV hconv, HSZ topic, Ddeml.HDDEDATA commandStringData) {
                    Pointer[] pointer = new Pointer[] { accessData(commandStringData, null) };
                    try {
                        String commandString = pointer[0].getWideString(0);
                        if (testExecute.equals(commandString) && queryString(topic).equals(topicName)) {
                            return Ddeml.DDE_FACK;
                        }
                    } finally {
                        synchronized (pointer) {
                            unaccessData(commandStringData);
                        }
                    }
                    return Ddeml.DDE_FNOTPROCESSED;
                }
            };

            {
                registerConnectHandler(connectHandler);
                registerExecuteHandler(executeHandler);
                this.initialize(Ddeml.APPCMD_FILTERINITS | Ddeml.CBF_SKIP_ALLNOTIFICATIONS);
            }
        };
        server.nameService(serviceName, Ddeml.DNS_REGISTER);
        server.enableCallback(Ddeml.EC_DISABLE);
        assertThat(server.enableCallback(Ddeml.EC_QUERYWAITING), is(false));
        IDdeConnection con = client.connect(serviceName, topicName, null);
        WinDef.DWORDByReference result = new WinDef.DWORDByReference();
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, result, null);
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, result, null);
        con.execute(testExecute, Ddeml.TIMEOUT_ASYNC, result, null);
        assertThat(server.enableCallback(Ddeml.EC_QUERYWAITING), is(true));
        server.enableCallback(Ddeml.EC_ENABLEALL);
        assertTrue(executesProcessed.await(3, TimeUnit.SECONDS));
    } finally {
        closeQuitely(client);
        closeQuitely(server);
    }
}
Also used : HCONV(com.sun.jna.platform.win32.Ddeml.HCONV) Pointer(com.sun.jna.Pointer) CountDownLatch(java.util.concurrent.CountDownLatch) ULONG_PTR(com.sun.jna.platform.win32.BaseTSD.ULONG_PTR) HSZ(com.sun.jna.platform.win32.Ddeml.HSZ) ConnectHandler(com.sun.jna.platform.win32.DdemlUtil.ConnectHandler) ExecuteHandler(com.sun.jna.platform.win32.DdemlUtil.ExecuteHandler) HDDEDATA(com.sun.jna.platform.win32.Ddeml.HDDEDATA) StandaloneDdeClient(com.sun.jna.platform.win32.DdemlUtil.StandaloneDdeClient) XactCompleteHandler(com.sun.jna.platform.win32.DdemlUtil.XactCompleteHandler) IDdeConnection(com.sun.jna.platform.win32.DdemlUtil.IDdeConnection) Test(org.junit.Test)

Aggregations

HSZ (com.sun.jna.platform.win32.Ddeml.HSZ)12 Test (org.junit.Test)12 HDDEDATA (com.sun.jna.platform.win32.Ddeml.HDDEDATA)10 HCONV (com.sun.jna.platform.win32.Ddeml.HCONV)9 ConnectHandler (com.sun.jna.platform.win32.DdemlUtil.ConnectHandler)9 IDdeConnection (com.sun.jna.platform.win32.DdemlUtil.IDdeConnection)9 StandaloneDdeClient (com.sun.jna.platform.win32.DdemlUtil.StandaloneDdeClient)9 CountDownLatch (java.util.concurrent.CountDownLatch)9 Pointer (com.sun.jna.Pointer)8 Memory (com.sun.jna.Memory)5 ExecuteHandler (com.sun.jna.platform.win32.DdemlUtil.ExecuteHandler)4 ULONG_PTR (com.sun.jna.platform.win32.BaseTSD.ULONG_PTR)3 DdeCallback (com.sun.jna.platform.win32.Ddeml.DdeCallback)3 XactCompleteHandler (com.sun.jna.platform.win32.DdemlUtil.XactCompleteHandler)3 DWORDByReference (com.sun.jna.platform.win32.WinDef.DWORDByReference)3 PVOID (com.sun.jna.platform.win32.WinDef.PVOID)3 ConnectConfirmHandler (com.sun.jna.platform.win32.DdemlUtil.ConnectConfirmHandler)2 DisconnectHandler (com.sun.jna.platform.win32.DdemlUtil.DisconnectHandler)2 CONVINFO (com.sun.jna.platform.win32.Ddeml.CONVINFO)1 AdvdataHandler (com.sun.jna.platform.win32.DdemlUtil.AdvdataHandler)1