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

add UUID support for io protocol

上级 9b898a5a
......@@ -7,7 +7,7 @@
*
*/
const log = require('./npmlog-env')
const webUtil = require('./web-util')
const Util = require('./util')
class Contact {
constructor(id) {
......@@ -41,7 +41,7 @@ class Contact {
}
}
name() { return webUtil.plainText(this.obj.name) }
name() { return Util.plainText(this.obj.name) }
remark() { return this.obj.remark }
stranger() { return this.obj.stranger }
star() { return this.obj.star }
......
......@@ -30,8 +30,9 @@ class Io {
this.wechaty = wechaty
this.token = token
this.endpoint = endpoint
this.protocol = protocol
log.verbose('Io', 'instantiated with endpoint[%s], token[%s], protocol[%s]', endpoint, token, protocol)
this.protocol = protocol + '|' + wechaty.uuid
log.verbose('Io', 'instantiated with endpoint[%s], token[%s], protocol[%s], uuid[%s]', endpoint, token, protocol, this.uuid)
}
toString() { return 'Class Io(' + this.token + ')'}
......@@ -74,7 +75,7 @@ class Io {
const initEvent = {
name: 'sys'
, payload: 'Wechaty version ' + this.wechaty.version()
, payload: 'Wechaty version ' + this.wechaty.version() + ` with UUID: ${this.uuid}`
}
this.send(initEvent)
......@@ -227,6 +228,13 @@ class Io {
ioEvent.payload = data.toString()
break
case 'heartbeat':
ioEvent.payload = {
uuid: this.uuid
, data: data
}
break
default:
break
}
......@@ -277,6 +285,7 @@ class Io {
ioMessage(m) {
log.verbose('Io', 'ioMessage() is a nop function before be overwriten from cloud')
}
}
/**
......
......@@ -9,7 +9,7 @@
const co = require('co')
const log = require('./npmlog-env')
const webUtil = require('./web-util')
const Util = require('./util')
const Message = require('./message')
class MediaMessage extends Message {
......@@ -47,7 +47,7 @@ class MediaMessage extends Message {
return Message.puppet.browser.checkSession()
})
.then(cookies => {
return webUtil.downloadStream(this.obj.url, cookies)
return Util.downloadStream(this.obj.url, cookies)
})
.catch(e => {
log.warn('MediaMessage', 'stream() exception: %s', e.message)
......
......@@ -11,7 +11,7 @@ const co = require('co')
const Contact = require('./contact')
const Room = require('./room')
const webUtil = require('./web-util')
const Util = require('./util')
const log = require('./npmlog-env')
class Message {
......@@ -52,7 +52,7 @@ class Message {
return obj
}
toString() {
return webUtil.plainText(this.obj.content)
return Util.plainText(this.obj.content)
}
toStringDigest() {
const text = webUtil.digestEmoji(this.obj.digest)
......@@ -71,7 +71,7 @@ class Message {
return '<' + name + (room ? `@${room}` : '') + '>'
}
getContentString() {
let content = webUtil.plainText(this.obj.content)
let content = Util.plainText(this.obj.content)
if (content.length > 20) { content = content.substring(0,17) + '...' }
return '{' + this.type() + '}' + content
}
......
......@@ -92,8 +92,9 @@ class Browser extends EventEmitter {
// XXX: if no `setTimeout()` here, promise will hang forever!
// with a confirmed bug in selenium-webdriver v2.53.2:
// https://github.com/SeleniumHQ/selenium/issues/2233
setTimeout(() => { resolve(this.driver) }, 0)
// resolve(this.driver)
// FIXED: selenium v3 released 20160807
// setTimeout(() => { resolve(this.driver) }, 0)
resolve(this.driver)
})
}
......@@ -135,9 +136,14 @@ class Browser extends EventEmitter {
log.silly('PuppetWebBrowser', 'phantomjs binary: ' + phantomjsExe)
log.silly('PuppetWebBrowser', 'phantomjs args: ' + phantomjsArgs.join(' '))
return new WebDriver.Builder()
const driver = new WebDriver.Builder()
.withCapabilities(customPhantom)
.build()
// https://github.com/detro/ghostdriver/blob/f976007a431e634a3ca981eea743a2686ebed38e/src/session.js#L233
// driver.manage().timeouts().pageLoadTimeout(2000)
return driver
}
quit() {
......
......@@ -7,7 +7,7 @@
*
*/
const log = require('./npmlog-env')
const webUtil = require('./web-util')
const Util = require('./util')
class Room {
constructor(id) {
......@@ -46,7 +46,7 @@ class Room {
})
}
name() { return webUtil.plainText(this.obj.name) }
name() { return Util.plainText(this.obj.name) }
get(prop) { return this.obj[prop] }
parse(rawObj) {
......
const http = require('http')
const log = require('./npmlog-env')
const WebUtil = {
stripHtml: stripHtml
, unescapeHtml: unescapeHtml
, digestEmoji: digestEmoji
, plainText: plainText
const Util = {
stripHtml
, unescapeHtml
, digestEmoji
, plainText
, downloadStream: downloadStream
, downloadStream
, guid
}
function stripHtml(html) {
......@@ -62,7 +64,7 @@ function downloadStream(url, cookies) {
// log.verbose('WebUtil', 'Cookie: %s', options.headers.Cookie)
return new Promise((resolve, reject) => {
req = http.request(options, (res) => {
const req = http.request(options, (res) => {
// console.log(`STATUS: ${res.statusCode}`);
// console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
// res.setEncoding('utf8');
......@@ -75,4 +77,13 @@ function downloadStream(url, cookies) {
req.end()
})
}
module.exports = WebUtil
// credit - http://stackoverflow.com/a/2117523/1123955
function guid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8)
return v.toString(16)
})
}
module.exports = Util
......@@ -12,6 +12,7 @@ const EventEmitter = require('events')
const co = require('co')
const log = require('./npmlog-env')
const Util = require('./util')
class Wechaty extends EventEmitter {
......@@ -36,6 +37,8 @@ class Wechaty extends EventEmitter {
this.npmVersion = require('../package.json').version
this.uuid = Util.guid()
this.inited = false
}
......@@ -226,6 +229,7 @@ class Wechaty extends EventEmitter {
getPort(okPort => resolve(okPort))
})
}
}
const Message = require('./message')
......
......@@ -3,7 +3,7 @@
const test = require('tape')
const log = require('../src/npmlog-env')
const webUtil = require('../src/web-util')
const Util = require('../src/util')
test('Html smoking test', t => {
const HTML_BEFORE_STRIP = 'Outer<html>Inner</html>'
......@@ -24,17 +24,17 @@ test('Html smoking test', t => {
const PLAIN_BEFORE = '&amp;<html>&amp;</html>&amp;<img class="emoji emoji1f4a4" text="[流汗]_web" src="/zh_CN/htmledition/v2/images/spacer.gif" />'
const PLAIN_AFTER = '&&&[流汗]'
const strippedHtml = webUtil.stripHtml(HTML_BEFORE_STRIP)
const strippedHtml = Util.stripHtml(HTML_BEFORE_STRIP)
t.equal(strippedHtml, HTML_AFTER_STRIP, 'should strip html as expected')
const unescapedHtml = webUtil.unescapeHtml(HTML_BEFORE_UNESCAPE)
const unescapedHtml = Util.unescapeHtml(HTML_BEFORE_UNESCAPE)
t.equal(unescapedHtml, HTML_AFTER_UNESCAPE, 'should unescape html as expected')
for (let i=0; i<EMOJI_BEFORE_DIGEST.length; i++) {
const emojiDigest = webUtil.digestEmoji(EMOJI_BEFORE_DIGEST[i])
const emojiDigest = Util.digestEmoji(EMOJI_BEFORE_DIGEST[i])
t.equal(emojiDigest, EMOJI_AFTER_DIGEST[i], 'should digest emoji string ' + i + ' as expected')
}
const plainText = webUtil.plainText(PLAIN_BEFORE)
const plainText = Util.plainText(PLAIN_BEFORE)
t.equal(plainText, PLAIN_AFTER, 'should convert plain text as expected')
t.end()
......@@ -57,7 +57,7 @@ test('Media download smoking test', t => {
})
server.listen(8000)
webUtil.downloadStream('http://127.0.0.1:8000/ding', [{name: 'life', value: 42}])
Util.downloadStream('http://127.0.0.1:8000/ding', [{name: 'life', value: 42}])
.then(s => {
s.on('data', (chunk) => {
// console.log(`BODY: ${chunk}`)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册