protected void SendChunk(Vector3Int pos, byte[] chunkData, int id) { int chunkDataIndex = 0; while (chunkDataIndex < chunkData.Length) { byte[] message = new byte[VmNetworking.bufferLength]; message[0] = VmNetworking.transmitChunkData; pos.ToBytes().CopyTo(message, 1); BitConverter.GetBytes(chunkDataIndex).CopyTo(message, headerSize); BitConverter.GetBytes(chunkData.Length).CopyTo(message, headerSize + 4); if (debugServer) { Debug.Log("VmServer.SendChunk (" + Thread.CurrentThread.ManagedThreadId + "): " + pos + ", chunkDataIndex=" + chunkDataIndex + ", chunkData.Length=" + chunkData.Length + ", buffer=" + message.Length); } for (int i = leaderSize; i < message.Length; i++) { message[i] = chunkData[chunkDataIndex]; chunkDataIndex++; if (chunkDataIndex >= chunkData.Length) { break; } } SendToClient(message, id); } }
public void BroadcastChange(Vector3Int pos, BlockData blockData) { byte[] data = new byte[GetExpectedSize(VmNetworking.SendBlockChange)]; data[0] = VmNetworking.SendBlockChange; // 1 B pos.ToBytes().CopyTo(data, 1); // 3*4B = 12 B BlockData.ToByteArray(blockData).CopyTo(data, 13); // 2 B Send(data); }
public void RequestChunk(Vector3Int pos) { if (debugClient) { Debug.Log("VmClient.RequestChunk (" + Thread.CurrentThread.ManagedThreadId + "): " + pos); } byte[] message = new byte[13]; message[0] = VmNetworking.RequestChunkData; pos.ToBytes().CopyTo(message, 1); Send(message); }
public void BroadcastChange(Vector3Int pos, BlockData blockData, int excludedUser) { lock (clients) { if (clients.Count == 0) { return; } byte[] data = new byte[15]; data[0] = VmNetworking.SendBlockChange; pos.ToBytes().CopyTo(data, 1); BlockData.ToByteArray(blockData).CopyTo(data, 13); foreach (var client in clients.Values) { if (excludedUser == -1 || client.ID != excludedUser) { client.Send(data); } } } }