< Summary - ReFlex - Library

Information
Class: ReFlex.Core.Networking.Components.WebSocketClient
Assembly: ReFlex.Core.Networking
File(s): D:\a\reflex\reflex\library\src\Core\Networking\Components\WebSocketClient.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 66
Coverable lines: 66
Total lines: 124
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%210%
.ctor(...)100%210%
get_IsInitialized()100%210%
get_IsConnected()100%210%
get_Type()100%210%
get_Address()100%210%
get_Id()100%210%
Connect()100%210%
WebSocketClosed(...)100%210%
HandleWebSocketError(...)0%7280%
WebSocketOpened(...)100%210%
WebSocketMessageReceived(...)100%210%
Disconnect()100%210%
Disconnect(...)100%210%
OnNewDataReceived(...)0%620%
Send(...)100%210%
Dispose()0%620%

File(s)

D:\a\reflex\reflex\library\src\Core\Networking\Components\WebSocketClient.cs

#LineLine coverage
 1using System;
 2using NLog;
 3using ReFlex.Core.Networking.Interfaces;
 4using ReFlex.Core.Networking.Util;
 5using WebSocketSharp;
 6using Logger = NLog.Logger;
 7
 8namespace ReFlex.Core.Networking.Components
 9{
 10    public class WebSocketClient : IClient, IDisposable
 11    {
 012        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
 13
 14        private readonly WebSocket _client;
 015        private readonly string _address = "";
 16        private readonly string _endpoint;
 17        private readonly int _port;
 18
 019        private readonly Guid _clientId = Guid.NewGuid();
 20
 21        public event EventHandler<NetworkingDataMessage> NewDataReceived;
 022        public bool IsInitialized { get; }
 023        public bool IsConnected { get; private set; }
 24
 025        public NetworkInterface Type => NetworkInterface.Websockets;
 26
 027        public string Address => $"{_address}:{_port}{_endpoint}";
 28
 029        public string Id => _clientId.ToString();
 30
 031        public WebSocketClient(string address, int port, string endpoint)
 032        {
 033            _address = address;
 034            _port = port;
 035            _endpoint = endpoint;
 36
 037            _client = new WebSocket($"{_address}:{_port}{_endpoint}");
 038            IsInitialized = true;
 039        }
 40
 41        /// <summary>
 42        ///
 43        /// </summary>
 44        /// <param name="address">c</param>
 45        /// <param name="port"></param>
 46        /// <returns></returns>
 47        public bool Connect()
 048        {
 049            _client.Connect();
 050            _client.OnOpen += WebSocketOpened;
 051            _client.OnMessage += WebSocketMessageReceived;
 052            _client.OnClose += WebSocketClosed;
 053            _client.OnError += HandleWebSocketError;
 54
 055            IsConnected = _client.ReadyState == WebSocketState.Open;
 56
 057            return IsConnected;
 058        }
 59
 60        private void WebSocketClosed(object sender, CloseEventArgs e)
 061        {
 062            Logger.Debug(
 063                $"WebSocket on '{_address}' closed with code {e.Code}. {Environment.NewLine}Reason: {e.Reason}, was clea
 64
 065            IsConnected = false;
 066        }
 67
 68
 69        private void HandleWebSocketError(object sender, ErrorEventArgs e)
 070        {
 071            Logger.Error(e?.Exception,
 072                $"{e?.Exception?.GetType()} on WebSocket on '{_address}': {e?.Message}.");
 73
 074            IsConnected = false;
 075        }
 76
 77        private void WebSocketOpened(object sender, EventArgs e)
 078        {
 079            Logger.Debug(
 080                $"WebSocket on '{_address}' opened. ClientId: {_clientId}.");
 081        }
 82
 83        private void WebSocketMessageReceived(object sender, MessageEventArgs e)
 084        {
 085            Logger.Trace(
 086                $"WebSocket on '{_address}' received data: {Environment.NewLine}{e.Data}{Environment.NewLine}ClientId: {
 87
 088            var message = new NetworkingDataMessage(e.Data, _clientId);
 089            OnNewDataReceived(this, message);
 090        }
 91
 92        public void Disconnect()
 093        {
 094            Disconnect($"Client with Id {_clientId} disconnected.");
 95
 096            IsConnected = false;
 097        }
 98
 99        private void Disconnect(string message)
 0100        {
 0101            _client.Close(CloseStatusCode.Normal, message);
 0102            _client.OnOpen -= WebSocketOpened;
 0103            _client.OnMessage -= WebSocketMessageReceived;
 0104            _client.OnClose -= WebSocketClosed;
 0105            _client.OnError -= HandleWebSocketError;
 0106        }
 107
 108        public void OnNewDataReceived(object sender, NetworkingDataMessage message)
 0109        {
 0110            NewDataReceived?.Invoke(sender, message);
 0111        }
 112
 113        public void Send(NetworkingDataMessage message)
 0114        {
 0115            _client.Send(message.Message);
 0116        }
 117
 118        public void Dispose()
 0119        {
 0120            Disconnect($"App for client {_clientId} is closing.");
 0121            ((IDisposable)_client)?.Dispose();
 0122        }
 123    }
 124}