public void SendConnectBeacon(string ip) { BytePacker packer; int length = CreateBeaconData(out packer); udpBeaconSender.Send(ip, beaconPortNumber, length, packer.Buffer); }
public async Task <bool> Broadcast <T>(ComGroup group, short channelId, T data, ComNode exception = null) { IDataChannel channel; if (!dataChannelMap.TryGetValue(channelId, out channel)) { return(false); } bool isRent = false; byte[] buffer = null; int bufferSize = 0; if (channel.Encryption == Encryption.None) { BuildBuffer(channel, data, ref buffer, ref bufferSize, ref isRent, null); } foreach (var node in group) { if (node == exception) { continue; } if (!nodeTcpMap.ContainsKey(node.TcpEndPoint)) { continue; } if (channel.Encryption == Encryption.Aes) { BuildBuffer(channel, data, ref buffer, ref bufferSize, ref isRent, node.AesEncrypter); } ComSnowballNode snode = (ComSnowballNode)node; if (channel.Qos == QosType.Reliable) { await snode.Connection.Send(bufferSize, buffer); } else if (channel.Qos == QosType.Unreliable) { if (snode.UdpEndPoint != null) { await udpTerminal.Send(snode.Ip, snode.UdpEndPoint.Port, bufferSize, buffer); } } } if (isRent) { arrayPool.Return(buffer); } return(true); }
public async Task <bool> Send <T>(ComNode node, short channelId, T data) { if (portNumber == 0) { return(false); } return(await Task.Run(async() => { IDataChannel channel; if (!dataChannelMap.TryGetValue(channelId, out channel)) { return false; } bool isRent = false; byte[] buffer = null; int bufferSize = 0; BuildBuffer(channel, data, ref buffer, ref bufferSize, ref isRent); await udpTerminal.Send(node.Ip, portNumber, bufferSize, buffer).ConfigureAwait(false); if (isRent) { arrayPool.Return(buffer); } return true; }).ConfigureAwait(false)); }
async Task <bool> SendInternal <T>(short channelId, T data) { return(await Task.Run(async() => { if (!IsTcpConnected) { return false; } IDataChannel channel; if (!dataChannelMap.TryGetValue(channelId, out channel)) { return false; } bool isRent = false; byte[] buffer = null; int bufferSize = 0; IEncrypter encrypter = null; if (channel.Encryption == Encryption.Rsa) { encrypter = rsaEncrypter; } else if (channel.Encryption == Encryption.Aes) { encrypter = serverNode.AesEncrypter; } BuildBuffer(channel, data, ref buffer, ref bufferSize, ref isRent, encrypter); if (channel.Qos == QosType.Reliable) { await((ComSnowballNode)serverNode).Connection.Send(bufferSize, buffer).ConfigureAwait(false); } else if (channel.Qos == QosType.Unreliable) { await udpTerminal.Send(serverNode.Ip, portNumber, bufferSize, buffer).ConfigureAwait(false); } if (isRent) { arrayPool.Return(buffer); } return true; }).ConfigureAwait(false)); }