Beispiel #1
0
        public void SendConnectBeacon(string ip)
        {
            BytePacker packer;
            int        length = CreateBeaconData(out packer);

            udpSender.Send(ip, length, packer.Buffer);
        }
Beispiel #2
0
        public async Task <bool> Send <T>(ComNode node, short channelId, T data)
        {
            if (sendPortNumber == 0)
            {
                return(false);
            }

            return(await Task.Run(async() => {
                if (!dataChannelMap.ContainsKey(channelId))
                {
                    return false;
                }

                IDataChannel channel = dataChannelMap[channelId];

                bool isRent = false;
                byte[] buffer = null;
                int bufferSize = 0;

                BuildBuffer(channel, data, ref buffer, ref bufferSize, ref isRent);

                await udpSender.Send(node.IP, bufferSize, buffer);

                if (isRent)
                {
                    arrayPool.Return(buffer);
                }

                return true;
            }));
        }
Beispiel #3
0
        public async Task <bool> Send <T>(short channelId, T data)
        {
            if (!IsConnected)
            {
                return(false);
            }

            if (!dataChannelMap.ContainsKey(channelId))
            {
                return(false);
            }

            IDataChannel channel = dataChannelMap[channelId];

            bool isRent  = true;
            int  bufSize = channel.GetDataSize(data);

            byte[] buf = arrayPool.Rent(bufSize + 6);
            if (buf == null)
            {
                isRent = false;
                buf    = new byte[bufSize + 6];
            }

            BytePacker packer = new BytePacker(buf);

            packer.Write((short)bufSize);

#if DISABLE_CHANNEL_VARINT
            packer.Write(channelId);
#else
            int s = 0;
            VarintBitConverter.SerializeShort(channelId, packer, out s);
#endif
            channel.ToStream(data, ref packer);

            int maxpos = (int)packer.Position;

            if (channel.Qos == QosType.Reliable)
            {
                await serverNode.Connection.Send(maxpos, buf);
            }
            else if (channel.Qos == QosType.Unreliable)
            {
                await udpSender.Send(serverNode.IP, maxpos, buf);
            }

            if (isRent)
            {
                arrayPool.Return(buf);
            }

            return(true);
        }
Beispiel #4
0
        public async Task <bool> Send <T>(short channelId, T data)
        {
            return(await Task.Run(async() =>
            {
                if (!IsConnected)
                {
                    return false;
                }
                if (!dataChannelMap.ContainsKey(channelId))
                {
                    return false;
                }

                IDataChannel channel = dataChannelMap[channelId];

                bool isRent = false;
                byte[] buffer = null;
                int bufferSize = 0;

                BuildBuffer(channel, data, ref buffer, ref bufferSize, ref isRent);

                if (channel.Qos == QosType.Reliable)
                {
                    await((ComTCPNode)serverNode).Connection.Send(bufferSize, buffer);
                }
                else if (channel.Qos == QosType.Unreliable)
                {
                    await udpSender.Send(serverNode.IP, bufferSize, buffer);
                }

                if (isRent)
                {
                    arrayPool.Return(buffer);
                }

                return true;
            }));
        }