define [ 'underscore', 'backbone', 'socket.io' ], (_, Backbone, io) -> ConnectionModel = Backbone.Model.extend initialize: -> @socket = null @host = window.location.protocol + "//" + window.location.host disconnect: -> if @socket? console.log "disconnecting from", @host @socket.disconnect() @socket = null else console.log "tried to disconnect but it's not connected" connect: -> unless @socket? console.log "connecting to the server", @host @socket = io.connect(@host) else console.log "tried to connect but it's already connected" # Emit an update to move the cursor around the canvas # @param {number} x x-coord of the cursor as a percentage of page width # @param {number} y y-coord of the cursor as a percentage of page height emitMoveCursor: (x, y) -> @socket.emit "mvCur", x, y # Requests the shapes from the server. emitAllShapes: -> @socket.emit "all_shapes" # Emit an update in a fit of the whiteboard # @param {boolean} true for fitToPage, false for fitToWidth emitFitToPage: (fit) -> @socket.emit "fitToPage", fit # Emit a message to the server # @param {string} the message emitMsg: (msg) -> @socket.emit "msg", msg # Emit the finish of a text shape emitTextDone: -> @socket.emit "textDone" # Emit the creation of a shape # @param {string} shape type of shape # @param {Array} data all the data required to draw the shape on the client whiteboard emitMakeShape: (shape, data) -> @socket.emit "makeShape", shape, data # Emit the update of a shape # @param {string} shape type of shape # @param {Array} data all the data required to update the shape on the client whiteboard emitUpdateShape: (shape, data) -> @socket.emit "updShape", shape, data # Emit an update in the whiteboard position/size values # @param {number} cx x-offset from top left corner as percentage of original width of paper # @param {number} cy y-offset from top left corner as percentage of original height of paper # @param {number} sw slide width as percentage of original width of paper # @param {number} sh slide height as a percentage of original height of paper emitPaperUpdate: (cx, cy, sw, sh) -> @socket.emit "paper", cx, cy, sw, sh # Update the zoom level for the clients # @param {number} delta amount of change in scroll wheel emitZoom: (delta) -> @socket.emit "zoom", delta # Request the next slide emitNextSlide: -> @socket.emit "nextslide" # Request the previous slide emitPrevSlide: -> @socket.emit "prevslide" # Logout of the meeting emitLogout: -> @socket.emit "logout" # Emit panning has stopped emitPanStop: -> @socket.emit "panStop" # Publish a shape to the server to be saved # @param {string} shape type of shape to be saved # @param {Array} data information about shape so that it can be recreated later emitPublishShape: (shape, data) -> @socket.emit "saveShape", shape, JSON.stringify(data) # Emit a change in the current tool # @param {string} tool [description] emitChangeTool: (tool) -> @socket.emit "changeTool", tool # Tell the server to undo the last shape emitUndo: -> @socket.emit "undo" # Emit a change in the presenter emitSetPresenter: (id) -> @socket.emit "setPresenter", id ConnectionModel