summaryrefslogtreecommitdiffstats
path: root/src/gui/CoreConnector.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/CoreConnector.vala')
-rw-r--r--src/gui/CoreConnector.vala52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/gui/CoreConnector.vala b/src/gui/CoreConnector.vala
index 18cef2d..a152e58 100644
--- a/src/gui/CoreConnector.vala
+++ b/src/gui/CoreConnector.vala
@@ -8,6 +8,8 @@ public class CoreConnector {
public signal void update_contact(Contact contact);
public signal void new_conversation(string jid);
+ public signal void receive_message(string jid, string type, string message);
+ public signal void sent_message(string jid, string type, string message);
private class TermStore {
public Erl.Term term;
@@ -177,9 +179,59 @@ public class CoreConnector {
new_conversation(jid);
}
+ else if((match_term = match("{receive_message,JID,Type,Body}", term)) != null) {
+ Erl.Term jid_term = match_term.var_content("JID");
+ if(!jid_term.is_binary())
+ // TODO Debug output
+ return;
+ string jid = ((string)jid_term.bin_ptr()).ndup(jid_term.bin_size());
+
+ Erl.Term type_term = match_term.var_content("Type");
+ if(!type_term.is_atom())
+ // TODO Debug output
+ return;
+ string type = ((string)type_term.atom_ptr()).ndup(type_term.atom_size());
+
+ Erl.Term body_term = match_term.var_content("Body");
+ if(!body_term.is_binary())
+ // TODO Debug output
+ return;
+ string body = ((string)body_term.bin_ptr()).ndup(body_term.bin_size());
+
+ receive_message(jid, type, body);
+ }
+ else if((match_term = match("{sent_message,JID,Type,Body}", term)) != null) {
+ Erl.Term jid_term = match_term.var_content("JID");
+ if(!jid_term.is_binary())
+ // TODO Debug output
+ return;
+ string jid = ((string)jid_term.bin_ptr()).ndup(jid_term.bin_size());
+
+ Erl.Term type_term = match_term.var_content("Type");
+ if(!type_term.is_atom())
+ // TODO Debug output
+ return;
+ string type = ((string)type_term.atom_ptr()).ndup(type_term.atom_size());
+
+ Erl.Term body_term = match_term.var_content("Body");
+ if(!body_term.is_list())
+ // TODO Debug output
+ return;
+ string body = body_term.iolist_to_string();
+
+ sent_message(jid, type, body);
+ }
else {
Erl.print_term(stdout, term);
stdout.printf("\n");
}
}
+
+ public void start_conversation(string jid) {
+ con.reg_send("ephraim", Erl.format("{start_conversation,~w}", Erl.mk_binary(jid.to_utf8())));
+ }
+
+ public void send_message(string jid, string type, string message) {
+ con.reg_send("ephraim", Erl.format("{send_message,~s,~a,~s}", jid, type, message));
+ }
}