public void SendConnectBeacon(string ip) { BytePacker packer; int length = CreateBeaconData(out packer); udpSender.Send(ip, length, packer.Buffer); }
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; })); }
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); }
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; })); }