forked from zeromq/clrzmq4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathZException.cs
151 lines (135 loc) · 3.79 KB
/
ZException.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
namespace ZeroMQ
{
using System;
using System.Runtime.Serialization;
using lib;
using System.Runtime.InteropServices;
/// <summary>
/// An exception thrown by the result of libzmq.
/// </summary>
[Serializable]
public class ZException : Exception
{
private int? _errno = -1;
private string _errname = null;
private string _errtext = null;
/// <summary>
/// Gets the error code returned by libzmq.
/// </summary>
public int ErrNo
{
get
{
return !_errno.HasValue ? 0 : _errno.Value;
}
}
/// <summary>
/// Gets the error code returned by libzmq.
/// </summary>
public string ErrName
{
get
{
return _errname == null ? string.Empty : _errname;
}
}
/// <summary>
/// Gets the error text returned by libzmq.
/// </summary>
public string ErrText
{
get
{
return _errtext == null ? string.Empty : _errtext;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="ZException"/> class.
/// </summary>
/// <param name="errorCode">The error code returned by the ZeroMQ library call.</param>
public ZException()
{ }
/// <summary>
/// Initializes a new instance of the <see cref="ZException"/> class.
/// </summary>
/// <param name="errorCode">The error code returned by the ZeroMQ library call.</param>
public ZException(ZError errorSymbol)
: this(errorSymbol, default(string), default(Exception))
{ }
/// <summary>
/// Initializes a new instance of the <see cref="ZException"/> class.
/// </summary>
/// <param name="errorCode">The error code returned by the ZeroMQ library call.</param>
public ZException(ZError errorSymbol, string message)
: this(errorSymbol, message, default(Exception))
{ }
public ZException(ZError errorSymbol, string message, Exception inner)
: base(default(string), inner)
{
if (errorSymbol != null)
{
this._errno = errorSymbol.Number;
this._errname = errorSymbol.Name;
this._errtext = errorSymbol.Text;
}
else
{
this._errno = -1;
}
_message = message;
}
private string _message;
public override string Message
{
get
{
if (!string.IsNullOrEmpty(_message))
{
return
string.Format("{0}({1}): {2}: {3}",
ErrName, ErrNo, ErrText, _message);
}
return
string.Format("{0}({1}): {2}",
ErrName, ErrNo, ErrText);
}
}
public override string ToString()
{
return Message;
}
/// <summary>
/// Initializes a new instance of the <see cref="ZException"/> class.
/// </summary>
/// <param name="errorCode">The error code returned by the ZeroMQ library call.</param>
public ZException(int errorCode)
: this(errorCode, default(string), default(Exception))
{ }
/// <summary>
/// Initializes a new instance of the <see cref="ZException"/> class
/// using zmq_strerror(int errno)
/// </summary>
/// <param name="errorCode">The error code returned by the ZeroMQ library call.</param>
public ZException(int errorCode, string errorText)
: this(errorCode, errorText, default(Exception))
{ }
public ZException(int errorCode, string errorText, Exception inner)
: base(default(string), inner)
{
this._errno = errorCode;
this._errtext = errorText;
if (this._errtext == null && this._errno.HasValue)
{
this._errtext = Marshal.PtrToStringAnsi(zmq.strerror(this._errno.Value));
}
}
/// <summary>
/// Initializes a new instance of the <see cref="ZException"/> class.
/// </summary>
/// <param name="info"><see cref="SerializationInfo"/> that holds the serialized object data about the exception being thrown.</param>
/// <param name="context"><see cref="StreamingContext"/> that contains contextual information about the source or destination.</param>
protected ZException(SerializationInfo info, StreamingContext context)
: base(info, context)
{ }
}
}