Files
MQTTnet/MQTTnet.NET/MqttTcpChannel.cs
T
2017-03-19 18:41:29 +01:00

46 lines
1.5 KiB
C#

using System;
using System.Net.Sockets;
using System.Threading.Tasks;
using MQTTnet.Core.Channel;
using MQTTnet.Core.Client;
namespace MQTTnet.NETFramework
{
public class MqttTcpChannel : IMqttTransportChannel, IDisposable
{
private readonly Socket _socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
public async Task ConnectAsync(MqttClientOptions options)
{
await Task.Factory.FromAsync(_socket.BeginConnect, _socket.EndConnect, options.Server, options.Port, null);
}
public async Task DisconnectAsync()
{
await Task.Factory.FromAsync(_socket.BeginDisconnect, _socket.EndDisconnect, true, null);
}
public async Task WriteAsync(byte[] buffer)
{
if (buffer == null) throw new ArgumentNullException(nameof(buffer));
await Task.Factory.FromAsync(
// ReSharper disable once AssignNullToNotNullAttribute
_socket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, null, null),
_socket.EndSend);
}
public async Task ReadAsync(byte[] buffer)
{
await Task.Factory.FromAsync(
// ReSharper disable once AssignNullToNotNullAttribute
_socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, null, null),
_socket.EndReceive);
}
public void Dispose()
{
_socket?.Dispose();
}
}
}