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); }
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(); }
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); }
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(); }