Skip to content

Commit fac1fac

Browse files
committed
Merge pull request #74 from hackmushroom/master
Added socket.broadcast.emit functionality to javascript client events
2 parents 3edb29f + 8856a93 commit fac1fac

File tree

4 files changed

+42
-12
lines changed

4 files changed

+42
-12
lines changed

README.md

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ Install ***nodejs*** components in ***application.ext.yii-node-socket.lib.js.ser
109109
```bash
110110
$> npm install
111111
```
112+
If you get errors issuing this command try the following:
113+
```bash
114+
$> npm install --no-bin-links
115+
```
112116

113117
Congratulation, installation completed!
114118

@@ -119,7 +123,7 @@ Congratulation, installation completed!
119123
Use (**./yiic node-socket**)
120124

121125
```bash
122-
$> ./yiic node-socket # show help
126+
$> ./yiic help node-socket # show help
123127
$> ./yiic node-socket/start # start server
124128
$> ./yiic node-socket/stop # stop server
125129
$> ./yiic node-socket/restart # restart server
@@ -249,18 +253,25 @@ socket.onConnect(function () {
249253
####Emit events
250254

251255
You can emit event to:
252-
- all clients
256+
- all clients (including the event sender)
257+
- all clients (excluding the event sender - broadcasting. Only javascript currently supports broadcasting. PHP broadcasting coming soon)
253258
- clients in concrete room
254259

255-
256260
Global events:
257261

258262
```javascript
259263

260264
socket.emit('global.event', {
261265
message : {
262266
id : 12,
263-
title : 'This is a test message'
267+
title : 'This is a test message to all including sender'
268+
}
269+
});
270+
271+
socket.broadcast.emit('global.event', {
272+
message : {
273+
id : 12,
274+
title : 'This is a test message to all excluding sender'
264275
}
265276
});
266277

examples/events/views/index.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
?>
66
<h3>Instruction</h3>
7-
<b>Don't forget run nodejs server <i style="color: #079c59">./yiic node-socket start</i> before example usage</b>
7+
<b>Don't forget run nodejs server <i style="color: #079c59">./yiic node-socket/start</i> before example usage</b>
88
<ul>
99
<li>1. Open "Go to this page for catch events example" page for catching events</li>
1010
<li>2. Open "Send simple event" or "Send simple room event" and see result on "Go to this page for catch events example"</li>

lib/js/client/client.template.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@
126126
(scope.type == 'global' ? '' : ':' + scope.id)
127127
);
128128

129+
owner.broadcast = false;
130+
129131
/**
130132
*
131133
* @param event
@@ -136,9 +138,12 @@
136138
socket.emit('event:emit', {
137139
'event' : event,
138140
'scope' : scope,
139-
'data' : data
141+
'data' : data,
142+
'broadcast' : owner.broadcast
140143
});
144+
owner.broadcast = false;
141145
};
146+
142147
}
143148

144149
/**
@@ -648,6 +653,11 @@
648653

649654
var systemEventsHandlerBinder = new SystemEventsHandlerBinder(this);
650655

656+
this.__defineGetter__('broadcast', function () {
657+
self._eventEmitter.broadcast = true;
658+
return self;
659+
});
660+
651661
this.getId = function () {
652662
return '';
653663
};

lib/js/server/events/client/event.emit.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,24 @@ var public_data = {
88

99
handler : function (packet) {
1010
if (packet['event'] && packet['scope'] && packet['scope']['type']) {
11+
var client = public_data.componentManager.get('io').of('/client');
1112
if (packet['scope']['type'] == 'global') {
12-
// global event -> for all clients
13-
public_data.componentManager.get('io').of('/client').emit(
14-
'global:' + packet['event'],
15-
packet['data'] || {}
16-
);
13+
if (packet['broadcast'] === true) {
14+
// global event -> for all clients excluding sender
15+
client.except(this.id).emit(
16+
'global:' + packet['event'],
17+
packet['data'] || {}
18+
);
19+
} else {
20+
// global event -> for all clients including sender
21+
client.emit(
22+
'global:' + packet['event'],
23+
packet['data'] || {}
24+
);
25+
}
1726
} else if (packet['scope']['type'] == 'room' && packet['scope']['id']) {
1827
// room event -> for sockets in concrete room
19-
public_data.componentManager.get('io').of('/client').in('room:' + packet['scope']['id']).emit(
28+
client.in('room:' + packet['scope']['id']).emit(
2029
'room:' + packet['scope']['id'] + ':' + packet['event'],
2130
packet['data'] || {},
2231
true

0 commit comments

Comments
 (0)