public static IUser FromJson(string json) { dynamic d = Newtonsoft.Json.JsonConvert.DeserializeObject(json); var userId = d.userid.Value; var nick = d.nickname.Value; var backColor = d.backcolor.Value; var foreColor = d.forecolor.Value; var isNg = d.is_ng.Value.ToLower() == "true"; var name = d.name; var nameItems = new List <IMessagePart>(); if (name != null) { foreach (var nameItem in name) { if (nameItem.type == "text") { var val = nameItem.value.Value; nameItems.Add(MessagePartFactory.CreateMessageText(val)); } } } var user = new UserTest(userId) { Name = nameItems, Nickname = nick, BackColorArgb = backColor, ForeColorArgb = foreColor, IsNgUser = isNg }; return(user); }
public IUser GetUser(string userid) { if (!_dict.TryGetValue(userid, out IUser user)) { user = new UserTest(userid); _dict.AddOrUpdate(userid, user, (_, u) => u); } return(user); }
private bool TryGet(string userId, out IUser userInfo) { CreateDB(_dbPath); const string param1Name = "@param1"; var query = $"SELECT {col2Name},{col3Name} FROM {tableName} WHERE {col1Name}={param1Name}"; try { using (var conn = CreateConnection(_dbPath)) using (var cmd = new SQLiteCommand(query, conn)) { conn.Open(); cmd.Parameters.Add(new SQLiteParameter(param1Name, userId)); using (var reader = cmd.ExecuteReader()) { if (!reader.HasRows) { userInfo = null; return(false); } else { reader.Read(); var nickname = reader.GetString(0); var update = reader.GetDateTime(1); userInfo = new UserTest(userId) { Nickname = nickname }; return(true); } } } } catch (Exception ex) { //ここに来るようなことは殆ど無いかと。ストレージの空き容量が無いとかそんなレベル _logger.LogException(ex); userInfo = null; return(false); } }
public IUser GetUser(string userId) { //UserInfoのインスタンスは一つのuserIdにつき一つだけ作る。 if (_cacheDict.ContainsKey(userId)) { return(_cacheDict[userId]); } //TODO:最初にデータベース上のユーザ情報を全てメモリに読み込むべきでは?その方が絶対に効率がいい。 if (TryGet(userId, out IUser userInfo)) { AddUser(userInfo); return(userInfo); } //キャッシュにもデータベースにも無いので、新たに作成 userInfo = new UserTest(userId); AddUser(userInfo); return(userInfo); }