Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
                    }
                }
            }
        }