Add initial document sharing over peerJS connection

This commit is contained in:
Kevin Sawicki & Nathan Sobo
2013-06-20 10:47:41 -07:00
committed by Nathan Sobo
parent 66b490b5da
commit d283834978
3 changed files with 80 additions and 9 deletions

View File

@@ -33,6 +33,8 @@
"season": "0.10.0",
"humanize-plus": "1.1.0",
"semver": "1.1.4",
"guid": "0.0.10",
"telepath": "git://github.com/atom/telepath.git",
"c-tmbundle": "1.0.0",
"coffee-script-tmbundle": "2.0.0",
"css-tmbundle": "1.0.0",

View File

@@ -1,15 +1,51 @@
Peer = require './peer'
Guid = require 'guid'
Prompt = require './prompt'
{createSite, Document} = require 'telepath'
createConnection = ->
peer = new Peer('some-id1', {host: 'ec2-54-218-51-127.us-west-2.compute.amazonaws.com', port: 8080})
peerJsSettings =
host: 'ec2-54-218-51-127.us-west-2.compute.amazonaws.com'
port: 8080
wireDocumentEvents = (connection, sharedDocument) ->
sharedDocument.outputEvents.on 'changed', (event) ->
console.log 'sending event', event
connection.send(event)
connection.on 'data', (event) ->
console.log 'receiving event', event
sharedDocument.handleInputEvent(event)
startSession = ->
id = Guid.create().toString()
peer = new Peer(id, peerJsSettings)
sharedDocument = Document.fromObject(createSite(id), {a: 1, b: 2, c: 3})
window.doc = sharedDocument
peer.on 'connection', (connection) ->
console.log 'connection'
connection.on 'data', (data) ->
console.log('Got data:', data)
connection.on 'open', ->
console.log 'sending document', sharedDocument.serialize()
connection.send(sharedDocument.serialize())
wireDocumentEvents(connection, sharedDocument)
id
joinSession = (id) ->
siteId = Guid.create().toString()
peer = new Peer(siteId, peerJsSettings)
connection = peer.connect(id)
connection.on 'open', ->
console.log 'connection opened'
connection.once 'data', (data) ->
console.log 'received data', data
sharedDocument = Document.deserialize(createSite(siteId), data)
window.doc = sharedDocument
console.log 'received document', sharedDocument.toObject()
wireDocumentEvents(connection, sharedDocument)
module.exports =
activate: ->
createConnection()
peer = new Peer('some-id2', {host: 'ec2-54-218-51-127.us-west-2.compute.amazonaws.com', port: 8080})
c2 = peer.connect('some-id1')
c2.on 'open', -> c2.send('test?')
rootView.command 'collaboration:start-session', ->
pasteboard.write(startSession())
rootView.command 'collaboration:join-session', ->
new Prompt 'Enter a session id to join', (id) ->
joinSession(id)

View File

@@ -0,0 +1,33 @@
{View} = require 'space-pen'
Editor = require 'editor'
$ = require 'jquery'
Point = require 'point'
_ = require 'underscore'
module.exports =
class Prompt extends View
@activate: -> new Prompt
@content: ({message}) ->
@div class: 'overlay from-top mini', =>
@subview 'miniEditor', new Editor(mini: true)
@div class: 'message', outlet: 'message', message
initialize: (message, @confirmed) ->
@miniEditor.on 'focusout', => @remove()
@on 'core:confirm', => @confirm()
@on 'core:cancel', => @remove()
@attach()
beforeRemove: ->
@previouslyFocusedElement?.focus()
@miniEditor.setText('')
confirm: ->
@confirmed(@miniEditor.getText())
@remove()
attach: ->
@previouslyFocusedElement = $(':focus')
rootView.append(this)
@miniEditor.focus()