typing object to control who's typing over streams

pull/307/head
Diego Sampaio 11 years ago
parent bdc7ebd480
commit 534c8c42c6
  1. 88
      client/lib/typing.coffee
  2. 1
      server/stream/streamBroadcast.coffee
  3. 13
      server/stream/typingStream.coffee

@ -0,0 +1,88 @@
class @msgTyping
stream = new Meteor.Stream 'typing'
# store = new Meteor.Collection null
usersRoomTyping = {}
stopLimit = 15000
stopTimeout = null
renewTime = 10000
renewTimeout = null
constructor: (@room) ->
@renew = true
# @TODO if usersRoomTyping[@room] already exists, need to clear it
usersRoomTyping[@room] ?=
dep: new Tracker.Dependency
users: {}
self = @
stream.on @room, (typing) ->
clearTimeout usersRoomTyping[self.room].users[typing.username] if usersRoomTyping[self.room].users[typing.username]?
if typing.start?
console.log 'typing - iniciou ->',typing.username
# store.upsert
# room: self.room
# username: typing.username
# ,
# $set:
# ts: new Date()
if not usersRoomTyping[self.room].users[typing.username]?
newUser = true
usersRoomTyping[self.room].users[typing.username] = Meteor.setTimeout ->
console.log 'typing - removido (inatividade) ->',typing.username
delete usersRoomTyping[self.room].users[typing.username]
usersRoomTyping[self.room].dep.changed()
# store.remove
# room: self.room
# username: typing.username
, stopLimit
usersRoomTyping[self.room].dep.changed() if newUser
else if typing.stop?
console.log 'typing - removido (forçado) ->',typing.username
delete usersRoomTyping[self.room].users[typing.username]
usersRoomTyping[self.room].dep.changed()
# store.remove
# room: self.room
# username: typing.username
type: ->
# clearTimeout stopTimeout if stopTimeout?
# stopTimeout = Meteor.setTimeout ->
# console.log 'typing - parando ->',Meteor.user().username
# stream.emit 'typing', { room: @room, username: Meteor.user().username, stop: true }
# , renewTime
console.log 'renew ->',@renew
return unless @renew
self = @
clearTimeout renewTimeout if renewTimeout?
renewTimeout = Meteor.setTimeout ->
console.log 'typing - começa de novo ->',Meteor.user().username
self.renew = true
, renewTime
@renew = false
console.log 'typing - iniciando ->',Meteor.user().username
stream.emit 'typing', { room: @room, username: Meteor.user().username, start: true }
get: ->
usersRoomTyping[@room].dep.depend()
return Object.keys usersRoomTyping[@room].users
# console.log 'find by ->',room: @room, store.find().fetch()
# return store.find room: @room

@ -41,3 +41,4 @@
Meteor.startup ->
startStreamBroadcast
'webrtc.stream': webrtc.stream
'typing': typingStream

@ -0,0 +1,13 @@
@typingStream = new Meteor.Stream 'typing'
typingStream.permissions.read ->
return true
typingStream.permissions.write ->
return true
# typingStream.stream.on 'teste', ->
# console.log 'teste ->', arguments
typingStream.on 'typing', (typing) ->
typingStream.emit typing.room, _.pick(typing, 'username', 'start', 'stop')
Loading…
Cancel
Save