Skip to content
This repository has been archived by the owner on Jul 21, 2022. It is now read-only.

Commit

Permalink
Removed tabbed spacing
Browse files Browse the repository at this point in the history
  • Loading branch information
johnmurphy01 committed Aug 21, 2017
1 parent bd4d1c1 commit ec07d5a
Showing 1 changed file with 128 additions and 132 deletions.
260 changes: 128 additions & 132 deletions Pusher.Connections.Net/WebSocketConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,136 +6,132 @@

namespace Pusher.Connections.Net
{
public class WebSocketConnection : IConnection
{
private WebSocket _socket;
private readonly Uri _endpoint;
private ConnectionState _connectionState;

public WebSocketConnection(Uri endpoint)
{
_endpoint = endpoint;
SetupSocket();
}

private void SetupSocket()
{
_socket = new WebSocket(_endpoint.ToString());
_socket.Closed += OnSocketClosed;
_socket.MessageReceived += OnMessageReceived;
}

private async void OnMessageReceived(object sender, MessageReceivedEventArgs args)
{
if (OnData == null) return;

var exceptionOccured = false;
try
{
var text = args.Message;
OnData(sender, new DataReceivedEventArgs { TextData = text });
}
catch (Exception)
{
exceptionOccured = true;
}
// cannot await in catch
if (exceptionOccured)
{
_connectionState = ConnectionState.Failed;
try
{
await Reconnect();
}
catch (Exception e)
{
Error(e);
}
}
}

private async Task Reconnect()
{
if (_connectionState == ConnectionState.Connecting || _connectionState == ConnectionState.Connected) return;

SetupSocket();
await Open();
}

private async void OnSocketClosed(object sender, EventArgs args)
{
if (_connectionState != ConnectionState.Disconnecting)
{
_connectionState = ConnectionState.Failed;
try
{
await Reconnect();
}
catch (Exception e)
{
Error(e);
return;
}
}
_connectionState = ConnectionState.Disconnected;
if (OnClose != null) OnClose(sender, new EventArgs());
}

#region Implementation of IConnection

public void Close()
{
_connectionState = ConnectionState.Disconnecting;
_socket.Close(1000, "Close requested");
_connectionState = ConnectionState.Disconnected;
}

public async Task Open()
{
try
{
if (_connectionState == ConnectionState.Connected)
{
Close();
SetupSocket();
}

_connectionState = ConnectionState.Connecting;
_socket.Open();

_connectionState = ConnectionState.Connected;
if (OnOpen != null)
{
OnOpen(this, new EventArgs());
}
}
catch { }
}

public async Task SendMessage(string data)
{
if (_connectionState != ConnectionState.Connected)
{
await Open();
}

_socket.Send(data);
}

/// <summary>
/// Triggered whenever an error occurs whenever we cannot raise an exception (because it could not be caught).
/// </summary>
private void Error(Exception e)
{
if (OnError == null) return;
OnError(this, new ExceptionEventArgs { Exception = e });
}

public event EventHandler<ExceptionEventArgs> OnError;
public event EventHandler<EventArgs> OnClose;
public event EventHandler<EventArgs> OnOpen;
public event EventHandler<DataReceivedEventArgs> OnData;

#endregion
}
public class WebSocketConnection : IConnection
{
private WebSocket _socket;
private readonly Uri _endpoint;
private ConnectionState _connectionState;

public WebSocketConnection(Uri endpoint)
{
_endpoint = endpoint;
SetupSocket();
}

private void SetupSocket()
{
_socket = new WebSocket(_endpoint.ToString());
_socket.Closed += OnSocketClosed;
_socket.MessageReceived += OnMessageReceived;
}

private async void OnMessageReceived(object sender, MessageReceivedEventArgs args)
{
if (OnData == null) return;

var exceptionOccured = false;
try
{
var text = args.Message;
OnData(sender, new DataReceivedEventArgs { TextData = text });
}
catch (Exception)
{
exceptionOccured = true;
}
// cannot await in catch
if (exceptionOccured)
{
_connectionState = ConnectionState.Failed;
try
{
await Reconnect();
}
catch (Exception e)
{
Error(e);
}
}
}

private async Task Reconnect()
{
if (_connectionState == ConnectionState.Connecting || _connectionState == ConnectionState.Connected) return;

SetupSocket();
await Open();
}

private async void OnSocketClosed(object sender, EventArgs args)
{
if (_connectionState != ConnectionState.Disconnecting)
{
_connectionState = ConnectionState.Failed;
try
{
await Reconnect();
}
catch (Exception e)
{
Error(e);
return;
}
}
_connectionState = ConnectionState.Disconnected;
if (OnClose != null) OnClose(sender, new EventArgs());
}

#region Implementation of IConnection

public void Close()
{
_connectionState = ConnectionState.Disconnecting;
_socket.Close(1000, "Close requested");
_connectionState = ConnectionState.Disconnected;
}

public async Task Open()
{
if (_connectionState == ConnectionState.Connected)
{
Close();
SetupSocket();
}

_connectionState = ConnectionState.Connecting;
_socket.Open();

_connectionState = ConnectionState.Connected;
if (OnOpen != null)
{
OnOpen(this, new EventArgs());
}
}

public async Task SendMessage(string data)
{
if (_connectionState != ConnectionState.Connected)
{
await Open();
}

_socket.Send(data);
}

/// <summary>
/// Triggered whenever an error occurs whenever we cannot raise an exception (because it could not be caught).
/// </summary>
private void Error(Exception e)
{
if (OnError == null) return;
OnError(this, new ExceptionEventArgs { Exception = e });
}

public event EventHandler<ExceptionEventArgs> OnError;
public event EventHandler<EventArgs> OnClose;
public event EventHandler<EventArgs> OnOpen;
public event EventHandler<DataReceivedEventArgs> OnData;

#endregion
}
}

0 comments on commit ec07d5a

Please sign in to comment.