Пример #1
0
        public void Send(ushort playerId, string name, byte[] data)
        {
            if (data.Length <= NetworkLinkerPool.MTU - HeaderSize)
            {
                Debug.LogError("MTU以下のサイズのデータは送れません");
                return;
            }

            int hash        = ByteToHash(data);
            var transporter = new LargeBytesTransporter(hash, data);

            int nameByteCount = DataStreamWriter.GetByteSizeStr(name);
            int dataSize      = NetworkLinkerPool.MTU - HeaderSize - 13 - nameByteCount;

            unsafe
            {
                fixed(byte *dataPtr = &data[transporter.pos])
                {
                    using (var writer = new DataStreamWriter(dataSize + 13 + nameByteCount, Allocator.Temp)) {
                        writer.Write((byte)BuiltInPacket.Type.DataTransporter);
                        writer.Write((byte)TransporterType.LargeBytes);
                        writer.Write(hash);
                        writer.Write((byte)FlagDef.Start);
                        writer.Write(name);
                        writer.Write(data.Length);
                        writer.WriteBytes(dataPtr, dataSize);
                        NetworkManager.Brodcast(writer, QosType.Reliable, true);
                    }
                }
            }
            transporter.pos           += dataSize;
            sendTransporterTable[hash] = transporter;
        }
Пример #2
0
    public async Task StartHost()
    {
        if (isStarted)
        {
            return;
        }

        isStarted = true;
        isHost    = true;

        var endpoint = new IPEndPoint(IPAddress.Broadcast, broadcastPort);

        client = new UdpClient();
        client.Connect(endpoint);
        Debug.Log("Broadcast StartHost");

        unsafe {
            int strByteCount = DataStreamWriter.GetByteSizeStr(m_broadcastData);
            using (var writer = new DataStreamWriter(10 + strByteCount, Allocator.Temp)) {
                writer.Write(m_broadcastKey);
                writer.Write(m_broadcastVersion);
                writer.Write(m_broadcastData);

                var reader = new DataStreamReader(writer, 0, writer.Length);
                var ctx    = default(DataStreamReader.Context);
                discovetyPacket = reader.ReadBytesAsArray(ref ctx, writer.Length);
            }
        }

        while (true)
        {
            if (isStarted)
            {
                await Task.Delay((int)(1000 * m_broadcastInterval));

                await client.SendAsync(discovetyPacket, discovetyPacket.Length);

                //Debug.Log ("Broadcast SendAsync");
            }
            else
            {
                break;
            }
        }

        if (client != null)
        {
            client.Close();
            client = null;
        }
    }
Пример #3
0
        //private byte[] buffer = null;

        public async void Send(ushort playerId, string fileName, System.IO.FileStream fileStream)
        {
            if (fileStream.Length <= NetworkLinkerPool.MTU - HeaderSize)
            {
                Debug.LogError("MTU以下のサイズのデータは送れません");
                return;
            }

            int hash        = FileToHash(fileStream);
            var transporter = new FileTransporter(hash, fileName, fileStream, SendBytePerFrame, 0);

            int nameByteCount = DataStreamWriter.GetByteSizeStr(fileName);
            int dataSize      = NetworkLinkerPool.MTU - HeaderSize - 15 - nameByteCount;

            fileStream.Seek(0, SeekOrigin.Begin);
            int readSize = await fileStream.ReadAsync(transporter.buffer, 0, dataSize);

            //Debug.Log ("Start : " + string.Join ("", transporter.buffer));

            unsafe
            {
                fixed(byte *dataPtr = transporter.buffer)
                {
                    using (var writer = new DataStreamWriter(dataSize + 15 + nameByteCount, Allocator.Temp)) {
                        writer.Write((byte)BuiltInPacket.Type.DataTransporter);
                        writer.Write((byte)TransporterType.File);
                        writer.Write(hash);
                        writer.Write((byte)FlagDef.Start);
                        writer.Write(fileName);
                        writer.Write((int)fileStream.Length);
                        writer.Write((ushort)dataSize);
                        writer.WriteBytes(dataPtr, dataSize);
                        NetworkManager.Brodcast(writer, QosType.Reliable, true);
                    }
                }
            }
            transporter.pos           += dataSize;
            sendTransporterTable[hash] = transporter;
        }