示例#1
0
        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);
        }
示例#2
0
 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);
            }
        }
示例#4
0
        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);
        }