Add routing infrastructure.
This commit is contained in:
parent
9a73bcaad2
commit
e370a57a42
3 changed files with 137 additions and 4 deletions
|
@ -5,6 +5,7 @@ import ddbus.conv;
|
|||
import ddbus.util;
|
||||
import std.string;
|
||||
import std.typecons;
|
||||
import std.exception;
|
||||
|
||||
class DBusException : Exception {
|
||||
this(DBusError *err) {
|
||||
|
@ -24,6 +25,11 @@ T wrapErrors(T)(T delegate(DBusError *err) del) {
|
|||
return ret;
|
||||
}
|
||||
|
||||
enum MessageType {
|
||||
Invalid = 0,
|
||||
Call, Return, Error, Signal
|
||||
}
|
||||
|
||||
class Message {
|
||||
this(string dest, string path, string iface, string method) {
|
||||
msg = dbus_message_new_method_call(dest.toStringz(), path.toStringz(), iface.toStringz(), method.toStringz());
|
||||
|
@ -64,22 +70,67 @@ class Message {
|
|||
return ret;
|
||||
}
|
||||
|
||||
const(char)[] signature() {
|
||||
const(char)* cSig = dbus_message_get_signature(msg);
|
||||
return fromStringz(cSig);
|
||||
Message createReturn() {
|
||||
return new Message(dbus_message_new_method_return(msg));
|
||||
}
|
||||
|
||||
MessageType type() {
|
||||
return cast(MessageType)dbus_message_get_type(msg);
|
||||
}
|
||||
|
||||
bool isCall() {
|
||||
return type() == MessageType.Call;
|
||||
}
|
||||
|
||||
// Various string members
|
||||
// TODO: make a mixin to avoid this copy-paste
|
||||
string signature() {
|
||||
const(char)* cStr = dbus_message_get_signature(msg);
|
||||
assert(cStr != null);
|
||||
return cStr.fromStringz().assumeUnique();
|
||||
}
|
||||
string path() {
|
||||
const(char)* cStr = dbus_message_get_path(msg);
|
||||
assert(cStr != null);
|
||||
return cStr.fromStringz().assumeUnique();
|
||||
}
|
||||
string iface() {
|
||||
const(char)* cStr = dbus_message_get_interface(msg);
|
||||
assert(cStr != null);
|
||||
return cStr.fromStringz().assumeUnique();
|
||||
}
|
||||
string member() {
|
||||
const(char)* cStr = dbus_message_get_member(msg);
|
||||
assert(cStr != null);
|
||||
return cStr.fromStringz().assumeUnique();
|
||||
}
|
||||
string sender() {
|
||||
const(char)* cStr = dbus_message_get_sender(msg);
|
||||
assert(cStr != null);
|
||||
return cStr.fromStringz().assumeUnique();
|
||||
}
|
||||
|
||||
DBusMessage *msg;
|
||||
}
|
||||
|
||||
unittest {
|
||||
import dunit.toolkit;
|
||||
auto msg = new Message("org.example.test", "/test","org.example.testing","testMethod");
|
||||
msg.path().assertEqual("/test");
|
||||
}
|
||||
|
||||
class Connection {
|
||||
DBusConnection *conn;
|
||||
this(DBusConnection *connection) {
|
||||
conn = connection;
|
||||
}
|
||||
|
||||
void send(Message msg) {
|
||||
dbus_connection_send(conn,msg.msg, null);
|
||||
}
|
||||
|
||||
void sendBlocking(Message msg) {
|
||||
dbus_connection_send(conn,msg.msg,null);
|
||||
send(msg);
|
||||
dbus_connection_flush(conn);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue