added new y-test connector

This commit is contained in:
DadaMonad 2015-02-05 14:15:20 +00:00
parent 3eb933400a
commit e5f16812b3
19 changed files with 281 additions and 213 deletions

11
build/README.md Normal file
View File

@ -0,0 +1,11 @@
# Directories
### build/browser
You find the browserified (not minified) version of yjs here. This is nice for debugging, since it also includes sourcemaps. For production, however, you should use the version that you find in the main directory.
### build/node
Yjs for nodejs is located here. You can only use the submodules, or require 'y' in your node project. Also works with browserify.
### build/test
Start build/test/index.html' in your browser, to perform testing Yjs.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -58,7 +58,6 @@ adaptConnector = function(connector, engine, HB, execution_listener) {
connector.getStateVector = getStateVector;
connector.getHB = getHB;
connector.applyHB = applyHB;
connector.receive_handlers = [];
return connector.receive_handlers.push(function(sender, op) {
if (op.uid.creator !== HB.getUserId()) {
return engine.applyOp(op);

View File

@ -19,12 +19,20 @@ module.exports = {
req("syncMode", ["syncAll", "master-slave"]);
req("role", ["master", "slave"]);
req("user_id");
this.on_user_id_set(this.user_id);
if (typeof this.on_user_id_set === "function") {
this.on_user_id_set(this.user_id);
}
if (options.perform_send_again != null) {
this.perform_send_again = options.perform_send_again;
} else {
this.perform_send_again = true;
}
if (this.role === "master") {
this.syncMode = "syncAll";
}
this.is_synced = false;
this.connections = {};
this.receive_handlers = [];
this.is_bound_to_y = false;
this.connections = {};
this.current_sync_target = null;
@ -59,12 +67,14 @@ module.exports = {
return this.findNewSyncTarget();
},
userJoined: function(user, role) {
var _base;
if (role == null) {
throw new Error("Internal: You must specify the role of the joined user! E.g. userJoined('uid:3939','slave')");
}
this.connections[user] = {
is_synced: false
};
if ((_base = this.connections)[user] == null) {
_base[user] = {};
}
this.connections[user].is_synced = false;
if ((!this.is_synced) || this.syncMode === "syncAll") {
if (this.syncMode === "syncAll") {
return this.performSync(user);
@ -164,12 +174,14 @@ module.exports = {
var f, _i, _len, _ref;
if (!this.is_synced) {
this.is_synced = true;
_ref = this.compute_when_synced;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
f = _ref[_i];
f();
if (this.compute_when_synced != null) {
_ref = this.compute_when_synced;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
f = _ref[_i];
f();
}
delete this.compute_when_synced;
}
delete this.compute_when_synced;
return null;
}
},
@ -219,7 +231,7 @@ module.exports = {
sync_step: "applyHB",
data: _hb
});
if (res.send_again != null) {
if ((res.send_again != null) && this.perform_send_again) {
send_again = (function(_this) {
return function(sv) {
return function() {

View File

@ -186,7 +186,7 @@ module.exports = function(HB) {
ReplaceManager.prototype.callEventDecorator = function(events) {
var event, name, prop, _i, _len, _ref;
if (!(this.isDeleted() || this.getLastOperation().isDeleted())) {
if (!this.isDeleted()) {
for (_i = 0, _len = events.length; _i < _len; _i++) {
event = events[_i];
_ref = this.event_properties;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
<html>
<head>
<meta charset="utf-8">
<title>Test Yatta!</title>
<title>Test Yjs!</title>
<link rel="stylesheet" href="../../node_modules/mocha/mocha.css" />
</head>
<body>
@ -13,9 +13,9 @@
mocha.ui('bdd');
mocha.reporter('html');
</script>
<script src="TextYatta_test.js"></script>
<script src="JsonYatta_test.js"></script>
<!--script src="XmlYatta_test_browser.js"></script-->
<script src="Text_test.js"></script>
<script src="Json_test.js"></script>
<!--script src="Xml_test_browser.js"></script-->
<script>
//mocha.checkLeaks();
//mocha.run();

View File

@ -1,5 +1,5 @@
# Examples
Here you find some (hopefully) usefull examples on how to use Yatta!
Here you find some (hopefully) usefull examples on how to use Yjs!
Please note, that the XMPP Connector is the best supported Connector at the moment.
Feel free to use the code of the examples in your own project. They include basic examples how to use Yjs.

View File

@ -53,7 +53,6 @@ adaptConnector = (connector, engine, HB, execution_listener)->
connector.getHB = getHB
connector.applyHB = applyHB
connector.receive_handlers = []
connector.receive_handlers.push (sender, op)->
if op.uid.creator isnt HB.getUserId()
engine.applyOp op

View File

@ -1,10 +1,11 @@
module.exports =
#
# @params new Connector(syncMode, role)
# @param syncMode {String} is either "syncAll" or "master-slave".
# @param role {String} The role of this client
# @params new Connector(options)
# @param options.syncMode {String} is either "syncAll" or "master-slave".
# @param options.role {String} The role of this client
# (slave or master (only used when syncMode is master-slave))
# @param options.perform_send_again {Boolean} Whetehr to whether to resend the HB after some time period. This reduces sync errors, but has some overhead (optional)
#
init: (options)->
req = (name, choices)=>
@ -19,7 +20,14 @@ module.exports =
req "syncMode", ["syncAll", "master-slave"]
req "role", ["master", "slave"]
req "user_id"
@on_user_id_set(@user_id)
@on_user_id_set?(@user_id)
# whether to resend the HB after some time period. This reduces sync errors.
# But this is not necessary in the test-connector
if options.perform_send_again?
@perform_send_again = options.perform_send_again
else
@perform_send_again = true
# A Master should sync with everyone! TODO: really? - for now its safer this way!
if @role is "master"
@ -30,7 +38,7 @@ module.exports =
# Peerjs Connections: key: conn-id, value: object
@connections = {}
# List of functions that shall process incoming data
# @receive_handlers = [] # this is already set in the ConnectorAdapter!
@receive_handlers = []
# whether this instance is bound to any y instance
@is_bound_to_y = false
@ -63,8 +71,8 @@ module.exports =
if not role?
throw new Error "Internal: You must specify the role of the joined user! E.g. userJoined('uid:3939','slave')"
# a user joined the room
@connections[user] =
is_synced : false
@connections[user] ?= {}
@connections[user].is_synced = false
if (not @is_synced) or @syncMode is "syncAll"
if @syncMode is "syncAll"
@ -165,9 +173,10 @@ module.exports =
setStateSynced: ()->
if not @is_synced
@is_synced = true
for f in @compute_when_synced
f()
delete @compute_when_synced
if @compute_when_synced?
for f in @compute_when_synced
f()
delete @compute_when_synced
null
#
@ -208,7 +217,7 @@ module.exports =
sync_step : "applyHB"
data: _hb
if res.send_again?
if res.send_again? and @perform_send_again
send_again = do (sv = data.state_vector)=>
()=>
hb = @getHB(sv).hb

View File

@ -183,7 +183,7 @@ module.exports = (HB)->
#
#
callEventDecorator: (events)->
if not (@isDeleted() or @getLastOperation().isDeleted())
if not @isDeleted()
for event in events
for name,prop of @event_properties
event[name] = prop

View File

@ -7,7 +7,7 @@ _ = require("underscore")
chai.use(sinonChai)
Connector = require "../../y-connectors/lib/y-test/y-test.coffee"
Connector = require "../../y-test/lib/y-test.coffee"
Y = require "../lib/y.coffee"
Test = require "./TestSuite"

View File

@ -7,7 +7,7 @@ _ = require("underscore")
chai.use(sinonChai)
Connector = require "../../y-connectors/lib/y-test/y-test.coffee"
Connector = require "../../y-test/lib/y-test.coffee"
module.exports = class Test
constructor: (@name_suffix = "")->

View File

@ -8,7 +8,7 @@ _ = require("underscore")
chai.use(sinonChai)
Y = require "../lib/y"
Connector = require "../../y-connectors/lib/y-test/y-test.coffee"
Connector = require "../../y-test/lib/y-test.coffee"
Test = require "./TestSuite"
class TextTest extends Test

View File

@ -11,7 +11,7 @@ require 'coffee-errors'
chai.use(sinonChai)
Y = require "../lib/index"
Connector = require "../../Yatta-Connectors/lib/test-connector/test-connector.coffee"
Connector = require "../../y-test/lib/y-test.coffee"
Test = require "./TestSuite"
class XmlTest extends Test

File diff suppressed because one or more lines are too long

4
y.js

File diff suppressed because one or more lines are too long