Browser console output
http://www.jquery4u.com/jquery-functions/jquery-each-examples/
by codemeasandwich
JavaScript
function NetworkClient (sendFunction, callback) {
NetworkClient.idx++;
this.idx = NetworkClient.idx
this.sendFunction = sendFunction;
this.callback = callback;
NetworkClient.cache = [];
}
NetworkClient.idx = 0;
NetworkClient.prototype.send = function (data) {
console.log(data,this);
// Could wrap data with extra information to send
var goIt = false;
console.log("NetworkClient.cache is ",NetworkClient.cache);
for(var i = 0;i<NetworkClient.cache.length;i += 1){
console.log("Looking for ");
console.log(NetworkClient.cache[i].key,data);
if(NetworkClient.cache[i].key===data){
goIt=true
}
}
if(!goIt){
NetworkClient.cache.push({key:data,idx:this.idx,send:true});
this.sendFunction(data);
}
};
NetworkClient.prototype.recv = function (data) {
// Could unpack data and validate
var first = true, go = false;
NetworkClient.cache.forEach((element, index, array)=>{
var c = NetworkClient.cache[index];
if(c.idx!==this.idx){
if(c.send){
if( c.key === data && first){
go = true;
}
first = false;
}
if(go && c.send ){
this.callback(c.key);
c.send = false
}
}
})
};
function PerfectNetwork(callbackA, callbackB) {
var network = this;
this.clientA = new NetworkClient(
function (data) { network.clientB.recv(data); }, callbackA);
this.clientB = new NetworkClient(
function (data) { network.clientA.recv(data); }, callbackB);
};
var network = new PerfectNetwork(
function (data) { console.log("CLIENT-A Got: " + data); },
function (data) { console.log("CLIENT-B Got: " + data); }
);
network.clientA.send("abcd");
network.clientA.send("wxyz");
network.clientB.send("1234");
network.clientA.send("EOF");
/*
CLIENT-B Got: abcd
CLIENT-B Got: wxyz
CLIENT-A Got: 1234
CLIENT-B Got: EOF
*/