//Client disconnected //TODO: disconnect from room public Task Disconnect() { var sessionState = mCache.GetSessionState(Context.ConnectionId); if (sessionState != null) { var model = new UserStateModel { Id = sessionState.Id, Room = sessionState.Room, Language = sessionState.Language, Name = sessionState.Name, State = "left room", Avatar = sessionState.Avatar, Remove = true }; mCache.LeaveRoom(sessionState.Room, sessionState.Id); mCache.RemoveUser(sessionState.Id); Clients[sessionState.Room].userStateChanged(model); } return Clients.leave(Context.ConnectionId, DateTime.Now.ToString()); }
public void JoinRoom(string oldRoom, string room, string id, string user, string language) { var ret = mCache.JoinRoom(oldRoom, room, id, user, language); if (oldRoom != room && !string.IsNullOrEmpty(oldRoom)) { Groups.Remove(Context.ConnectionId, oldRoom).Wait(); //group for chatroom state updates Groups.Remove(Context.ConnectionId, string.Format(LanguageRoom, oldRoom, language)).Wait(); //group for specific language updates Clients[oldRoom].userStateChanged( new UserStateModel { Id = ret.UserId, Language = language, Name = ret.UserName, Room = oldRoom, State = "left room", Avatar = ret.UserAvatar, Remove = true }); } Groups.Add(Context.ConnectionId, ret.Name).Wait(); //group for chatroom state updates Groups.Add(Context.ConnectionId, string.Format(LanguageRoom, ret.Name,language)).Wait(); //group for specific language updates var state = new UserStateModel { Id = ret.UserId, Language = language, Name = ret.UserName, Room = room, State = "joined room", Avatar = ret.UserAvatar, Remove = false }; mCache.SaveSession(Context.ConnectionId, new UserStateEntity(Context.ConnectionId, ret.UserId.ToString()) { Language = language, Name = ret.UserName, Room = room, State = "joined room", Avatar = ret.UserAvatar, Remove = false }); Clients[ret.Name.ToString()].roomJoined(ret); Clients[ret.Name.ToString()].userStateChanged(state); }