public void Disable() { if (!IsEnabled) { return; } lock (this) { IsEnabled = false; _socket.Dispose(); _socket = null; SapClient.OnInterfaceDisable(this); } }
private void OnReceive(IAsyncResult ar) { lock (this) { int length; try { if (_socket == null) { return; } length = _socket.EndReceive(ar); } catch (Exception) { return; } try { var stream = new MemoryStream(_buffer, 0, length, false, true); Announcement announcement = ReadAnnouncement(stream); if (announcement.Type == Announcement.MessageType.Announcement) { SapClient.OnSessionAnnounce(this, announcement); } else { announcement.Decompress(); string origin = Encoding.UTF8.GetString(announcement.Payload.Array, announcement.Payload.Offset + 2, announcement.Payload.Count - 4); SapClient.OnSessionDelete(this, Origin.Parse(origin)); } } catch (Exception e) { SapClient.OnException(e); } StartReceive(); } }
static SapClient() { _sapClient = new SapClient(); }
public NetworkInterfaceHandler(SapClient sapClient, NetworkInterface networkInterface) { SapClient = sapClient; NetworkInterface = networkInterface; _index = NetworkInterface.Information.GetIPProperties().GetIPv4Properties().Index; }