mirror of
https://github.com/atom/atom.git
synced 2026-01-23 05:48:10 -05:00
Add initial document sharing over peerJS connection
This commit is contained in:
committed by
Nathan Sobo
parent
66b490b5da
commit
d283834978
@@ -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",
|
||||
|
||||
@@ -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)
|
||||
|
||||
33
src/packages/collaboration/lib/prompt.coffee
Normal file
33
src/packages/collaboration/lib/prompt.coffee
Normal 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()
|
||||
Reference in New Issue
Block a user