mirror of
https://github.com/chowa/ejyy.git
synced 2026-01-21 05:07:48 +08:00
101 lines
3.1 KiB
TypeScript
101 lines
3.1 KiB
TypeScript
/**
|
||
* +----------------------------------------------------------------------
|
||
* | 「e家宜业」 —— 助力物业服务升级,用心服务万千业主
|
||
* +----------------------------------------------------------------------
|
||
* | Copyright (c) 2020-2022 https://www.chowa.cn All rights reserved.
|
||
* +----------------------------------------------------------------------
|
||
* | Licensed 未经许可不能去掉「e家宜业」和「卓瓦科技」相关版权
|
||
* +----------------------------------------------------------------------
|
||
* | Author: contact@chowa.cn
|
||
* +----------------------------------------------------------------------
|
||
*/
|
||
|
||
import 'module-alias/register';
|
||
import cluster from 'cluster';
|
||
import os from 'os';
|
||
import Koa from 'koa';
|
||
import KoaRouter from 'koa-router';
|
||
import KoaBodyMiddleware from 'koa-body';
|
||
import KoaSessionMilddleware from 'koa-session';
|
||
import KoaLogMiddleware from 'koa-logger';
|
||
import MysqlSessionStore from '~/store/mysql-session';
|
||
import http from 'http';
|
||
import cwlog from 'chowa-log';
|
||
import config from '~/config';
|
||
import * as ScheduleJob from '~/schedule';
|
||
import MpModule from '~/module/mp';
|
||
import PcModule from '~/module/pc';
|
||
import NotifyModule from '~/module/notify';
|
||
import OaModule from '~/module/oa';
|
||
import wss from '~/wss';
|
||
import * as redisService from '~/service/redis';
|
||
import ModelMiddleware from '~/middleware/model';
|
||
import IpMiddleware from '~/middleware/ip';
|
||
import HeaderMiddleware from '~/middleware/header';
|
||
import WatcherMiddleware from '~/middleware/watcher';
|
||
import InitMiddleware from '~/middleware/init';
|
||
import * as iot from '~/iot';
|
||
|
||
if (cluster.isMaster) {
|
||
cwlog.success(`main process ${process.pid}`);
|
||
|
||
for (let i = 0; i < (process.env.NODE_ENV === 'production' ? os.cpus().length : 1); i++) {
|
||
cluster.fork({ port: config.server.port + i });
|
||
}
|
||
} else {
|
||
const app = new Koa();
|
||
const router = new KoaRouter();
|
||
const server = http.createServer(app.callback());
|
||
|
||
cwlog.setProject(`${config.name}-${process.pid}`);
|
||
cwlog.displayDate();
|
||
|
||
// schedule
|
||
ScheduleJob.run();
|
||
|
||
// modules
|
||
MpModule(router);
|
||
PcModule(router);
|
||
NotifyModule(router);
|
||
OaModule(router);
|
||
|
||
// WebSocket
|
||
wss.init(server);
|
||
|
||
// for socket
|
||
redisService.subscribe();
|
||
|
||
// 物联网
|
||
iot.init(router);
|
||
|
||
app.use(KoaBodyMiddleware({ multipart: true }))
|
||
.use(
|
||
KoaLogMiddleware({
|
||
transporter: str => {
|
||
cwlog.log(`${str}`);
|
||
}
|
||
})
|
||
)
|
||
.use(
|
||
KoaSessionMilddleware(
|
||
{
|
||
store: new MysqlSessionStore(),
|
||
...config.session
|
||
},
|
||
app
|
||
)
|
||
)
|
||
.use(ModelMiddleware())
|
||
.use(IpMiddleware())
|
||
.use(HeaderMiddleware())
|
||
.use(InitMiddleware())
|
||
.use(router.routes())
|
||
.use(WatcherMiddleware());
|
||
|
||
const port = process.env.port ? parseInt(process.env.port, 10) : config.server.port;
|
||
|
||
server.listen(port, '0.0.0.0', () => {
|
||
cwlog.success(`${config.name} server running on port ${port},work process ${process.pid}`);
|
||
});
|
||
}
|