public async Task SendMessageAsync(object messsage) { // Allow to send command/response/event/acknowledgement type of mesage derived from MessageBase class MessageBase messageBase = messsage as MessageBase; messageBase.IsNotNull($"Unexpected type of object received to serialize message in the ${nameof(SendMessageAsync)} method."); try { string JSON = messageBase.Serialise(); Logger.LogSensitive(Constants.Component, $"Sending: {ProcessDataTypes(messsage)}"); await socket.SendAsync(new ArraySegment <byte>(Encoding.UTF8.GetBytes(JSON)), WebSocketMessageType.Text, true, CancellationToken.None); } catch (ObjectDisposedException) { Logger.Warning(Constants.Component, "The ClientWebSocket has been closed"); } catch (InvalidOperationException) { Logger.Warning(Constants.Component, "The ClientWebSocket is not connected"); } catch (InvalidDataException ex) { Contracts.Fail($"Invalid data is set by the device class.{messageBase.Headers.Name}. {ex.Message}"); } catch (Exception ex) { Contracts.Fail($"Exception caught while in serialising JSON on sending message. {ex.Message}"); } }