diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2010-06-25 06:14:12 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2010-06-25 06:14:12 +0200 |
commit | fe332740f7c0be59d4ede7097e5bd1eabbf40e39 (patch) | |
tree | 57479ec89da0817bc043c8938ce27041607214a9 /src/gui/CoreConnector.vala | |
parent | 3eb7e7688dea39fa83f41c1f9aba79a962ef1a15 (diff) | |
download | ephraim-fe332740f7c0be59d4ede7097e5bd1eabbf40e39.tar ephraim-fe332740f7c0be59d4ede7097e5bd1eabbf40e39.zip |
Chatting works now
Diffstat (limited to 'src/gui/CoreConnector.vala')
-rw-r--r-- | src/gui/CoreConnector.vala | 52 |
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)); + } } |