mirror of https://github.com/renaissanceorg/dante
Compare commits
12 Commits
0df1de7b60
...
88b36b5e1e
Author | SHA1 | Date |
---|---|---|
Tristan B. Velloza Kildaire | 88b36b5e1e | |
Tristan B. Velloza Kildaire | 7b10478a36 | |
Tristan B. Velloza Kildaire | d6d9b40d41 | |
Tristan B. Velloza Kildaire | d0c0c4a7ed | |
Tristan B. Velloza Kildaire | 9406422a92 | |
Tristan B. Velloza Kildaire | 3c0d82fd85 | |
Tristan B. Velloza Kildaire | c3b90192e6 | |
Tristan B. Velloza Kildaire | 5704397b74 | |
Tristan B. Velloza Kildaire | dd12a719d5 | |
Tristan B. Velloza Kildaire | 113e793111 | |
Tristan B. Velloza Kildaire | 8bdaec9ded | |
Tristan B. Velloza Kildaire | aa2a0e3107 |
2
dub.json
2
dub.json
|
@ -4,7 +4,7 @@
|
|||
],
|
||||
"copyright": "Tristan B. Kildaire",
|
||||
"dependencies": {
|
||||
"davinci": ">=0.1.3",
|
||||
"davinci": ">=0.1.7",
|
||||
"gogga": ">=2.1.18",
|
||||
"guillotine": ">=0.2.1-alpha",
|
||||
"river": ">=0.3.7",
|
||||
|
|
|
@ -81,7 +81,7 @@ public class DanteClient
|
|||
{
|
||||
/* Start the tristanable manager */
|
||||
manager.start();
|
||||
version(dbg) { writeln("Dante staretd tristanable manager..."); }
|
||||
version(dbg) { writeln("Dante started tristanable manager..."); }
|
||||
}
|
||||
|
||||
public void stop()
|
||||
|
@ -98,21 +98,64 @@ public class DanteClient
|
|||
import davinci.c2s.test;
|
||||
import davinci;
|
||||
NopMessage testMessage = new NopMessage();
|
||||
testMessage.setTestField("Lekker Boetie");
|
||||
|
||||
BaseMessage msg = new BaseMessage(MessageType.CLIENT_TO_SERVER, CommandType.NOP_COMMAND, testMessage);
|
||||
|
||||
// TODO: Encode message
|
||||
// TODO: Send with tristanable
|
||||
// TODO: Wrap a tristanable `dequeue()` in a FutureTask via guillotine and return that
|
||||
return makeRequest(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a request and returns a future which
|
||||
* can be awaited on for when the request
|
||||
* is fulfilled server-side.
|
||||
*
|
||||
* This method automatically manages
|
||||
* the queueing for you.
|
||||
*
|
||||
* Params:
|
||||
* request = the request message
|
||||
* Returns: a `Future`
|
||||
*/
|
||||
private Future makeRequest(BaseMessage request)
|
||||
{
|
||||
// Obtain a unique queue for this request
|
||||
Queue uniqueQueue = this.manager.getUniqueQueue();
|
||||
|
||||
return makeRequest(request, uniqueQueue, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Makes a request described by the provided message
|
||||
* which, we will then return a future which will
|
||||
* wait for a reply on the queue provided.
|
||||
*
|
||||
* Params:
|
||||
* request = the request message
|
||||
* responseQueue = the queue which the future
|
||||
* should await a reply from on
|
||||
* releaseAfterUse = whether or not to automatically
|
||||
* deregister the provided queue after completion. Default
|
||||
* is `false`.
|
||||
*
|
||||
* Returns: a `Future`
|
||||
*/
|
||||
private Future makeRequest(BaseMessage request, Queue responseQueue, bool releaseAfterUse = false)
|
||||
{
|
||||
BaseMessage doRequest()
|
||||
{
|
||||
TaggedMessage message = new TaggedMessage(uniqueQueue.getID(), msg.encode());
|
||||
TaggedMessage message = new TaggedMessage(responseQueue.getID(), request.encode());
|
||||
this.manager.sendMessage(message);
|
||||
|
||||
TaggedMessage response = uniqueQueue.dequeue();
|
||||
TaggedMessage response = responseQueue.dequeue();
|
||||
|
||||
if(releaseAfterUse)
|
||||
{
|
||||
// De-register queue here to prevent resource leak
|
||||
// ... and allow queue id recycling
|
||||
this.manager.releaseQueue(responseQueue);
|
||||
}
|
||||
|
||||
return BaseMessage.decode(response.getPayload());
|
||||
}
|
||||
|
||||
|
@ -120,7 +163,6 @@ public class DanteClient
|
|||
|
||||
return future;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue