79 lines
1.8 KiB
JavaScript
79 lines
1.8 KiB
JavaScript
var globalRoom = {
|
|
users: {},
|
|
buffers: {},
|
|
removeUser: function(user : AbstractConnector){
|
|
for (var i in this.users) {
|
|
this.users[i].userLeft(user);
|
|
}
|
|
delete this.users[user];
|
|
delete this.buffers[user];
|
|
},
|
|
addUser: function(connector){
|
|
this.users[connector.userId] = connector;
|
|
this.buffers[connector.userId] = [];
|
|
for (var uname in this.users) {
|
|
if (uname !== connector.userId) {
|
|
var u = this.users[uname];
|
|
u.userJoined(connector.userId, "master");
|
|
connector.userJoined(u.userId, "master");
|
|
}
|
|
}
|
|
}
|
|
};
|
|
function flushOne(){
|
|
var bufs = [];
|
|
for (var i in globalRoom.buffers) {
|
|
if (globalRoom.buffers[i].length > 0) {
|
|
bufs.push(i);
|
|
}
|
|
}
|
|
if (bufs.length > 0) {
|
|
var userId = getRandom(bufs);
|
|
var m = globalRoom.buffers[userId].shift();
|
|
var user = globalRoom.users[userId];
|
|
user.receiveMessage(m[0], m[1]);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
// setInterval(flushOne, 10);
|
|
|
|
var userIdCounter = 0;
|
|
|
|
class Test extends AbstractConnector {
|
|
constructor (y, options) {
|
|
if(options === undefined){
|
|
throw new Error("Options must not be undefined!");
|
|
}
|
|
options.role = "master";
|
|
options.forwardToSyncingClients = false;
|
|
super(y, options);
|
|
this.setUserId((userIdCounter++) + "");
|
|
globalRoom.addUser(this);
|
|
this.globalRoom = globalRoom;
|
|
}
|
|
send (userId, message) {
|
|
globalRoom.buffers[userId].push(JSON.parse(JSON.stringify([this.userId, message])));
|
|
}
|
|
broadcast (message) {
|
|
for (var key in globalRoom.buffers) {
|
|
globalRoom.buffers[key].push(JSON.parse(JSON.stringify([this.userId, message])));
|
|
}
|
|
}
|
|
disconnect () {
|
|
globalRoom.removeUser(this.userId);
|
|
}
|
|
flushAll () {
|
|
var c = true;
|
|
while (c) {
|
|
c = flushOne();
|
|
}
|
|
}
|
|
flushOne() {
|
|
flushOne();
|
|
}
|
|
}
|
|
|
|
Y.Test = Test;
|