|
@@ -1,6 +1,6 @@
|
|
let socket;
|
|
let socket;
|
|
|
|
|
|
-function noPromise(){
|
|
|
|
|
|
+function openPromise(){
|
|
let resolve, reject;
|
|
let resolve, reject;
|
|
|
|
|
|
let np = new Promise((ok, fail) => {resolve = ok; reject = fail});
|
|
let np = new Promise((ok, fail) => {resolve = ok; reject = fail});
|
|
@@ -23,19 +23,24 @@ function asynchronize({s, chunkEventName, endEventName}){
|
|
let promiseCount = 0;
|
|
let promiseCount = 0;
|
|
let end = false;
|
|
let end = false;
|
|
|
|
|
|
- if (!('on' in s)){
|
|
|
|
- s.on = function(eventName, callback){
|
|
|
|
|
|
+ if (!('on' in s)){ //no on method in browser
|
|
|
|
+ s.on = function(eventName, callback){ //polyfill
|
|
this['on' + eventName] = callback;
|
|
this['on' + eventName] = callback;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ //check availability of chunk and promise. If any, resolve promise, and clear both from queue
|
|
|
|
+ const chunkAndPromise = i => (i in chunks) &&
|
|
|
|
+ (i in promises) && (
|
|
|
|
+ promises[i].resolve(chunks[i]),
|
|
|
|
+ clear(i))
|
|
|
|
+
|
|
s.on(chunkEventName, data => {
|
|
s.on(chunkEventName, data => {
|
|
chunks[chunkCount] = data
|
|
chunks[chunkCount] = data
|
|
|
|
|
|
- if (chunkCount in promises){
|
|
|
|
- promises[chunkCount].resolve(chunks[chunkCount])
|
|
|
|
- clear(chunkCount)
|
|
|
|
- }
|
|
|
|
|
|
+ chunkAndPromise(chunkCount)
|
|
|
|
+
|
|
chunkCount++
|
|
chunkCount++
|
|
})
|
|
})
|
|
|
|
|
|
@@ -48,17 +53,14 @@ function asynchronize({s, chunkEventName, endEventName}){
|
|
})
|
|
})
|
|
|
|
|
|
while (!end){
|
|
while (!end){
|
|
- let p = noPromise()
|
|
|
|
- promises[promiseCount] = p;
|
|
|
|
|
|
|
|
- if (promiseCount in chunks){
|
|
|
|
- p.resolve(chunks[promiseCount])
|
|
|
|
- clear(promiseCount)
|
|
|
|
- }
|
|
|
|
|
|
+ let p;
|
|
|
|
+ promises[promiseCount] = p = openPromise();
|
|
|
|
|
|
- promiseCount++
|
|
|
|
|
|
+ chunkAndPromise(promiseCount)
|
|
|
|
|
|
- yield p;
|
|
|
|
|
|
+ promiseCount++;
|
|
|
|
+ yield p; //yield promise outside
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -69,13 +71,19 @@ function msg2dom({nick, message, timestamp}){
|
|
return div;
|
|
return div;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+function userCount2dom({value}){
|
|
|
|
+ const div = document.createElement('div')
|
|
|
|
+ div.innerHTML = `<b>${nick}</b>:${message}`
|
|
|
|
+ return div;
|
|
|
|
+}
|
|
|
|
+
|
|
let RPC = {
|
|
let RPC = {
|
|
addMessage(data){
|
|
addMessage(data){
|
|
chat.appendChild(msg2dom(data))
|
|
chat.appendChild(msg2dom(data))
|
|
},
|
|
},
|
|
|
|
|
|
getUserCount({value}){
|
|
getUserCount({value}){
|
|
- chat.appendChild(msg2dom({nick: 'чатег', message: `${value} user online` , timestamp: (new Date()).getTime()}))
|
|
|
|
|
|
+ chat.appendChild(userCount2dom({value}))
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|