dino/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala

38 lines
1.3 KiB
Vala

using Gee;
using Xmpp;
public class Xmpp.Xep.Jingle.Flag : XmppStreamFlag {
public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "jingle");
public HashMap<string, Session> sessions = new HashMap<string, Session>();
public HashMap<string, Promise<Session?>> promises = new HashMap<string, Promise<Session?>>();
// We might get transport-infos about a session before we finished fully creating the session. (e.g. telepathy outgoing calls)
// Thus, we "pre add" the session as soon as possible and can then await it.
public void pre_add_session(string sid) {
var promise = new Promise<Session?>();
promises[sid] = promise;
}
public void add_session(Session session) {
if (promises.has_key(session.sid)) {
promises[session.sid].set_value(session);
promises.unset(session.sid);
}
sessions[session.sid] = session;
}
public async Session? get_session(string sid) {
if (promises.has_key(sid)) {
return yield promises[sid].future.wait_async();
}
return sessions[sid];
}
public void remove_session(string sid) {
sessions.unset(sid);
}
public override string get_ns() { return NS_URI; }
public override string get_id() { return IDENTITY.id; }
}