Skip to content

Commit 88578b2

Browse files
authored
Merge pull request #39 from polyapi/develop
Develop
2 parents 950a0cd + 07efe75 commit 88578b2

File tree

12 files changed

+81
-19
lines changed

12 files changed

+81
-19
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Java Client Library (beta)
22

3-
* Latest released version 0.12.0
4-
* Latest snapshot version 0.12.1-SNAPSHOT
3+
* Latest released version 0.13.0
4+
* Latest snapshot version 0.13.1-SNAPSHOT
55

66
## Introduction
77
Welcome my friends! This is the Poly API Java client GitHub page. If you are here, then it means you're familiar with what we do at Poly. If you aren't, you can always check [here](https://github.com/polyapi/poly-alpha).

commons/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>io.polyapi</groupId>
66
<artifactId>parent-pom</artifactId>
7-
<version>0.12.1-SNAPSHOT</version>
7+
<version>0.13.0-SNAPSHOT</version>
88
<relativePath>../parent-pom</relativePath>
99
</parent>
1010

commons/src/main/java/io/polyapi/commons/api/websocket/WebSocketClient.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ public interface WebSocketClient extends AutoCloseable {
2020
*/
2121
<T> Handle registerTrigger(String event, String handleId, Type eventType, PolyEventConsumer<T> trigger);
2222

23+
24+
/**
25+
* Registers an event on the server so that it triggers a consumer every time an event is dispatched and blocks the current thread.
26+
*
27+
* @param event The event to listen to.
28+
* @param handleId The ID of the emitter of the event in the server.
29+
* @param eventType The type of object to be handled by the consumer. This parameter is so that a proper casting can be done.
30+
* @param trigger The {@link Consumer} that will be triggered every time a listener comes. This should be a stateless object.
31+
* @param <T> The type of object that is received from the server.
32+
*/
33+
<T> void registerTriggerAndWait(String event, String handleId, Type eventType, PolyEventConsumer<T> trigger);
34+
2335
/**
2436
* Registers a listener for error messages.
2537
*
@@ -29,5 +41,14 @@ public interface WebSocketClient extends AutoCloseable {
2941
*/
3042
Handle registerErrorHandler(String path, Consumer<PolyErrorEvent> listener);
3143

44+
45+
/**
46+
* Registers a listener for error messages and blocks the current thread.
47+
*
48+
* @param path The path that will filter the messages.
49+
* @param listener The {@link Consumer} of {@link PolyErrorEvent}s that will work as a listener.
50+
*/
51+
void registerErrorHandlerAndWait(String path, Consumer<PolyErrorEvent> listener);
52+
3253
<T> Handle registerAuthFunctionEventHandler(String id, PolyEventConsumer<T> trigger);
3354
}

commons/src/main/java/io/polyapi/commons/internal/websocket/SocketIOWebSocketClient.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,27 @@ public <T> Handle registerTrigger(String event, String handleId, Type eventType,
6969
}
7070
String eventKey = format("%s:%s", event, handleId);
7171
return new EmitterHandle(eventKey, getSocket().on(eventKey, new PolyEventListener<>(event, handleId, jsonParser, EventMessage.class, message -> {
72-
log.debug("Parsing payload to {}.", eventType);
73-
T parsedInput = jsonParser.parseString(message.getBody(), eventType);
74-
log.debug("Input parsed. Passing it to listener.");
75-
trigger.accept(parsedInput, message.getHeaders(), message.getParams());
72+
log.debug("Parsing payload to {}.", eventType);
73+
T parsedInput = jsonParser.parseString(message.getBody(), eventType);
74+
log.debug("Input parsed. Passing it to listener.");
75+
trigger.accept(parsedInput, message.getHeaders(), message.getParams());
7676
})));
7777
} catch (InterruptedException | ExecutionException e) {
7878
throw new EventRegistrationException(event, handleId, e);
7979
}
8080
}
8181

82+
@Override
83+
public <T> void registerTriggerAndWait(String event, String handleId, Type eventType, PolyEventConsumer<T> trigger) {
84+
try (Handle handle = registerTrigger(event, handleId, eventType, trigger)) {
85+
synchronized (this) {
86+
this.wait();
87+
}
88+
} catch (InterruptedException e) {
89+
log.warn("Event listener for '{}' with ID '{}' interrupted.", event, handleId, e);
90+
}
91+
}
92+
8293
@Override
8394
public Handle registerErrorHandler(String path, Consumer<PolyErrorEvent> listener) {
8495
try {
@@ -102,6 +113,18 @@ public Handle registerErrorHandler(String path, Consumer<PolyErrorEvent> listene
102113
}
103114
}
104115

116+
117+
@Override
118+
public void registerErrorHandlerAndWait(String path, Consumer<PolyErrorEvent> listener) {
119+
try (Handle handle = registerErrorHandler(path, listener)) {
120+
synchronized (this) {
121+
this.wait();
122+
}
123+
} catch (InterruptedException e) {
124+
log.warn("Error listener for path '{}' interrupted.", path, e);
125+
}
126+
}
127+
105128
@Override
106129
public <T> Handle registerAuthFunctionEventHandler(String id, PolyEventConsumer<T> trigger) {
107130
return registerTrigger("", id, Object[].class, trigger);

library/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>io.polyapi</groupId>
66
<artifactId>parent-pom</artifactId>
7-
<version>0.12.1-SNAPSHOT</version>
7+
<version>0.13.0-SNAPSHOT</version>
88
<relativePath>../parent-pom</relativePath>
99
</parent>
1010
<artifactId>library</artifactId>

library/src/main/java/io/polyapi/client/internal/proxy/invocation/handler/PolyTriggerInvocationHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ public Object invoke(Object proxy, Method method, Object[] args) {
3131
log.debug("Executing method {} in proxy class {}.", method, proxy.getClass().getSimpleName());
3232
log.debug("Registering Poly trigger with ID '{}'.", polyData.value());
3333
log.debug("Event type: {}.", polyMetadata.paramTypes()[0]);
34-
return webSocketClient.registerTrigger("handleWebhookEvent", polyData.value(), Class.forName(polyMetadata.paramTypes()[0]), consumer);
34+
if (method.getName().equalsIgnoreCase(invokingClass.getSimpleName())) {
35+
webSocketClient.registerTriggerAndWait("handleWebhookEvent", polyData.value(), Class.forName(polyMetadata.paramTypes()[0]), consumer);
36+
return null;
37+
} else {
38+
return webSocketClient.registerTrigger("handleWebhookEvent", polyData.value(), Class.forName(polyMetadata.paramTypes()[0]), consumer);
39+
}
3540
} catch (ClassNotFoundException e) {
3641
throw new PolyApiLibraryException(e); // FIXME: Throw the appropriate exception.
3742
}

parent-pom/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>io.polyapi</groupId>
55
<artifactId>parent-pom</artifactId>
6-
<version>0.12.1-SNAPSHOT</version>
6+
<version>0.13.0-SNAPSHOT</version>
77
<packaging>pom</packaging>
88
<name>Poly API Java parent POM</name>
99
<url>https://polyapi.io</url>

polyapi-maven-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>io.polyapi</groupId>
66
<artifactId>parent-pom</artifactId>
7-
<version>0.12.1-SNAPSHOT</version>
7+
<version>0.13.0-SNAPSHOT</version>
88
<relativePath>../parent-pom</relativePath>
99
</parent>
1010
<artifactId>polyapi-maven-plugin</artifactId>

polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/createServerVariableMojo.java renamed to polyapi-maven-plugin/src/main/java/io/polyapi/plugin/mojo/CreateServerVariableMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
@Slf4j
1818
@Setter
1919
@Mojo(name = "create-server-variable", requiresProject = false)
20-
public class createServerVariableMojo extends PolyApiMojo {
20+
public class CreateServerVariableMojo extends PolyApiMojo {
2121
@Parameter(property = "name", required = true)
2222
private String name;
2323

polyapi-maven-plugin/src/main/resources/templates/ResolvedContext.hbs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,22 @@ public class {{className}} extends PolyContext {
8787
{{~/each}}
8888

8989
{{~#each webhookHandlerSpecifications}}
90-
public Handle {{this.name}}(Consumer<{{{this.eventType}}}> callback) {
91-
return this.{{this.name}}.{{this.name}}(callback);
90+
public Handle handle{{this.className}}(Consumer<{{{this.eventType}}}> callback) {
91+
return this.{{this.name}}.handle{{this.className}}(callback);
9292
}
9393

94-
public Handle {{this.name}}(PolyEventConsumer<{{{this.eventType}}}> callback) {
95-
return this.{{this.name}}.{{this.name}}(callback);
94+
public Handle handle{{this.className}}(PolyEventConsumer<{{{this.eventType}}}> callback) {
95+
return this.{{this.name}}.handle{{this.className}}(callback);
9696
}
97+
98+
public void {{this.name}}(Consumer<{{{this.eventType}}}> callback) {
99+
this.{{this.name}}.{{this.name}}(callback);
100+
}
101+
102+
public void {{this.name}}(PolyEventConsumer<{{{this.eventType}}}> callback) {
103+
this.{{this.name}}.{{this.name}}(callback);
104+
}
105+
97106
{{~/each}}
98107

99108
{{~#each specifications}}

0 commit comments

Comments
 (0)