mirror of https://github.com/TakeV-Lambda/dino.git
38 lines
1.3 KiB
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; }
|
|
} |