public IOWorker( IDictionary <string, Channel> channels, IDictionary <string, Listener> listeners, WaterFlowManager incomingFlowManager, Options options, IncomingMessageDispatchCallback incomingMessageDispatchCallback, ConnectionEventCallback connectionEventCallback, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.channels = channels; this.listeners = listeners; this.incomingFlowManager = incomingFlowManager; this.options = options; this.incomingMessageDispatchCallback = incomingMessageDispatchCallback; this.connectionEventCallback = connectionEventCallback; this.logCallback = logCallback; this.logLevel = logLevel; listenersForSelection = new Dictionary <Socket, Listener>(); channelsForSelection = new Dictionary <Socket, Channel>(); blockingChannelsReadyForReading = new List <Channel>(); blockingChannelsReadyForWriting = new List <Channel>(); stopRequest = false; }
public ChannelReader( NetworkUtils.TransportChannel connection, IncomingMessageDispatchCallback incomingMessageDispatchCallback, string target, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.connection = connection; this.incomingMessageDispatchCallback = incomingMessageDispatchCallback; this.target = target; this.logCallback = logCallback; this.logLevel = logLevel; incomingFrames = new Dictionary<int, IncomingMessageFrames>(); if (connection != null) { if (connection.connectedChannel != null) { // stream-based connection headerBuffer = new MemoryStream(Frame.FRAME_HEADER_SIZE); setReadingFrameHeaderState(); } else { // datagram-based connection wholeFrameBuffer = new byte[options.udpFrameSize]; state = InputState.READING_WHOLE_FRAMES; } } deliverAsRawBinary = options.deliverAsRawBinary; }
private void connect( IncomingMessageDispatchCallback incomingMessageDispatchCallback, IOWorker ioWorker) { if (NetworkUtils.protocolIsTcp(target)) { connection = NetworkUtils.connectTcp(target, options); } else if (NetworkUtils.protocolIsTcps(target)) { connection = NetworkUtils.connectTcps(target, options, ioWorker); // additionally, instruct I/O Worker that blocking sockets // are the only ones that should be acted upon ioWorker.UseBlockingChannelsOnly(); } else if (NetworkUtils.protocolIsUdp(target)) { connection = NetworkUtils.createUdp(target, options); } else if (target.Equals("null")) { // do nothing - this protocol is used for testing only channelWriter = new ChannelWriter( null, null, null, LogEventArgs.LogLevel.LOW); } else { throw new BadProtocolException(target); } createReaderWriter(incomingMessageDispatchCallback); }
public ChannelReader( NetworkUtils.TransportChannel connection, IncomingMessageDispatchCallback incomingMessageDispatchCallback, string target, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.connection = connection; this.incomingMessageDispatchCallback = incomingMessageDispatchCallback; this.target = target; this.logCallback = logCallback; this.logLevel = logLevel; incomingFrames = new Dictionary <int, IncomingMessageFrames>(); if (connection != null) { if (connection.connectedChannel != null || connection.ssl != null) { // stream-based connection headerBuffer = new MemoryStream(Frame.FRAME_HEADER_SIZE); setReadingFrameHeaderState(); } else { // datagram-based connection wholeFrameBuffer = new byte[options.udpFrameSize]; state = InputState.READING_WHOLE_FRAMES; } } deliverAsRawBinary = options.deliverAsRawBinary; }
// Parameter incomingMessageDispatchCallback not used here internal UdpListener( Socket channel, string resolvedTarget, IncomingMessageDispatchCallback incomingMessageDispatchCallback, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) : base(channel, resolvedTarget, logCallback, logLevel) { this.channel = channel; this.options = options; }
private void createReaderWriter( IncomingMessageDispatchCallback incomingMessageDispatchCallback) { channelWriter = new ChannelWriter( connection, target, logCallback, logLevel); channelReader = new ChannelReader( connection, incomingMessageDispatchCallback, target, options, logCallback, logLevel); }
private static TcpListener prepareTcpServer(string target, IncomingMessageDispatchCallback incomingMessageDispatchCallback, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { IpComponents tcpComponents = parseTcp(target); string hostName = tcpComponents.hostName; int port = tcpComponents.port; Socket s = CreateTCPSocket(); IPEndPoint address; string boundHostName; if (hostName == "*") { // bind to the wildcard local address // and resolve to the local hostname address = new IPEndPoint(IPAddress.Any, port); boundHostName = Dns.GetHostName(); } else { //TODO: translation for empty result (if possible) address = new IPEndPoint( Dns.GetHostAddresses(hostName)[0], port); boundHostName = hostName; } s.SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, options.tcpReuseAddress ? 1 : 0); s.Blocking = false; s.Bind(address); // , options.tcpListenBacklog); s.Listen(options.tcpListenBacklog); // get the actual address of this server socket int boundPort = ((IPEndPoint)s.LocalEndPoint).Port; string resolvedTarget = formatTcpTarget(boundHostName, boundPort); return(new TcpListener(s, resolvedTarget, incomingMessageDispatchCallback, options, logCallback, logLevel)); }
internal Channel(string target, Options options, IncomingMessageDispatchCallback incomingMessageDispatchCallback, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.target = target; this.options = options; this.logCallback = logCallback; this.logLevel = logLevel; connect(incomingMessageDispatchCallback); if (logCallback != null) { logCallback.Log(LogEventArgs.LogLevel.LOW, "Connected to " + target); } }
internal Channel(string target, Options options, IncomingMessageDispatchCallback incomingMessageDispatchCallback, IOWorker ioWorker, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.target = target; this.options = options; this.logCallback = logCallback; this.logLevel = logLevel; connect(incomingMessageDispatchCallback, ioWorker); if (logCallback != null) { logCallback.Log(LogEventArgs.LogLevel.LOW, "Connected to " + target); } }
internal static Listener prepareServer(string target, IncomingMessageDispatchCallback incomingMessageDispatchCallback, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { if (protocolIsTcp(target)) { return(prepareTcpServer(target, incomingMessageDispatchCallback, options, logCallback, logLevel)); } else if (protocolIsUdp(target)) { return(prepareUdpServer(target, incomingMessageDispatchCallback, options, logCallback, logLevel)); } else { throw new BadProtocolException(target); } }
// used by listener when accepting new connections internal Channel(Socket acceptedChannel, string sourceTarget, IncomingMessageDispatchCallback incomingMessageDispatchCallback, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.target = sourceTarget; this.options = options; this.connection = new NetworkUtils.TransportChannel(acceptedChannel); this.logCallback = logCallback; this.logLevel = logLevel; createReaderWriter(incomingMessageDispatchCallback); if (logCallback != null) { logCallback.Log(LogEventArgs.LogLevel.LOW, "Accepted connection from " + target); } }
public IOWorker( IDictionary<string, Channel> channels, IDictionary<string, Listener> listeners, WaterFlowManager incomingFlowManager, Options options, IncomingMessageDispatchCallback incomingMessageDispatchCallback, ConnectionEventCallback connectionEventCallback, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { this.channels = channels; this.listeners = listeners; this.incomingFlowManager = incomingFlowManager; this.options = options; this.incomingMessageDispatchCallback = incomingMessageDispatchCallback; this.connectionEventCallback = connectionEventCallback; this.logCallback = logCallback; this.logLevel = logLevel; listenersForSelection = new Dictionary<Socket, Listener>(); channelsForSelection = new Dictionary<Socket, Channel>(); stopRequest = false; }
private void connect( IncomingMessageDispatchCallback incomingMessageDispatchCallback) { if (NetworkUtils.protocolIsTcp(target)) { connection = NetworkUtils.connectTcp(target, options); } else if (NetworkUtils.protocolIsUdp(target)) { connection = NetworkUtils.createUdp(target, options); } else if (target.Equals("null")) { // do nothing - this protocol is used for testing only channelWriter = new ChannelWriter( null, null, null, LogEventArgs.LogLevel.LOW); } else { throw new BadProtocolException(target); } createReaderWriter(incomingMessageDispatchCallback); }
private static UdpListener prepareUdpServer(string target, IncomingMessageDispatchCallback incomingMessageDispatchCallback, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { IpComponents udpComponents = parseUdp(target); string hostName = udpComponents.hostName; int port = udpComponents.port; Socket s = CreateUDPSocket(); IPEndPoint address; string boundHostName; if(hostName == "*") { // bind to the wildcard local address // and resolve to the local hostname address = new IPEndPoint(IPAddress.Any, port); boundHostName = Dns.GetHostName(); } else { //TODO: translation for empty result (if possible) address = new IPEndPoint( Dns.GetHostAddresses(hostName)[0], port); boundHostName = hostName; } s.Blocking = false; s.Bind(address); // get the actual address of this socket int boundPort = ((IPEndPoint)s.LocalEndPoint).Port; string resolvedTarget = formatUdpTarget(boundHostName, boundPort); return new UdpListener(s, resolvedTarget, incomingMessageDispatchCallback, options, logCallback, logLevel); }
internal static Listener prepareServer(string target, IncomingMessageDispatchCallback incomingMessageDispatchCallback, Options options, LogCallback logCallback, LogEventArgs.LogLevel logLevel) { if(protocolIsTcp(target)) { return prepareTcpServer(target, incomingMessageDispatchCallback, options, logCallback, logLevel); } else if(protocolIsUdp(target)) { return prepareUdpServer(target, incomingMessageDispatchCallback, options, logCallback, logLevel); } else { throw new BadProtocolException(target); } }