示例#1
0
        public void Load(Stream s)
        {
            data       = new ConstData();
            data.items = new List <ConstItem>();
            BinaryReader br    = new BinaryReader(s);
            var          magic = new String(br.ReadChars(20));

            data.aptdataoffset = br.ReadUInt32();
            data.itemcount     = br.ReadUInt32();
            s.Seek(4, SeekOrigin.Current);

            for (var i = 0; i < data.itemcount; ++i)
            {
                ConstItem item = new ConstItem();
                item.type = (ConstItemType)br.ReadUInt32();
                if (item.type == ConstItemType.TYPE_NUMBER)
                {
                    item.value = br.ReadUInt32();
                }
                else if (item.type == ConstItemType.TYPE_STRING)
                {
                    item.value = ReadCString(br);
                }

                data.items.Add(item);
            }
        }
示例#2
0
        public void Load(Stream s)
        {
            data = new ConstData();
            data.items = new List<ConstItem>();
            BinaryReader br = new BinaryReader(s);
            var magic = new String(br.ReadChars(20));
            data.aptdataoffset = br.ReadUInt32();
            data.itemcount = br.ReadUInt32();
            s.Seek(4, SeekOrigin.Current);

            for(var i= 0;i< data.itemcount;++i)
            {
                ConstItem item = new ConstItem();
                item.type = (ConstItemType)br.ReadUInt32();
                if (item.type == ConstItemType.TYPE_NUMBER)
                    item.value = br.ReadUInt32();
                else if (item.type == ConstItemType.TYPE_STRING)
                    item.value = ReadCString(br);

                data.items.Add(item);
            }
        }
示例#3
0
        private static DbInfo GetDbInfo(RpcContext rpcContext, string dbName)
        {
            try
            {
                // 先找用户私有化的配置
                var sysInfos = rpcContext.GetUserContext()?.GetSysInfo();

                if (sysInfos == null || !sysInfos.Any())
                {
                    if (!string.IsNullOrEmpty(rpcContext.Args.tk))
                    {
                        logger.LogWarning("GrantDBContext.GetDbInfo.GetUserCtx.sysInfos==null");
                    }
                }

                var       dbInfos = sysInfos?.Where(a => a.DbModelName?.ToLower() == dbName).ToList();
                ConstItem dbValue = null;
                if (dbInfos == null || !dbInfos.Any())
                {
                    // 从配置文件做了兼容转换,等数据库tenant_database的DBModelName字段启用后就直接能取到了
                    dbValue = ServerSetting.GetConstValue(dbName);
                    if (dbValue != null)
                    {
                        var sysId = dbValue.Value.ToLower();
                        dbInfos = sysInfos.Where(a => a.SysID?.ToLower() == sysId && !string.IsNullOrEmpty(a.DBIP)).ToList();
                    }
                }
                DbInfo info = null;
                if (dbInfos != null && dbInfos.Any())
                {
                    var    dbInfo = dbInfos.First();
                    var    dbType = dbInfo.DBType;
                    DbType dType  = DbTypeParser.Parser(dbType);
                    info = new DbInfo()
                    {
                        DbType        = dType,
                        DbName        = dbInfo.DBName,
                        Ip            = dbInfo.DBIP,
                        Port          = dbInfo.DbPort,
                        UserName      = dbInfo.DBUser,
                        Pwd           = dbInfo.DBPwd,
                        DbContextName = dbName,
                    };
                }
                else
                {
                    // 如果私有化的表没有,找全局的表
                    var dbModel = ServerSetting.GetDbModelContext(dbName);
                    if (dbModel == null)
                    {
                        throw new Exception($"DataModel Info :{dbName} Is Not Found");
                    }

                    DbType dType = DbTypeParser.Parser(dbModel.DbType);

                    // 需要根据接口配置的主从来选择主从,这里先暂时全部取主,有空了在完善接口主从配置
                    info = new DbInfo()
                    {
                        DbName        = dbModel.Database,
                        DbType        = dType,
                        Ip            = dbModel.Master.Ip,
                        Port          = dbModel.Master.Port,
                        UserName      = dbModel.UserName,
                        Pwd           = dbModel.PassWord,
                        DbContextName = dbName,
                    };
                }
                logger.LogDebug($"获取的数据库信息是:{info?.ToString()}");
                return(info);
            }
            catch (Exception e)
            {
                logger.LogCritical(e, $"GrantDBContext.GetDbInfo.Error,获取数据库{dbName}连接信息异常");
                throw new BusinessException(new StatusCode(StatusCode.ServerError.code, $"无法找到用户的数据库信息,请检查租户数据库,或者Config目录下的数据库配置信息({dbName})"));
            }
        }