From b6d134bdf0cfbd98a1dfe3e90e9cfcafed832868 Mon Sep 17 00:00:00 2001 From: 541595308 <541595308@qq.com> Date: Fri, 4 May 2018 22:11:08 +0800 Subject: [PATCH 1/5] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2801050f..a47e7f02 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +fork from mrniko/netty-socketio + Netty-socketio Overview === [![Maven Central](https://img.shields.io/maven-central/v/com.corundumstudio.socketio/netty-socketio.svg?style=flat-square)](https://maven-badges.herokuapp.com/maven-central/com.corundumstudio.socketio/netty-socketio/) From 37ab8abf7524a72dd548097d52f4ffbb9cec668d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A6=82=E6=9D=BE?= Date: Sat, 5 May 2018 00:35:49 +0800 Subject: [PATCH 2/5] bug: when socketio run with multy node use redisson, broadcast will send all rooms in namespace at other node when i only broadcast to a room solution: Specify a namespace and room for broadcast --- pom.xml | 6 +- .../socketio/BroadcastOperations.java | 125 ++------------- .../MultyRoomBroadcastOperations.java | 118 +++++++++++++++ .../SingleRoomBroadcastOperations.java | 143 ++++++++++++++++++ .../socketio/SocketIOServer.java | 52 +++++-- .../socketio/namespace/Namespace.java | 12 +- 6 files changed, 324 insertions(+), 132 deletions(-) create mode 100644 src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java create mode 100644 src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java diff --git a/pom.xml b/pom.xml index 768c872d..be7b4463 100644 --- a/pom.xml +++ b/pom.xml @@ -3,19 +3,19 @@ com.corundumstudio.socketio netty-socketio - 1.7.15-SNAPSHOT + 1.7.15-crs-SNAPSHOT bundle NettySocketIO Socket.IO server implemented on Java 2012 https://github.com/mrniko/netty-socketio - + diff --git a/src/main/java/com/corundumstudio/socketio/BroadcastOperations.java b/src/main/java/com/corundumstudio/socketio/BroadcastOperations.java index 06a4b05a..a4549500 100644 --- a/src/main/java/com/corundumstudio/socketio/BroadcastOperations.java +++ b/src/main/java/com/corundumstudio/socketio/BroadcastOperations.java @@ -15,123 +15,24 @@ */ package com.corundumstudio.socketio; -import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import com.corundumstudio.socketio.misc.IterableCollection; -import com.corundumstudio.socketio.namespace.Namespace; import com.corundumstudio.socketio.protocol.Packet; -import com.corundumstudio.socketio.protocol.PacketType; -import com.corundumstudio.socketio.store.StoreFactory; -import com.corundumstudio.socketio.store.pubsub.DispatchMessage; -import com.corundumstudio.socketio.store.pubsub.PubSubType; /** - * Fully thread-safe. + * broadcast interface * */ -public class BroadcastOperations implements ClientOperations { - - private final Iterable clients; - private final StoreFactory storeFactory; - - public BroadcastOperations(Iterable clients, StoreFactory storeFactory) { - super(); - this.clients = clients; - this.storeFactory = storeFactory; - } - - private void dispatch(Packet packet) { - Map> namespaceRooms = new HashMap>(); - for (SocketIOClient socketIOClient : clients) { - Namespace namespace = (Namespace)socketIOClient.getNamespace(); - Set rooms = namespace.getRooms(socketIOClient); - - Set roomsList = namespaceRooms.get(namespace.getName()); - if (roomsList == null) { - roomsList = new HashSet(); - namespaceRooms.put(namespace.getName(), roomsList); - } - roomsList.addAll(rooms); - } - for (Entry> entry : namespaceRooms.entrySet()) { - for (String room : entry.getValue()) { - storeFactory.pubSubStore().publish(PubSubType.DISPATCH, new DispatchMessage(room, packet, entry.getKey())); - } - } - } - - public Collection getClients() { - return new IterableCollection(clients); - } - - @Override - public void send(Packet packet) { - for (SocketIOClient client : clients) { - client.send(packet); - } - dispatch(packet); - } - - public void send(Packet packet, BroadcastAckCallback ackCallback) { - for (SocketIOClient client : clients) { - client.send(packet, ackCallback.createClientCallback(client)); - } - ackCallback.loopFinished(); - } - - @Override - public void disconnect() { - for (SocketIOClient client : clients) { - client.disconnect(); - } - } - - public void sendEvent(String name, SocketIOClient excludedClient, Object... data) { - Packet packet = new Packet(PacketType.MESSAGE); - packet.setSubType(PacketType.EVENT); - packet.setName(name); - packet.setData(Arrays.asList(data)); - - for (SocketIOClient client : clients) { - if (client.getSessionId().equals(excludedClient.getSessionId())) { - continue; - } - client.send(packet); - } - dispatch(packet); - } - - @Override - public void sendEvent(String name, Object... data) { - Packet packet = new Packet(PacketType.MESSAGE); - packet.setSubType(PacketType.EVENT); - packet.setName(name); - packet.setData(Arrays.asList(data)); - send(packet); - } - - public void sendEvent(String name, Object data, BroadcastAckCallback ackCallback) { - for (SocketIOClient client : clients) { - client.sendEvent(name, ackCallback.createClientCallback(client), data); - } - ackCallback.loopFinished(); - } - - public void sendEvent(String name, Object data, SocketIOClient excludedClient, BroadcastAckCallback ackCallback) { - for (SocketIOClient client : clients) { - if (client.getSessionId().equals(excludedClient.getSessionId())) { - continue; - } - client.sendEvent(name, ackCallback.createClientCallback(client), data); - } - ackCallback.loopFinished(); - } - - +public interface BroadcastOperations extends ClientOperations { + + public Collection getClients(); + + public void send(Packet packet, BroadcastAckCallback ackCallback); + + public void sendEvent(String name, SocketIOClient excludedClient, Object... data); + + public void sendEvent(String name, Object data, BroadcastAckCallback ackCallback); + + public void sendEvent(String name, Object data, SocketIOClient excludedClient, BroadcastAckCallback ackCallback); + } diff --git a/src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java b/src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java new file mode 100644 index 00000000..f388df0e --- /dev/null +++ b/src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java @@ -0,0 +1,118 @@ +/** + * Copyright 2012 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.corundumstudio.socketio; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import com.corundumstudio.socketio.protocol.Packet; + +/** + * Fully thread-safe. + * + */ +public class MultyRoomBroadcastOperations implements BroadcastOperations { + + private Collection broadcastOperations; + + public MultyRoomBroadcastOperations( Collection broadcastOperations ) { + this.broadcastOperations = broadcastOperations; + } + + public Collection getClients() { + Set clients = new HashSet(); + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return clients; + } + for( BroadcastOperations b : this.broadcastOperations ) { + clients.addAll( b.getClients() ); + } + return clients; + } + + @Override + public void send(Packet packet) { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.send( packet ); + } + } + + @Override + public void send(Packet packet, BroadcastAckCallback ackCallback) { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.send( packet, ackCallback ); + } + } + + @Override + public void disconnect() { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.disconnect(); + } + } + + @Override + public void sendEvent(String name, SocketIOClient excludedClient, Object... data) { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.sendEvent( name, excludedClient, data ); + } + } + + @Override + public void sendEvent(String name, Object... data) { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.sendEvent( name, data ); + } + } + + @Override + public void sendEvent(String name, Object data, BroadcastAckCallback ackCallback) { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.sendEvent( name, data, ackCallback ); + } + } + + @Override + public void sendEvent(String name, Object data, SocketIOClient excludedClient, BroadcastAckCallback ackCallback) { + if( this.broadcastOperations == null || this.broadcastOperations.size() == 0 ) { + return; + } + for( BroadcastOperations b : this.broadcastOperations ) { + b.sendEvent( name, data, excludedClient, ackCallback ); + } + } + + +} diff --git a/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java b/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java new file mode 100644 index 00000000..09be9b19 --- /dev/null +++ b/src/main/java/com/corundumstudio/socketio/SingleRoomBroadcastOperations.java @@ -0,0 +1,143 @@ +/** + * Copyright 2012 Nikita Koksharov + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.corundumstudio.socketio; + +import java.util.Arrays; +import java.util.Collection; + +import com.corundumstudio.socketio.misc.IterableCollection; +import com.corundumstudio.socketio.protocol.Packet; +import com.corundumstudio.socketio.protocol.PacketType; +import com.corundumstudio.socketio.store.StoreFactory; +import com.corundumstudio.socketio.store.pubsub.DispatchMessage; +import com.corundumstudio.socketio.store.pubsub.PubSubType; + +/** + * Fully thread-safe. + * + */ +public class SingleRoomBroadcastOperations implements BroadcastOperations { + + private final String namespace; + private final String room; + private final Iterable clients; + private final StoreFactory storeFactory; + + public SingleRoomBroadcastOperations(String namespace, String room, Iterable clients, StoreFactory storeFactory) { + super(); + this.namespace = namespace; + this.room = room; + this.clients = clients; + this.storeFactory = storeFactory; + } + + private void dispatch(Packet packet) { + this.storeFactory.pubSubStore().publish( + PubSubType.DISPATCH, + new DispatchMessage(this.room, packet, this.namespace)); +// Map> namespaceRooms = new HashMap>(); +// for (SocketIOClient socketIOClient : clients) { +// Namespace namespace = (Namespace)socketIOClient.getNamespace(); +// Set rooms = namespace.getRooms(socketIOClient); +// +// Set roomsList = namespaceRooms.get(namespace.getName()); +// if (roomsList == null) { +// roomsList = new HashSet(); +// namespaceRooms.put(namespace.getName(), roomsList); +// } +// roomsList.addAll(rooms); +// } +// for (Entry> entry : namespaceRooms.entrySet()) { +// for (String room : entry.getValue()) { +// storeFactory.pubSubStore().publish(PubSubType.DISPATCH, new DispatchMessage(room, packet, entry.getKey())); +// } +// } + } + + @Override + public Collection getClients() { + return new IterableCollection(clients); + } + + @Override + public void send(Packet packet) { + for (SocketIOClient client : clients) { + client.send(packet); + } + dispatch(packet); + } + + @Override + public void send(Packet packet, BroadcastAckCallback ackCallback) { + for (SocketIOClient client : clients) { + client.send(packet, ackCallback.createClientCallback(client)); + } + ackCallback.loopFinished(); + } + + @Override + public void disconnect() { + for (SocketIOClient client : clients) { + client.disconnect(); + } + } + + @Override + public void sendEvent(String name, SocketIOClient excludedClient, Object... data) { + Packet packet = new Packet(PacketType.MESSAGE); + packet.setSubType(PacketType.EVENT); + packet.setName(name); + packet.setData(Arrays.asList(data)); + + for (SocketIOClient client : clients) { + if (client.getSessionId().equals(excludedClient.getSessionId())) { + continue; + } + client.send(packet); + } + dispatch(packet); + } + + @Override + public void sendEvent(String name, Object... data) { + Packet packet = new Packet(PacketType.MESSAGE); + packet.setSubType(PacketType.EVENT); + packet.setName(name); + packet.setData(Arrays.asList(data)); + send(packet); + } + + @Override + public void sendEvent(String name, Object data, BroadcastAckCallback ackCallback) { + for (SocketIOClient client : clients) { + client.sendEvent(name, ackCallback.createClientCallback(client), data); + } + ackCallback.loopFinished(); + } + + @Override + public void sendEvent(String name, Object data, SocketIOClient excludedClient, BroadcastAckCallback ackCallback) { + for (SocketIOClient client : clients) { + if (client.getSessionId().equals(excludedClient.getSessionId())) { + continue; + } + client.sendEvent(name, ackCallback.createClientCallback(client), data); + } + ackCallback.loopFinished(); + } + + +} diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java index 71e1968d..64c0c7fc 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java @@ -15,7 +15,24 @@ */ package com.corundumstudio.socketio; -import com.corundumstudio.socketio.listener.*; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.corundumstudio.socketio.listener.ClientListeners; +import com.corundumstudio.socketio.listener.ConnectListener; +import com.corundumstudio.socketio.listener.DataListener; +import com.corundumstudio.socketio.listener.DisconnectListener; +import com.corundumstudio.socketio.listener.MultiTypeEventListener; +import com.corundumstudio.socketio.listener.PingListener; +import com.corundumstudio.socketio.namespace.Namespace; +import com.corundumstudio.socketio.namespace.NamespacesHub; + import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; @@ -28,16 +45,6 @@ import io.netty.util.concurrent.Future; import io.netty.util.concurrent.FutureListener; -import java.net.InetSocketAddress; -import java.util.Collection; -import java.util.UUID; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.corundumstudio.socketio.namespace.Namespace; -import com.corundumstudio.socketio.namespace.NamespacesHub; - /** * Fully thread-safe. * @@ -97,7 +104,16 @@ public Collection getAllNamespaces() { } public BroadcastOperations getBroadcastOperations() { - return new BroadcastOperations(getAllClients(), configCopy.getStoreFactory()); + Collection namespaces = namespacesHub.getAllNamespaces(); + List list = new ArrayList(); + BroadcastOperations broadcast = null; + if( namespaces != null && namespaces.size() > 0 ) { + for( SocketIONamespace n : namespaces ) { + broadcast = n.getBroadcastOperations(); + list.add( broadcast ); + } + } + return new MultyRoomBroadcastOperations( list ); } /** @@ -108,8 +124,16 @@ public BroadcastOperations getBroadcastOperations() { * @return broadcast operations */ public BroadcastOperations getRoomOperations(String room) { - Iterable clients = namespacesHub.getRoomClients(room); - return new BroadcastOperations(clients, configCopy.getStoreFactory()); + Collection namespaces = namespacesHub.getAllNamespaces(); + List list = new ArrayList(); + BroadcastOperations broadcast = null; + if( namespaces != null && namespaces.size() > 0 ) { + for( SocketIONamespace n : namespaces ) { + broadcast = n.getRoomOperations( room ); + list.add( broadcast ); + } + } + return new MultyRoomBroadcastOperations( list ); } /** diff --git a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java index db57140a..8e3052a4 100644 --- a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java +++ b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java @@ -31,10 +31,16 @@ import com.corundumstudio.socketio.BroadcastOperations; import com.corundumstudio.socketio.Configuration; import com.corundumstudio.socketio.MultiTypeArgs; +import com.corundumstudio.socketio.SingleRoomBroadcastOperations; import com.corundumstudio.socketio.SocketIOClient; import com.corundumstudio.socketio.SocketIONamespace; import com.corundumstudio.socketio.annotation.ScannerEngine; -import com.corundumstudio.socketio.listener.*; +import com.corundumstudio.socketio.listener.ConnectListener; +import com.corundumstudio.socketio.listener.DataListener; +import com.corundumstudio.socketio.listener.DisconnectListener; +import com.corundumstudio.socketio.listener.ExceptionListener; +import com.corundumstudio.socketio.listener.MultiTypeEventListener; +import com.corundumstudio.socketio.listener.PingListener; import com.corundumstudio.socketio.protocol.JsonSupport; import com.corundumstudio.socketio.protocol.Packet; import com.corundumstudio.socketio.store.StoreFactory; @@ -229,12 +235,12 @@ public void onPing(SocketIOClient client) { @Override public BroadcastOperations getBroadcastOperations() { - return new BroadcastOperations(allClients.values(), storeFactory); + return new SingleRoomBroadcastOperations(getName(), getName(), allClients.values(), storeFactory); } @Override public BroadcastOperations getRoomOperations(String room) { - return new BroadcastOperations(getRoomClients(room), storeFactory); + return new SingleRoomBroadcastOperations(getName(), room, getRoomClients(room), storeFactory); } @Override From 916f8645e25f1d7791ff58acb69f44e52cdd6492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A6=82=E6=9D=BE?= Date: Wed, 31 Oct 2018 21:42:12 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E5=8D=87=E7=BA=A7redisson?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../com/corundumstudio/socketio/store/RedissonPubSubStore.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 52e42e3f..75a35ebb 100644 --- a/pom.xml +++ b/pom.xml @@ -172,7 +172,7 @@ org.redisson redisson - 2.12.0 + 3.8.2 provided diff --git a/src/main/java/com/corundumstudio/socketio/store/RedissonPubSubStore.java b/src/main/java/com/corundumstudio/socketio/store/RedissonPubSubStore.java index e80ac751..8e286fa6 100644 --- a/src/main/java/com/corundumstudio/socketio/store/RedissonPubSubStore.java +++ b/src/main/java/com/corundumstudio/socketio/store/RedissonPubSubStore.java @@ -56,7 +56,7 @@ public void subscribe(PubSubType type, final PubSubLis RTopic topic = redissonSub.getTopic(name); int regId = topic.addListener(new MessageListener() { @Override - public void onMessage(String channel, T msg) { + public void onMessage(CharSequence channel, T msg) { if (!nodeId.equals(msg.getNodeId())) { listener.onMessage(msg); } From 4683700405165b9887bd80dacbfd81323bdcbe87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=A6=82=E6=9D=BE?= Date: Mon, 5 Nov 2018 00:19:37 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=A9=BA=E9=9B=86=E5=90=88=E6=97=B6=E5=88=A0=E9=99=A4=E4=B8=8D?= =?UTF-8?q?=E6=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/corundumstudio/socketio/namespace/Namespace.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java index 8e3052a4..fe48febe 100644 --- a/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java +++ b/src/main/java/com/corundumstudio/socketio/namespace/Namespace.java @@ -326,7 +326,7 @@ private void leave(ConcurrentMap> map, K room, V sessionId) { clients.remove(sessionId); if (clients.isEmpty()) { - map.remove(room, Collections.emptySet()); + map.remove(room, clients); } } From aeb461a1df402a5d612609d3a337d38d468b228e Mon Sep 17 00:00:00 2001 From: crs <> Date: Wed, 12 Aug 2020 21:48:55 +0800 Subject: [PATCH 5/5] no message --- README.md | 1 - pom.xml | 4 ++-- ...dcastOperations.java => MultiRoomBroadcastOperations.java} | 4 ++-- src/main/java/com/corundumstudio/socketio/SocketIOServer.java | 4 ++-- 4 files changed, 6 insertions(+), 7 deletions(-) rename src/main/java/com/corundumstudio/socketio/{MultyRoomBroadcastOperations.java => MultiRoomBroadcastOperations.java} (96%) diff --git a/README.md b/README.md index 952e4342..944a5e76 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,3 @@ -fork from mrniko/netty-socketio Netty-socketio Overview === diff --git a/pom.xml b/pom.xml index ff22ac21..34aace40 100644 --- a/pom.xml +++ b/pom.xml @@ -10,12 +10,12 @@ 2012 https://github.com/mrniko/netty-socketio - + diff --git a/src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java b/src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java similarity index 96% rename from src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java rename to src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java index f388df0e..46ed6693 100644 --- a/src/main/java/com/corundumstudio/socketio/MultyRoomBroadcastOperations.java +++ b/src/main/java/com/corundumstudio/socketio/MultiRoomBroadcastOperations.java @@ -25,11 +25,11 @@ * Fully thread-safe. * */ -public class MultyRoomBroadcastOperations implements BroadcastOperations { +public class MultiRoomBroadcastOperations implements BroadcastOperations { private Collection broadcastOperations; - public MultyRoomBroadcastOperations( Collection broadcastOperations ) { + public MultiRoomBroadcastOperations( Collection broadcastOperations ) { this.broadcastOperations = broadcastOperations; } diff --git a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java index 7bc1e0cd..44ba88e9 100644 --- a/src/main/java/com/corundumstudio/socketio/SocketIOServer.java +++ b/src/main/java/com/corundumstudio/socketio/SocketIOServer.java @@ -113,7 +113,7 @@ public BroadcastOperations getBroadcastOperations() { list.add( broadcast ); } } - return new MultyRoomBroadcastOperations( list ); + return new MultiRoomBroadcastOperations( list ); } /** @@ -133,7 +133,7 @@ public BroadcastOperations getRoomOperations(String room) { list.add( broadcast ); } } - return new MultyRoomBroadcastOperations( list ); + return new MultiRoomBroadcastOperations( list ); } /**