当前位置: 首页>>代码示例>>C#>>正文


C# ZSocket.Dispose方法代码示例

本文整理汇总了C#中ZSocket.Dispose方法的典型用法代码示例。如果您正苦于以下问题:C# ZSocket.Dispose方法的具体用法?C# ZSocket.Dispose怎么用?C# ZSocket.Dispose使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ZSocket的用法示例。


在下文中一共展示了ZSocket.Dispose方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Send

        public void Send(string endPoint, Type type, byte[] message, Dictionary<string, string> headers = null)
        {
            lock (_lock)
            {
                Dictionary<string, object> messageHeaders = GetHeaders(type, headers, endPoint, "Send");
                var serializedHeaders = JsonConvert.SerializeObject(messageHeaders);

                var msg = new ZMessage();
                msg.Append(new ZFrame(serializedHeaders));
                msg.Append(new ZFrame(message));

                // Reconnect if enpoint changed since the last message was sent.
                //if (_senderEndpoint != endPoint)
                //{
                    _senderEndpoint = endPoint;
                    _senderContext = new ZContext();
                    _sender = new ZSocket(_senderContext, ZSocketType.REQ);
                    
                    _sender.Connect(endPoint);
                //}

                // Send
                var poll = ZPollItem.CreateReceiver();
                var timeout = TimeSpan.FromMilliseconds(1);
                ZError error;
                int retriesLeft = 3;

                while (retriesLeft > 0)
                {
                    // Outgoing
                    if (!_sender.SendMessage(msg, out error))
                    {
                        if (error == ZError.ETERM)
                            return;    // Interrupted
                        throw new ZException(error);
                    }

                    // Incoming
                    ZMessage incoming;
                    while (true)
                    {
                        if (_sender.PollIn(poll, out incoming, out error, timeout))
                        {
                            using (incoming)
                            {
                                retriesLeft = 0;
                                break;
                            }
                        }
                        else
                        {
                            if (error == ZError.EAGAIN)
                            {
                                if (--retriesLeft == 0)
                                {
                                    Logger.Error("Server seems to be offline, abandoning");
                                    break;
                                }

                                Logger.Warn("No response from server, retrying…");

                                // Old socket is confused; close it and open a new one
                                _sender.Dispose();
                                _sender = new ZSocket(_senderContext, ZSocketType.REQ);
                                _sender.Connect(endPoint);

                                Logger.Info("I: reconnected");

                                // Send request again, on new socket
                                if (!_sender.SendMessage(msg, out error))
                                {
                                    if (error == ZError.ETERM)
                                        return;    // Interrupted
                                    throw new ZException(error);
                                }
 
                                continue;
                            }

                            if (error == ZError.ETERM)
                                return;    // Interrupted
                            throw new ZException(error);
                        }
                    }
                }

                _sender.Dispose();
                _senderContext.Dispose();
            }            
        }
开发者ID:geffzhang,项目名称:ServiceConnect-CSharp,代码行数:90,代码来源:Producer.cs


注:本文中的ZSocket.Dispose方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。