コード例 #1
0
ファイル: TwitchChatClient.cs プロジェクト: Akitaux/Twitch
        private async Task SendAsync(ClientWebSocket client, CancellationToken cancelToken, IrcMessage payload)
        {
            var writer = IrcParser.Write(payload, Serializer);
            await client.SendAsync(writer.AsSegment(), WebSocketMessageType.Text, true, cancelToken);

            SentPayload?.Invoke(payload);
        }
コード例 #2
0
        public IncommingQueue()
        {
            var factory = new ConnectionFactory {
                HostName = Properties.Settings.Default.RabbitMQHostname,
                Port     = Properties.Settings.Default.RabbitMQPort,
                UserName = Properties.Settings.Default.RabbitMQUsername,
                Password = Properties.Settings.Default.RabbitMQPassword
            };
            var connection = factory.CreateConnection();
            var channel    = connection.CreateModel();

            channel.QueueDeclare(Properties.Settings.Default.RabbitMQIRCQueue, true, false, false, null);
            channel.BasicQos(0, 1, false);
            EventingBasicConsumer consumer = new EventingBasicConsumer(channel);

            consumer.Received += (model, ea) => {
                Byte[]   body     = ea.Body;
                String   message  = Encoding.UTF8.GetString(body);
                String[] strSplit = message.Split(new[] { '|' }, 2);
                DateTime ircDateTime;
                if (DateTime.TryParseExact(strSplit[0], "o", CultureInfo.InvariantCulture, DateTimeStyles.None, out ircDateTime))
                {
                    IrcParser.Parse(strSplit[1], ircDateTime);
                    DataStore.WaitTasks();
                }
                else
                {
                    Logger.Info("Bad RabbitMQ Entry: {0}", message);
                }
                channel.BasicAck(ea.DeliveryTag, false);
            };
            channel.BasicConsume(Properties.Settings.Default.RabbitMQIRCQueue, false, consumer);
            //Console.WriteLine(" Press [enter] to exit.");
            //Console.ReadLine();
        }
コード例 #3
0
ファイル: TwitchChatClient.cs プロジェクト: Akitaux/Twitch
        private async Task <IrcMessage> ReceiveAsync(ClientWebSocket client, CancellationToken cancelToken)
        {
            // Reset memory stream
            _memoryStream.Position = 0;
            _memoryStream.SetLength(0);

            WebSocketReceiveResult result;

            do
            {
                var buffer = _memoryStream.Buffer.RequestSegment(10 * 1024);
                result = await client.ReceiveAsync(buffer, cancelToken).ConfigureAwait(false);

                _memoryStream.Buffer.Advance(result.Count);

                if (result.CloseStatus != null)
                {
                    throw new WebSocketClosedException(result.CloseStatus.Value, result.CloseStatusDescription);
                }
            }while (!result.EndOfMessage);

            var payload = IrcParser.Read(_memoryStream.Buffer.AsReadOnlySpan(), Serializer);

            HandleEvent(payload);
            ReceivedPayload?.Invoke(payload, _memoryStream.Buffer.Length);
            return(payload);
        }
コード例 #4
0
        static void Main(string[] args)
        {
            _twitch = new TwitchIrc("justinfan1676217621", "");
            var parser = new IrcParser();

            _twitch.Connect();

            Task.Run(async() =>
            {
                while (true)
                {
                    HandleIrcMessage(parser.ParseIrcMessage(await _twitch.ReadMessageAsync()));
                }
            });

            Console.ReadKey();
        }