UNPKG

5 kBJavaScriptView Raw
1'use strict';
2/**
3 * {}
4 *
5 * @class autoRefresh
6 * {
7 * type:refresh、updateCss、updateJs、updateReact、updateImg
8 * listenPort:3000
9 * }
10 */
11class autoRefresh{
12 constructor(option){
13 const _ts = this;
14
15 option = option || {};
16
17 let m = _ts.m = {
18 path:require('path'),
19 net:require('net'),
20 fs:require('fs-extra'),
21 Koa:require('koa'),
22 Io:require('koa-socket'),
23 static:require('koa-static'),
24 range:require('koa-range'),
25 Router:require('koa-router')
26 },
27 config = _ts.config = {};
28
29
30
31 for(let i in option){
32 config[i] = option[i];
33 };
34
35 _ts.listenPort = typeof _ts.listenPort === 'number' ? _ts.listenPort : fws.config.listenPort ? fws.config.listenPort : 3000;
36
37 config.listen = +config.listenPort > 0 ? fws.config.listenPort : 3000;
38
39 _ts.app = new m.Koa();
40 _ts.app.use(m.range);
41 _ts.io = new m.Io();
42 _ts.router = new m.Router();
43
44 //return new Promise(_ts.init());
45 }
46 init(){
47 const _ts = this;
48 let m = _ts.m,
49 config = _ts.config;
50 return new Promise((resolve,reject)=>{
51 //_ts.app.use(m.static(m.path.join(fws.fwsPath,'staticfile')));
52
53 //_ts.app.use(m.static(m.path.join(fws.cmdPath,'staticfile')));
54 //_ts.app.use(m.static(m.path.join(fws.fwsPath)));
55
56 // m.router.get('/',(ctx,next)=>{
57 // let content = m.fs.readFileSync(m.path.join(fws.fwsPath,'staticfile','index.html')).toString();
58 // ctx.body = content;
59 // });
60
61 //静态页面到
62 _ts.app.use(m.static(m.path.join(fws.fwsPath,'welcome')));
63
64 //当前项目
65 _ts.app.use(m.static(m.path.join(fws.srcPath,'..')));
66
67 _ts.io.attach(_ts.app);
68 // _ts.io.on('connection',(ctx,data) => {
69 // console.log('客户端有新的响应');
70 // });
71
72 _ts.io.on('pageLoad',(ctx,data)=>{
73 console.log('加载 '+data.url);
74 });
75
76 // setInterval(function(){
77 // //广播
78 // _ts.io.broadcast('news',111);
79 // },1000);
80
81 // _ts.io.on('my other event',(ctx,data)=>{
82 // console.log(data);
83 // });
84
85 _ts.app
86 .use(_ts.router.routes())
87 .use(_ts.router.allowedMethods());
88
89 let initialNumber = 0, //初始次数
90 maxTryNumber = 20; //如果端口被占用,最多允许尝试的次数
91
92
93 let testServer;
94 (testServer = ()=>{
95 var s = m.net.createServer().listen(_ts.listenPort);
96 s.on('listening',()=>{
97 //测试端口可用,则关闭当前端口并启动server
98 s.close();
99 _ts.app.listen(_ts.listenPort);
100 resolve({
101 status:'success',
102 msg:'启动 http Server',
103 data:{
104 listenPort:_ts.listenPort
105 }
106 });
107
108 });
109
110 s.on('error',err => {
111 //端口被占用
112 if(err.code === 'EADDRINUSE'){
113 initialNumber++;
114 _ts.listenPort++;
115 if(initialNumber < maxTryNumber){
116 testServer();
117 }else{
118 reject({
119 status:'error',
120 msg:'启动 http Server 失败',
121 info:err
122 });
123 };
124 };
125 });
126 })();
127
128
129
130
131 // try {
132 // _ts.app.listen(_ts.listenPort);
133 // resolve({
134 // status:'success',
135 // msg:'启动 http Server',
136 // data:{
137 // listenPort:_ts.listenPort
138 // }
139 // });
140 // } catch (error) {
141 // if(addNumber < 10){
142 // addNumber++;
143 // _ts.listenPort++;
144 // _ts.app.listen(_ts.listenPort);
145 // }else{
146 // reject({
147 // status:'error',
148 // msg:'启动 http Server 失败',
149 // info:error
150 // });
151 // };
152 // };
153 })
154
155
156
157 }
158};
159
160module.exports = autoRefresh;
\No newline at end of file