Class: EventdClient

Inherits:
EventdObject show all
Defined in:
lib/eventd/eventd_client.rb

Instance Attribute Summary collapse

Attributes inherited from EventdObject

#events

Instance Method Summary collapse

Methods inherited from EventdObject

#off, #on

Constructor Details

#initialize(socket, server = nil) ⇒ EventdClient

Initializer

Attributes

  • socket

  • server



28
29
30
31
32
33
# File 'lib/eventd/eventd_client.rb', line 28

def initialize(socket, server = nil)
	super()
	@socket = socket
   @server = server
	setup_socket unless @socket == nil
end

Instance Attribute Details

#socketObject

em-websocket socket object



20
21
22
# File 'lib/eventd/eventd_client.rb', line 20

def socket
  @socket
end

Instance Method Details

#broadcast(channel, data = nil) ⇒ Object

Send a broadcast to other clients

Attributes

  • channel

  • data



84
85
86
87
88
89
90
# File 'lib/eventd/eventd_client.rb', line 84

def broadcast(channel, data = nil)
  if @server.broadcast_channel_allowed? channel
    @server.clients.each do |client| client.emit channel, data end
  else
    self.emit 'error', "Broadcasts are not allowed on channel: #{channel}"
  end
end

#element(selector) ⇒ Object

Instantiate a new EventdElement

Attributes

  • selector



97
98
99
# File 'lib/eventd/eventd_client.rb', line 97

def element(selector)
	EventdElement.new(selector, self)
end

#emit(channel, data = nil, local = false) ⇒ Object

Send an emission to the client side library

Attributes

  • channel

  • data

  • local



69
70
71
72
73
74
75
76
# File 'lib/eventd/eventd_client.rb', line 69

def emit(channel, data = nil, local = false)
super(channel, data)

if not local
	emission = { 'channel' => channel, 'priority' => 'normal', 'data' => data }
	@socket.send emission.to_json
end
end

#setup_socketObject

Handle required events from the socket



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/eventd/eventd_client.rb', line 37

def setup_socket
	@socket.onopen do |handshake|
		self.emit('connect', handshake, true)
	end

	@socket.onclose do
		self.emit('disconnect', nil, true)
	end

	@socket.onmessage do |message|
		begin
			emission = JSON.parse message

			if emission['broadcast']
				self.broadcast emission['channel'], emission['data']
			end

			self.emit emission['channel'], emission['data']
			self.emit('message', message, true)
		rescue JSON::ParserError
			self.emit('message', message, true)
		end
	end
end