private void HandleSpecificPacket(ChannelOpen packet) { logger.LogDebug("Processing ChannelOpen packet, channel type '{Type}', initial window {Window}, max packet {Size}.", packet.ChannelType, packet.InitialWindowSize, packet.MaximumPacketSize); // TODO - if we're low on memory, or they've opened too many channels, fail. Other cases? /* * var fail = new ChannelOpenFailure * { * RecipientChannel = packet.SenderChannel, * ReasonCode = 4, * Description = "Not yet implemented." * }; * * Send(fail); */ Channel channel; lock (channels) { // TODO - use a factory to create channels, to populate logger and whatever else it might need channel = channelFactory.Create(this, packet, nextChannelId++); channels.Add(channel.ServerChannelId, channel); } channel.Init(); }
public MessageBroker(IChannelFactory channelFactory, ILoggerFactory loggerFactory) { _loggerFactory = loggerFactory; _logger = loggerFactory.CreateLogger <MessageBroker>(); _channelFactory = channelFactory; _channel = _channelFactory.Create(); }
/// <summary> /// 创建并启动Channel /// </summary> /// <param name="factory"></param> /// <returns></returns> public TChannel LaunchChannel(IPAddress inetHost, int inetPort) { //初始化Channel TChannel channel = mChannelFactory.Create(); Init(channel, new IPEndPoint(inetHost, inetPort)); return(channel); }
private IStreamingAudioChannel GetChannelFor(Uri source) { if (_channels.TryGetValue(source.ToString(), out var channel)) { return(channel); } channel = _channelFactory.Create(source); if (channel == null) { return(null); } AddChannel(channel); return(channel); }
static void SendDelayMessage(IMessageBroker messageBroker, IChannelFactory channelfactory) { var channel = channelfactory.Create(); var exchangename = "fzf.delayed-9"; ///声明交换机 channel.DefineDelayExchange(exchangetype: ExchangeType.Direct, exchangename: exchangename); messageBroker.RegisterHandle(exchangeName: exchangename, queueName: "delayed.process", onMessage: (context, props) => { Console.WriteLine("接受消息:{0}", Encoding.UTF8.GetString(context.RequestMessage.Body.Span)); Console.WriteLine("接受时间:{0}", DateTime.Now.ToString()); Console.WriteLine("========================================================"); return(Task.CompletedTask); }); channel.SendDelayMessage(message: Encoding.UTF8.GetBytes(Guid.NewGuid().ToString("N")), exchangename: exchangename, delayseconds: 5); }