diff --git a/Ragon.Server/Sources/Room/IRagonRoom.cs b/Ragon.Server/Sources/Room/IRagonRoom.cs index 11b4500..53b1078 100644 --- a/Ragon.Server/Sources/Room/IRagonRoom.cs +++ b/Ragon.Server/Sources/Room/IRagonRoom.cs @@ -31,6 +31,8 @@ public interface IRagonRoom public void ReplicateData(byte[] data, NetworkChannel channel); public void ReplicateData(byte[] data, List player, NetworkChannel channel); + public void ReplicateData(RagonRoomPlayer invoker, byte[] data, List receivers, + NetworkChannel channel = NetworkChannel.RELIABLE); RagonRoomPlayer GetPlayerByConnection(INetworkConnection connection); RagonRoomPlayer GetPlayerById(string id); diff --git a/Ragon.Server/Sources/Room/RagonRoom.cs b/Ragon.Server/Sources/Room/RagonRoom.cs index cc32859..dfeb668 100644 --- a/Ragon.Server/Sources/Room/RagonRoom.cs +++ b/Ragon.Server/Sources/Room/RagonRoom.cs @@ -215,6 +215,24 @@ public class RagonRoom : IRagonRoom, IRagonAction Broadcast(sendData, receivers, channel); } + + public void ReplicateData(RagonRoomPlayer invoker, byte[] data, List receivers, + NetworkChannel channel = NetworkChannel.RELIABLE) + { + var dataSize = data.Length; + var headerSize = 3; + var size = headerSize + dataSize; + var sendData = new byte[size]; + var peerId = invoker.Connection.Id; + + sendData[0] = (byte)RagonOperation.REPLICATE_RAW_DATA; + sendData[1] = (byte)peerId; + sendData[2] = (byte)(peerId >> 8); + + Array.Copy(data, 0, sendData, headerSize, dataSize); + + Broadcast(sendData, receivers, channel); + } public void Tick(float dt) {