Compare commits

...

3 Commits

Author SHA1 Message Date
Tristan B. Velloza Kildaire 8040bde4e9 Dub
- Added `niknaks` dependency

Client (unittests)

- Use `dumpArray`
2023-11-10 18:24:11 +02:00
Tristan B. Velloza Kildaire 3479d380c3 Client
- Added authentication command support
- Added channel enumeration support
- Added some helper methods for the channel enumeration support

Client (unittests)

- Added unittests for the above
2023-11-10 15:26:03 +02:00
Tristan B. Velloza Kildaire 7f467b5385 Dub
- USe at least version `0.1.11` of `davinci`
2023-11-10 12:48:41 +02:00
2 changed files with 78 additions and 4 deletions

View File

@ -4,9 +4,10 @@
],
"copyright": "Tristan B. Kildaire",
"dependencies": {
"davinci": "~master",
"davinci": ">=0.1.11",
"gogga": ">=2.1.18",
"guillotine": ">=0.2.1-alpha",
"niknaks": ">=0.6.0",
"river": ">=0.3.7",
"tristanable": ">=4.0.0-beta"
},

View File

@ -99,15 +99,56 @@ public class DanteClient
import davinci;
NopMessage testMessage = new NopMessage();
testMessage.setTestField("Lekker Boetie");
import std.stdio;
writeln(testMessage.getEncoded());
BaseMessage msg = new BaseMessage(MessageType.CLIENT_TO_SERVER, CommandType.NOP_COMMAND, testMessage);
return makeRequest(msg);
}
public Future authenticate(string username, string password)
{
import davinci.c2s.auth;
import davinci;
AuthMessage authMessage = new AuthMessage();
authMessage.setUsername(username);
authMessage.setPassword(password);
BaseMessage msg = new BaseMessage(MessageType.CLIENT_TO_SERVER, CommandType.AUTH_COMMAND, authMessage);
// TODO: We should handle auth here for the user, instead of just returning a future?
return makeRequest(msg);
}
public Future enumerateChannels_imp(ulong offset, ubyte limit)
{
import davinci.c2s.channels : ChannelEnumerateRequest;
import davinci;
ChannelEnumerateRequest chanEnumReq = new ChannelEnumerateRequest();
BaseMessage msg = new BaseMessage(MessageType.CLIENT_TO_SERVER, CommandType.CHANNELS_ENUMERATE_REQ, chanEnumReq);
// TODO: We should handle auth here for the user, instead of just returning a future?
return makeRequest(msg);
}
public string[] enumerateChannels(ulong offset, ubyte limit)
{
import davinci.c2s.channels : ChannelEnumerateReply;
BaseMessage response = cast(BaseMessage)enumerateChannels_imp(offset, limit).await().getValue().value.object;
ChannelEnumerateReply responseCommand = cast(ChannelEnumerateReply)response.getCommand();
return responseCommand.getChannels();
}
public string[] enumerateChannels()
{
return enumerateChannels(0, 0);
}
/**
* Makes a request and returns a future which
* can be awaited on for when the request
@ -190,5 +231,37 @@ unittest
writeln("Awaitinf future... [done]");
writeln("Future result: ", res.getValue().value.object);
client.stop();
}
unittest
{
DanteClient client = new DanteClient(new UnixAddress("/tmp/renaissance.sock"));
client.start();
Future fut = client.authenticate("deavmi", "testpassword");
writeln("Awaitinf future...");
Result res = fut.await();
writeln("Awaitinf future... [done]");
writeln("Future result: ", res.getValue().value.object);
client.stop();
}
version(unittest)
{
import niknaks.debugging : dumpArray;
}
unittest
{
DanteClient client = new DanteClient(new UnixAddress("/tmp/renaissance.sock"));
client.start();
writeln("Waiting for channels...");
string[] channels = client.enumerateChannels();
writeln(dumpArray!(channels));
client.stop();
}