提交 9fd6fa38 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

add localhost tcp connectivity test in doctor (#184)

上级 589b5587
...@@ -14,14 +14,36 @@ import { ...@@ -14,14 +14,36 @@ import {
} from '../src/config' } from '../src/config'
import { Wechaty } from '../src/wechaty' import { Wechaty } from '../src/wechaty'
import { Doctor } from '../src/doctor'
const wechaty = Wechaty.instance() const wechaty = Wechaty.instance()
const doctor = new Doctor()
async function main() {
let ipcTestResult: string
try {
await doctor.testTcp()
ipcTestResult = 'PASS'
} catch (err) {
console.log(err)
ipcTestResult = 'FAIL. Please check your tcp network, Wechaty need to listen on localhost and connect to it.'
}
console.log(`
#### Wechaty Doctor
1. Wechaty version: ${wechaty.version()}
2. ${os.type()} ${os.arch()} version ${os.release()} memory ${Math.floor(os.freemem() / 1024 / 1024)}/${Math.floor(os.totalmem() / 1024 / 1024)} MB
3. Docker: ${Config.isDocker}
4. Node version: ${process.version}
5. Tcp IPC TEST: ${ipcTestResult}
console.log(` `)
#### Wechaty Doctor
1. Wechaty version: ${wechaty.version()} }
2. ${os.type()} ${os.arch()} version ${os.release()} memory ${Math.floor(os.freemem() / 1024 / 1024)}/${Math.floor(os.totalmem() / 1024 / 1024)} MB
3. Docker: ${Config.isDocker}
4. Node version: ${process.version}
`) try {
main()
} catch (err) {
console.error('main() exception: %s', err.message || err)
}
/**
*
* wechaty: Wechat for Bot. and for human who talk to bot/robot
*
* Licenst: ISC
* https://github.com/zixia/wechaty
*
*/
import { createServer, Socket } from 'net'
import {
log,
} from './config'
export class Doctor {
constructor() {
log.verbose('Doctor', 'constructor()')
}
/**
* https://gist.github.com/tedmiston/5935757
*/
testTcp(): Promise<boolean> {
log.verbose('Doctor', 'testTcp()')
return new Promise<boolean>(async (resolve, reject) => {
/**
* Server
*/
const server = createServer(socket => socket.pipe(socket))
/**
* Promise Reject
*/
server.on('error', reject)
server.on('close', () => log.silly('Doctor', 'testTcp() server closed'))
server.listen(8788, 'localhost', () => {
/**
* Client
*/
const client = new Socket()
client.connect(8788, 'localhost', () => {
log.silly('Doctor', 'testTcp() client connected')
client.write('ding')
})
client.on('data', function(data) {
/**
* Promise Resolve
*/
resolve(true)
client.destroy() // kill client after server's response
})
/**
* Promise Reject
*/
client.on('error', reject)
client.on('close', err => server.close())
})
})
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册