import Koa from 'koa';

import path from 'path';

import Router from 'koa-router';

import body from 'koa-body';

import cors from 'koa2-cors';

import koaStatic from 'koa-static';

import websockify from 'koa-websocket';

import route from 'koa-route';



import AppRoutes from './routes';



const PORT = 3300;



const app = websockify(new Koa());



app.ws.use(function (ctx, next) {

  ctx.websocket.send('connection succeeded!');

  return next(ctx);

});



app.ws.use(

  route.all('/test', function (ctx) {

    // ctx.websocket.send('Hello World');

    ctx.websocket.on('message', function (message) {

      // do something with the message from client



      if (message !== 'ping') {

        const data = JSON.stringify({

          id: Math.ceil(Math.random() * 1000),

          time: new Date().getTime(),

          res: `${message}`,

        });

        ctx.websocket.send(data);

      }

      console.log(message);

    });

  })

);



const router = new Router();



// router

AppRoutes.forEach((route) => router[route.method](route.path, route.action));



app.use(cors());

app.use(

  body({

    encoding: 'gzip',

    multipart: true,

    formidable: {

      // uploadDir: path.join(__dirname, '/upload/'), // 设置文件上传目录

      keepExtensions: true,

      maxFieldsSize: 20 * 1024 * 1024,

    },

  })

);

app.use(router.routes());

app.use(router.allowedMethods());

app.use(koaStatic(path.join(__dirname)));



app.listen(PORT, () => {

  console.log(`Application started successfully: http://localhost:${PORT}`);

});