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); } }
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); } }
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})")); } }