private void SendProtocolRequests(Channel channel, ApplicationSupportedProtocols applicationProtocols, ICollection <ModifierSupportedProtocols> supportedModifierProtocols) { supportedModifierProtocols.forEach(modifierProtocol => { ProtocolSelection <string, ModifierProtocol> protocolSelection = _modifierProtocolRepository.getAll(modifierProtocol.identifier(), modifierProtocol.versions()); channel.Write(new ModifierProtocolRequest(protocolSelection.Identifier(), protocolSelection.Versions())); }); ProtocolSelection <int, Protocol_ApplicationProtocol> applicationProtocolSelection = _applicationProtocolRepository.getAll(applicationProtocols.Identifier(), applicationProtocols.Versions()); channel.WriteAndFlush(new ApplicationProtocolRequest(applicationProtocolSelection.Identifier(), applicationProtocolSelection.Versions())); }
public override void Handle(ApplicationProtocolResponse applicationProtocolResponse) { EnsureMagic(); if (applicationProtocolResponse.StatusCode() != SUCCESS) { Decline("Unsuccessful application protocol response"); return; } Optional <Protocol_ApplicationProtocol> protocol = _applicationProtocolRepository.select(applicationProtocolResponse.ProtocolName(), applicationProtocolResponse.Version()); if (!protocol.Present) { ProtocolSelection <int, Protocol_ApplicationProtocol> knownApplicationProtocolVersions = _applicationProtocolRepository.getAll(_supportedApplicationProtocol.identifier(), _supportedApplicationProtocol.versions()); Decline(string.Format("Mismatch of application protocols between client and server: Server protocol {0} version {1:D}: Client protocol {2} versions {3}", applicationProtocolResponse.ProtocolName(), applicationProtocolResponse.Version(), knownApplicationProtocolVersions.Identifier(), knownApplicationProtocolVersions.Versions())); } else { _negotiatedApplicationProtocol = protocol.get(); SendSwitchOverRequestIfReady(); } }