Bus.Transport.Network.ZmqPushWireSendingTransport.SendMessage C# (CSharp) Метод

SendMessage() публичный Метод

public SendMessage ( WireSendingMessage message, IEndpoint endpoint ) : void
message Bus.Transport.SendingPipe.WireSendingMessage
endpoint IEndpoint
Результат void
        public void SendMessage(WireSendingMessage message, IEndpoint endpoint)
        {
            ZmqSocket socket;
            var zmqEndpoint = (ZmqEndpoint)endpoint;
            if (!_endpointsToSockets.TryGetValue(zmqEndpoint, out socket))
            {
                socket = CreatePushSocket(zmqEndpoint);
                _endpointsToSockets.Add(zmqEndpoint, socket);
            }
            var status = SendStatus.TryAgain;
            var wait = default(SpinWait);
            bool first = true;
            //  _watch.Start();

            var buffer = _serializer.Serialize(message.MessageData);
            do
            {
                socket.Send(buffer, buffer.Length, SocketFlags.DontWait);
                status = socket.SendStatus;
                if (!first)
                    wait.SpinOnce();
                else
                    first = false;
            } while (status == SendStatus.TryAgain && wait.Count < 1000);

            if (socket.SendStatus != SendStatus.Sent) //peer is disconnected (or underwater from too many message), raise some event?
            {
                _logger.Info(string.Format("disconnect of endpoint {0}", zmqEndpoint.Endpoint));
                EndpointDisconnected(endpoint);
                //dispose socket and allow for re-creation of socket with same endpoint; everything will get slow as hell if we continue trying? or only if high water mark
                socket.Dispose();
                _endpointsToSockets.Remove(zmqEndpoint);
            }
        }