|
|
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets;
namespace Apewer.Network {
/// <summary>扩展方法。</summary>
public static class Extension {
/// <summary>添加邮件账户。</summary>
public static void Add(this List<MailAddress> value, string address, string name) { if (value == null) return; value.Add(new MailAddress(address, name)); }
/// <summary>添加邮件账户。</summary>
public static void Add(this List<MailAddress> value, string address) { if (value == null) return; value.Add(new MailAddress(address)); }
/// <summary>发送邮件。</summary>
public static MailRecord Send(this MailClient value, MailMessage message) { return MailMethods.Send(value, message); }
/// <summary>发送邮件。</summary>
public static MailRecord Send(this MailClient value, string sender, string receiver, string content = null, string title = null) { return MailMethods.Send(value, sender, receiver, content, title); }
/// <summary>生成 Json 数组。</summary>
static Json ToJsonArray<T>(this IEnumerable<T> items, Func<T, Json> serializer) { if (items == null) return null;
var array = Apewer.Json.NewArray(); if (serializer != null) { foreach (var item in items) { if (item == null) continue; var json = serializer.Invoke(item); array.AddItem(json); } } return array; }
/// <summary>生成 Json 对象。</summary>
public static Json ToJson(this IPAddress address) { if (address == null) return null; var json = Json.NewObject(); json.SetProperty("text", address.ToString()); json.SetProperty("family", address.AddressFamily.ToString()); if (address.AddressFamily == AddressFamily.InterNetworkV6) { json.SetProperty("isLinkLocal", address.IsIPv6LinkLocal); json.SetProperty("scopeId", address.ScopeId); } return json; }
/// <summary>生成 Json 数组。</summary>
public static Json ToJson(this IEnumerable<IPAddress> addresses) => ToJsonArray(addresses, ToJson);
/// <summary>生成 Json 数组。</summary>
public static Json ToJson(this NetworkInterface @interface) { if (@interface == null) return null; var item = @interface;
var json = Json.NewObject(); json.SetProperty("text", item.ToString());
json.SetProperty("description", item.Description); json.SetProperty("id", item.Id); json.SetProperty("isReceiveOnly", item.IsReceiveOnly); json.SetProperty("name", item.Name); json.SetProperty("type", item.NetworkInterfaceType.ToString()); json.SetProperty("operational", item.OperationalStatus.ToString()); json.SetProperty("speed", item.Speed); json.SetProperty("multicast", item.SupportsMulticast);
json.SetProperty("mac", item.GetPhysicalAddress().ToString()); json.SetProperty("ipProperties", ToJson(item.GetIPProperties()));
return json; }
/// <summary>生成 Json 数组。</summary>
public static Json ToJson(this IEnumerable<NetworkInterface> items) => ToJsonArray(items, ToJson);
/// <summary>生成 Json 对象。</summary>
public static Json ToJson(this IPInterfaceProperties properties) { if (properties == null) return null; var json = Json.NewObject(); json.SetProperty("anycast", ToJson(properties.AnycastAddresses.Select(x => x.Address))); json.SetProperty("dhcp", ToJson(properties.DhcpServerAddresses)); json.SetProperty("dns", ToJson(properties.DnsAddresses)); json.SetProperty("suffix", properties.DnsSuffix); json.SetProperty("gateway", ToJson(properties.GatewayAddresses.Select(x => x.Address))); json.SetProperty("multicast", ToJson(properties.MulticastAddresses.Select(x => x.Address))); json.SetProperty("unicast", ToJson(properties.UnicastAddresses.Select(x => x.Address))); json.SetProperty("wins", ToJson(properties.WinsServersAddresses)); return json; }
/// <summary>生成 Json 对象。</summary>
public static Json ToJson(this IPAddressInformation information) { if (information == null) return null; var json = Json.NewObject(); json.SetProperty("address", ToJson(information.Address)); json.SetProperty("isDnsEligible", information.IsDnsEligible); json.SetProperty("isTransient", information.IsTransient); return json; }
/// <summary>生成 Json 对象。</summary>
public static Json ToJson(this PingReply reply) { if (reply == null) return null;
var buffer = BytesUtility.ToX2(reply.Buffer); if (buffer.Replace("0", "").IsEmpty()) buffer = null;
var json = Json.NewObject(); json.SetProperty("address", ToJson(reply.Address)); if (buffer != null) json.SetProperty("buffer", buffer); json.SetProperty("options", ToJson(reply.Options)); json.SetProperty("roundtripTime", reply.RoundtripTime); json.SetProperty("status", reply.Status.ToString()); return json; }
/// <summary>生成 Json 对象。</summary>
public static Json ToJson(this PingOptions options) { if (options == null) return null; var json = Json.NewObject(); json.SetProperty("dontFragment", options.DontFragment); json.SetProperty("ttl", options.Ttl); return json; }
/// <summary>从套接字接收数据。</summary>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="ArgumentOutOfRangeException"></exception>
/// <exception cref="SocketException"></exception>
/// <exception cref="ObjectDisposedException"></exception>
/// <exception cref="System.Security.SecurityException"></exception>
public static byte[] Receive(this Socket socket, int maxLength = 1024) { if (socket == null) throw new ArgumentNullException(nameof(socket));
var buffer = new byte[maxLength]; var received = socket.Receive(buffer, 0, maxLength, SocketFlags.None); if (received < maxLength) { var newBuffer = new byte[received]; Array.Copy(buffer, newBuffer, received); return newBuffer; } else { return buffer; } }
}
}
|