From fe332740f7c0be59d4ede7097e5bd1eabbf40e39 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 25 Jun 2010 06:14:12 +0200 Subject: Chatting works now --- src/gui/CoreConnector.vala | 52 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'src/gui/CoreConnector.vala') 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)); + } } -- cgit v1.2.3