- Added authentication command support
- Added channel enumeration support
- Added some helper methods for the channel enumeration support

Client (unittests)

- Added unittests for the above
This commit is contained in:
Tristan B. Velloza Kildaire 2023-11-10 15:26:03 +02:00
parent 7f467b5385
commit 3479d380c3
1 changed files with 71 additions and 3 deletions

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,32 @@ 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();
}
unittest
{
DanteClient client = new DanteClient(new UnixAddress("/tmp/renaissance.sock"));
client.start();
writeln("Waiting for channels...");
string[] channels = client.enumerateChannels();
writeln("Channels: ", channels);
client.stop();
}