static bool TryGetOldPortArgs(PortRegistrationEventArgs args, out ConnectionEventArgs eventArgs) { eventArgs = new ConnectionEventArgs { MessageType = MessageType.Change }; JackPort oldPort = PortMapper.FirstOrDefault (map => map.PortReference == args.Port); if (oldPort == null) { return false; } List<Port> ports = new List<Port> (); ports.Add (oldPort); eventArgs.Connectables = ports; eventArgs.ChangeType = ChangeType.Deleted; eventArgs.ConnectionType = oldPort.ConnectionType; PortMapper.Remove (oldPort); eventArgs.Message = "Port unregistered."; return true; }
static void OnPortRegistration(object sender, PortRegistrationEventArgs args) { ConnectionEventArgs eventArgs = null; if (args.ChangeType == JackSharp.Events.ChangeType.New) { eventArgs = GetNewPortArgs (args); } else if (args.ChangeType == JackSharp.Events.ChangeType.Deleted) { if (!TryGetOldPortArgs (args, out eventArgs)) { return; } } else if (args.ChangeType == JackSharp.Events.ChangeType.Renamed) { JackPort oldPort = PortMapper.FirstOrDefault (map => map.PortReference == args.Port); if (oldPort == null) { // Cannot find it, treat is as new eventArgs = GetNewPortArgs (args); } else { eventArgs = GetRenamedPortArgs (args, oldPort); } } if (PortOrConnectionHasChanged != null && eventArgs != null) { PortOrConnectionHasChanged (null, eventArgs); } }
static ConnectionEventArgs GetNewPortArgs(PortRegistrationEventArgs args) { ConnectionEventArgs eventArgs = new ConnectionEventArgs { MessageType = MessageType.Change }; var newPort = AddNewJackPort (args.Port); eventArgs.Message = "New port registered."; eventArgs.ChangeType = ChangeType.New; List<IConnectable> clients = new List<IConnectable> (); Client newClient = new Client (newPort.ClientName, newPort.FlowDirection, newPort.ConnectionType); eventArgs.ConnectionType = newClient.ConnectionType; newClient.AddPort (newPort); clients.Add (newClient); eventArgs.Connectables = clients; return eventArgs; }
static ConnectionEventArgs GetRenamedPortArgs(PortRegistrationEventArgs args, JackPort oldPort) { ConnectionEventArgs eventArgs = new ConnectionEventArgs { MessageType = MessageType.Change }; PortMapper.Remove (oldPort); JackPort port = AddNewJackPort (args.Port); eventArgs.Connectables = new List<Port> { port }; eventArgs.ChangeType = ChangeType.Content; eventArgs.ConnectionType = port.ConnectionType; eventArgs.Message = "Port renamed."; return eventArgs; }
public void PortChanged(object sender, PortRegistrationEventArgs e) { switch (e.ChangeType) { case ChangeType.New: _ports.Add (e.Port); PortsFound++; if (e.Port.IsPhysicalPort) { PhysicalPortsFound++; } break; case ChangeType.Deleted: _ports.Remove (e.Port); PortsFound--; if (e.Port.IsPhysicalPort) { PhysicalPortsFound--; } break; } }