File: src/local_peer.coffee
- Peer = require('./peer').Peer
- Stream = require('./stream').Stream
- ###*
- # @module rtc
- ###
- ###*
- # Represents the local user of the room
- # @class rtc.LocalPeer
- # @extends rtc.Peer
- #
- # @constructor
- ###
- class exports.LocalPeer extends Peer
- constructor: () ->
- ###*
- # Contains promises of the local streams offered to all remote peers
- # @property streams
- # @type Object
- ###
- @streams = {}
- ###*
- # Contains all DataChannel configurations negotiated with all remote peers
- # @property channels
- # @type Object
- ###
- @channels = {}
- @_status = {}
- ###*
- # Get an item of the status transferred to all remote peers
- # @method status
- # @param {String} key The key of the value. Will return
- # @return The value associated with the key
- ###
- ###*
- # Set an item of the status transferred to all remote peers
- # @method status
- # @param {String} key The key of the value. Will return
- # @param value The value to store
- ###
- status: (key, value) ->
- if value?
- @_status[key] = value
- @emit 'status_changed', @_status
- return
- else
- return @_status[key]
- ###*
- # Add data channel which will be negotiated with all remote peers
- # @method addDataChannel
- # @param {String} [name='data'] Name of the data channel
- # @param {Object} [desc={ordered: true}] Options passed to `RTCDataChannel.createDataChannel()`
- ###
- addDataChannel: (name, desc) ->
- if typeof name != 'string'
- desc = name
- name = @DEFAULT_CHANNEL
- if not desc?
- # TODO: default handling
- desc = {
- ordered: true
- }
- @channels[name] = desc
- @emit 'configuration_changed'
- return
- ###*
- # Add local stream to be sent to all remote peers
- # @method addStream
- # @param {String} [name='stream'] Name of the stream
- # @param {Promise -> rtc.Stream | rtc.Stream | Object} stream The stream, a promise to the stream or the configuration to create a stream with `rtc.Stream.createStream()`
- # @return {Promise -> rtc.Stream} Promise of the stream which was added
- ###
- addStream: (name, obj) ->
- # helper to actually save stream
- saveStream = (stream_p) =>
- # TODO: collision detection?
- @streams[name] = stream_p
- @emit 'configuration_changed'
- return stream_p
- # name can be omitted ... once
- if typeof name != 'string'
- obj = name
- name = @DEFAULT_STREAM
- if obj?.then?
- # it is a promise
- return saveStream(obj)
- else if obj instanceof Stream
- # it is the actual stream, turn into promise
- return saveStream(Promise.resolve(obj))
- else
- # we assume we can pass it on to create a stream
- stream_p = Stream.createStream(obj)
- return saveStream(stream_p)
- ###*
- # Get local stream
- # @method stream
- # @param {String} [name='stream'] Name of the stream
- # @return {Promise -> rtc.Stream} Promise of the stream
- ###
- stream: (name=@DEFAULT_STREAM) ->
- return @streams[name]
- ###*
- # Checks whether the peer is the local peer. Returns always `true` on this
- # class.
- # @method isLocal
- # @return {Boolean} Returns `true`
- ###
- isLocal: () ->
- return true