public async Task SendAsync_MessageDispatcherStarted_WebSocketShouldSendCorrectByteArray()
        {
            //arrange
            object message = new { Test = "testMessage" };

            JObject jsonMessage = JObject.FromObject(message);

            RosPublishMessage rosPublishMessage = new RosPublishMessage()
            {
                Id      = _publisher._uniqueId,
                Topic   = TOPIC,
                Message = jsonMessage
            };

            byte[] serialized = _messageSerializer.Serialize(rosPublishMessage);

            _clientWebSocketMock.SetupGet(clientWebSocket => clientWebSocket.State).Returns(WebSocketState.Open);

            await _messageDispatcher.StartAsync();

            //act
            await _publisher.PublishAsync(message);

            //assert
            _clientWebSocketMock.Verify(clientWebSocket => clientWebSocket.SendAsync(
                                            It.Is <ArraySegment <byte> >(arraySegment => arraySegment.Array.SequenceEqual(serialized)),
                                            WebSocketMessageType.Text,
                                            true,
                                            _cancellationTokenSource.Token));
        }
        private void RosbridgeMessageReceived(object sender, RosbridgeMessageReceivedEventArgs args)
        {
            if (null != args)
            {
                RosPublishMessage receivedPublishMessage = args.RosbridgeMessage.ToObject <RosPublishMessage>();

                if (null != RosMessageReceived && null != receivedPublishMessage && !string.IsNullOrEmpty(receivedPublishMessage.Topic) && receivedPublishMessage.Topic.Equals(this.Topic))
                {
                    TRosMessage receivedRosMessage = receivedPublishMessage.Message.ToObject <TRosMessage>();

                    RosMessageReceived(this, new RosMessageReceivedEventArgs <TRosMessage>(receivedRosMessage));
                }
            }
        }