Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

L2l #1

Open
wants to merge 18 commits into
base: master
Choose a base branch
from
Open

L2l #1

wants to merge 18 commits into from

Conversation

m-hemmings
Copy link

L2L Channel Framework in place. Send/Receive now register and need to be tied to the channel send/receive methods.

Copy link
Member

@rksm rksm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Matt, thanks for the PR! Can you please check my comments of your code? Thanks!

if (typeof senderRecvrA[onReceivedMethodA] !== "function") throw new Error(`sender a has no receive method ${onReceivedMethodA}!`);
if (typeof senderRecvrB[onReceivedMethodB] !== "function") throw new Error(`sender b has no receive method ${onReceivedMethodB}!`);
this.senderRecvrA = senderRecvrA;
this.senderRecvrA.l2lclient ? {} : this.senderRecvrA.l2lclient = Channel.makeL2LClient()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this structure? Why not simply an if instead of a tertiary with an emtpy object?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrected with ifs

import L2LClient from "lively.2lively/client.js";
import { string, num, promise, fun } from "lively.lang";

export class Channel {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason to copy the channel implementation from channel.js? Does subclassing work? Or just configuring the original channel with a variable backend? (l2l vs local)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolved with inheritance

async getSessions(senderA,senderB,ackFn){
var l2lA = senderA.l2lclient,
l2lB = senderB.l2lclient
var returnVal = 'incomplete';
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is returnVal? It is never used?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed

}

async getSessions(senderA,senderB,ackFn){
var l2lA = senderA.l2lclient,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you define l2lA but it is never used?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed

console.log('senderRecvrB not disconnected');
}
})
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't the procedure for cleaning up l2lA and l2lB be the same? it seems strange that you have to query for getSessions to disconnect b?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's because I need to make sure it's the last thing in the room before it disconnects, since it's the master.

}

if (this.senderRecvrB && this.senderRecvrB.l2lclient) {
this.getSessions(this.senderRecvrA,this.senderRecvrB,(a)=> {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use async/awai as much as possible. It makes code much more readable than callback style


l2lA.sendTo(l2lA.trackerId,'joinRoom',{roomName: l2lB.socketId.split('#')[1]})
l2lB.sendTo(l2lB.trackerId,'joinRoom',{roomName: l2lB.socketId.split('#')[1]})
this.online = true;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to wait for acknowledgment for joining the rooms to be sure we are really only? In other words, what happens when joinRoom fails? I cannot find error handling somewhere

send(content, sender) {


return this.deliver(sender);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"deliver" was used in the local channel to implement the details of send, here it is empty so a send actually does nothing?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had just emptied it with the intention of filling it with code particular to the l2l version, so this should be resolved with inheritance now

await testChannel.senderRecvrA.l2lclient.whenRegistered(300)
await testChannel.senderRecvrB.l2lclient.whenRegistered(300)

window.testChannel = testChannel;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you clean up debug code? Leaving globals and such around might lead to strange effects

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed

expect(masterBuffer[0].payload).equals(ack,'payload not correct')
})

})
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

None of those tests actually runs lively.sync. How would the tests ""messaging between master and client - single op" and "syncing master with two clients - simple prop" look like when using l2l?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants