
//公用引用，被引用的不能即使更新，比如配置文件(还有sys，load等这些都被全局引用了)
//请不要在其地方，定义以下变量名


// 公用配置
/*-----------------------------------------------------------------------------------------------------------*/
$Config = new Object();

$Config.nodeVersion='11.7.0';//最小的nodejs版本
$Config.uniqueIdCount=0;//唯一id计数器
$Config.uniqueIdCountTime=Date.now();//并发时间
$Config.info={};//本机的ip，mac，平台，信息


$Config.root = require('path').dirname(require('path').dirname(__dirname)).replace(/\\/g,'/');//应用根目录
$Config.upload = '/public/upload/';//上传目录
$Config.download = '/public/download/';//下载目录
$Config.type = '.html';//伪静态
$Config.wskey = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';//websocket
$Config.index ='index';//控制器里的默认首页,不需要加.js，不需要加/
$Config.index404 = $Config.root+'/public/404.html';//未发现


$Config.web='/public/mould/auto';//web目录



$Config.cer=$Config.root+'/extend/ssl/cert.pem';//证书文件
$Config.key=$Config.root+'/extend/ssl/key.pem';//私钥文件


$Config.tag = {
	dbBuild:false//数据库构建标识
};//全局标识，可以用于判断是不是第一次访问等
$Config.seo = '/public/default/seo/index.html';//seo文件
$Config.seoList = '/public/default/seo/list.html';//seo索引文件

$Config.debug = true;//开启并为本地才能生成api文档响应内容,才能返回字段错误的详情,关闭才能监听未捕捉异常
$Config.response=true;//是否打印返回值
$Config.request=true;//是否打印请求值
$Config.print=5;//是否打印调式输出,1代表可以打印小于等于1（严重错误）的日志，
				//2代表可以打印小于等于2（严重错误，警告）的日志，3（严重错误，警告，提醒）
				//0代表不打印,以此类推


$Config.multi = 0;//是否开启多个cpu,可以指定cpu个数（net,websocket,http组合使用时不要开启多个cpu，因为不能共享内存。）
			//经过测试windows下(hello world)，启用cluster，性能反而没有不启用好。（0代表不启用cluster）

$Config.coerrin = 0;//错误记次初始化。
$Config.coerr = 1000000;//出错多少次重启程序
$Config.logoLength=1500;//调试输出，显示的最大长度（超过长度将截取，写入文件时不会截取）
$Config.url='http://127.0.0.1:9009';//跨域cookie的url，跨域要想实用cookie，必须开启。且客户端也需相应设置
$Config.webAsync = true;//是否同步更新web页面,且必须开启websocket(线上环境请关掉，此功能)
					//占用一个_root用户名

$Config.pass='hello world';//你可以在这里定义一个全局密码，框架用于sha1加密
$Config.session='YH_SESSION_ID'
$Config.sessionTime=1000000;//session过期时间
$Config.sessionAble=true;//是否允许session
$Config.postSize = 99999999999;//post上传限制大小
$Config.postTemp = false;//post上传，是否暂存。为真，则关闭连接后删除
$Config.cache = false;//是否启用http缓存,f5会强制刷新。
$Config.allowHost = [];//允许访问的来源域名，为空则 可以跨域，如果设置，需要把自己的域名也写上。
					//html文件任意域名可访问。
					//需要加http://****，例子：['http://localhost','http://127.0.0.1','http://192.168.1.110']

$Config.loadAble=true;//是否开启热更新(如未更新，重新保存一次就可)。
$Config.loadNotice=true;//开启热更新提示
$Config.loadApiAble=true;//是否开启接口文档热更新

$Config.loadApi={
	tag:true,//标记是否可发送通知更新api
	next:0,//上次生成文档的时间，当小于超时间时不更新
	time:1500//不更新过前端api界面，的超时时间
}

$Config.loadUrl='/public/config/api.js'//api文档地址
$Config.loadAuto=true;//更新配置文件后，自动更新
$Config.loadTime=100;//有的编辑器保存时，是先删除再保存。设置间隔时间用于防止触发多次。如果频繁出现加载错误，可以适当延长此时间。
$Config.loadB=0;//上次触发时间
$Config.loadN=0;//上次触发文件名

$Config.middle = {http:[],tcp:[],ws:[],udp:[]};//零时存放中间件，v8内存

$Config.tokenUse=false;//是否启用token加密（aes-128-cbc加密方式）,启用加密，在加密部分会慢4倍左右
//不启用加密情况下，token与分布式session性能相差不大。
//用户更改_data,_exp,_token,_safe任意一个都将验证失败。
$Config.tokenTime=1000000;//过期时间
$Config.tokenIv='000000000000000o';//向量16位
$Config.tokenPass='000000000000000o';//密码16位

$Config.zlib = true;//是否启用压缩
$Config.zlibCache = false;//是否启用压缩缓存，会自动更新压缩文件
$Config.zlibMax = 5120;//压缩阈值,默认5kb以上才压缩
$Config.zlibNo = ['.jpg','.png','.gif','.ico',".pdf",".mp3",
				'amr','wav','awb',".avi",".mp4",".rar",".zip"];//不开启压缩的格式

$Config.cacheAll = true;//监听所有nodejs代码（mvcs）
$Config.cacheLazy = true;//懒加载
$Config.cacheDir = [];//文件缓存的目录
$Config.nUrl = $Config.root+ '/nodejs';//缓存nodejs文件的路径(最后不加'/')
$Config.pUrl = $Config.root+ '/public';//静态文件目录，不会缓存（用于前端代码的热更新）

$Config.compile=new Map();//缓存生成代码
$Config.compile_api={};//缓存api接口


$Config.handle={
	loadJsFun:[],//当可执行js文件更新后执行的函数
	loadPublicFun:[],//当静态文件更新后执行的函数
	loadJsInitFun:[],//当可执行js文件初始化后执行的函数
	loadPublicInitFun:[],//当静态文件初始化后执行的函数
	err:undefined//配置错误函数
}//配置钩子函数


//公用引用，被引用的不能即使更新，比如配置文件(还有sys，load等这些都被全局引用了)
//请不要在其地方，定义以下变量名

//常用全局模块
/*-----------------------------------------------------------------------------------------------------------*/
$Sys = require('../model/load/sys.fun.js');//此文件，会热更新
$Load = require('../model/load/load.fun.js')//此文件，不会热更新
/*-----------------------------------------------------------------------------------------------------------*/


// 监听限制配置及线程ssl（非v8线程）
/*-----------------------------------------------------------------------------------------------------------*/
require('events').defaultMaxListeners=10;
// process.env.OPENSSL_CONF=$Config.root+'/ssl/openssl.cnf';
process.env.UV_THREADPOOL_SIZE=100;//nodejs线程池

/*-----------------------------------------------------------------------------------------------------------*/

$Sys.print()



// 导出部分常用组件
/*-----------------------------------------------------------------------------------------------------------*/
module.exports={start:$Sys.model('/load/com','start')}
/*-----------------------------------------------------------------------------------------------------------*/
