public string GetSession(string username, string password, bool disconnectOnClose) { var key = Encrypt(username, password); Talker talker; if (!Global.Sessions.TryGetValue(key, out talker)) { Trace.TraceInformation("New talker! " + key); var talk = new TalkLib.Talk(username, password); var talkerFactory = Kernel.Get <TalkerFactory>(); talker = talkerFactory.CreateTalker(talk, Clients.Group(key)); talker.Disconnect += (sender, args) => Global.Sessions.TryRemove(key, out talker); talker.DisconnectOnClose = disconnectOnClose; } talker.Disconnect += (sender, args) => { Global.Sessions.TryRemove(Context.ConnectionId, out talker); Groups.Remove(Context.ConnectionId, key); }; Global.Sessions[Context.ConnectionId] = Global.Sessions[key] = talker; return(key); }
public Talker(TalkLib.Talk talk, dynamic caller, List <ITalk> handlers) { _handlers = handlers; _talk = talk; _caller = caller; Chats = new ChatManager(); Users = new UserManager(); }