public void SendChatMessageNotice(string userName, string sendingUserName, string chatRoom, string message) { OnChatMessageReceived?.Invoke(this, new ChatMessageEventArgs() { TargetUserName = userName, SendingUserName = sendingUserName, Message = message, Chatroom = chatRoom }); }
private void HandleReceivedMessage(ChatMessage msg) { OnChatMessageReceived?.Invoke(this, new ChatMessageReceivedEventArgs(msg.Message, msg.Username)); string userName = msg.Username.ToLowerInvariant(); dictUserMessages[userName] = DateTime.Now; }
private void OnMessageReceived(object sender, OnMessageReceivedArgs e) { OnChatMessageReceived?.Invoke(this, e.ChatMessage); var user = GetOrAddUser(e.ChatMessage.Username); AddMessage(user.UserID, this.JoinedChannel.ChannelID, e.ChatMessage.Message); }
private void ChatMessageReceivedHandler(string sender, string message) { var args = new ChatMessageReceivedEventArgs { Sender = sender, Message = message }; OnChatMessageReceived?.Invoke(this, args); }
/// <summary> /// Handles incoming <see cref="ChatMessagePacket"/>s. /// </summary> /// <param name="connectionId">Original connection ID</param> /// <param name="packet">Incoming packet</param> private void chatMessagePacketHandler(string connectionId, ChatMessagePacket packet) { lock (messageHistoryLock) { // Store the message in chat history messageHistory.Add(new ClientChatMessage(packet.MessageId, packet.Uuid, packet.Message, packet.Timestamp.ToDateTime(), ChatMessageStatus.CONFIRMED)); } OnChatMessageReceived?.Invoke(this, new ChatMessageEventArgs(packet.Message, packet.Uuid, packet.Timestamp.ToDateTime())); }
/// <summary> /// Handles incoming <see cref="ChatMessageResponsePacket"/>s. /// </summary> /// <param name="connectionId">Original connection ID</param> /// <param name="packet">Incoming packet</param> private void chatMessageResponsePacketHandler(string connectionId, ChatMessageResponsePacket packet) { ClientChatMessage message; lock (messageHistoryLock) { try { // Try get a message with a corresponding original message ID message = messageHistory.Single(m => m.MessageId == packet.OriginalMessageId); } catch (InvalidOperationException) { RaiseLogEntry(new LogEventArgs(string.Format("Got a ChatMessageResponsePacket with an unknown original message ID ({0})", packet.OriginalMessageId), LogLevel.WARNING)); // Stop here return; } // Update the message ID message.MessageId = packet.NewMessageId; if (packet.Success) { // Update the message content and confirm it message.Message = packet.Message; message.Status = ChatMessageStatus.CONFIRMED; } else { // Deny the message but don't overwrite the content message.Status = ChatMessageStatus.DENIED; } } OnChatMessageReceived?.Invoke(this, new ClientChatMessageEventArgs(message)); }
}//c-tor //Receive messages via network stream public void Work() { Thread newThread = new Thread(new ThreadStart(() => { while (!_isStopped) { try { object msg = _formatter.Deserialize(_stream); OnChatMessageReceived?.Invoke(this, msg); } catch (Exception ex) { // IsStopped = true; Disconnect(); OnDataTransferError?.Invoke(ex, new ChatErrorEventArgs("Connection error")); } } } )); newThread.IsBackground = true; newThread.Start(); }
private void Server() { while (true) { try { UpdateStatus("Connecting..."); incoming = new TcpListener(IPAddress.Parse("127.0.0.1"), 13000); // Start listening for client requests. incoming.Start(); // Buffer for reading data Byte[] bytes = new Byte[256]; String data = null; TcpClient client = null; // Enter the listening loop. while (true) { try { // Perform a blocking call to accept requests. // You could also user server.AcceptSocket() here. client = incoming.AcceptTcpClient(); UpdateStatus("Connected"); data = null; // Get a stream object for reading and writing NetworkStream stream = client.GetStream(); int i; // Loop to receive all the data sent by the client. while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { // Translate data bytes to a ASCII string. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); OnChatMessageReceived?.Invoke(this, new ChatMessage(DateTime.Now, $"<< {data}")); } } catch (Exception e) { OnChatMessageReceived?.Invoke(this, new ChatMessage(DateTime.Now, e.Message)); } finally { // Shutdown and end connection client?.Close(); } } } catch (Exception e) { OnChatMessageReceived?.Invoke(this, new ChatMessage(DateTime.Now, e.Message)); } finally { // Stop listening for new clients. incoming.Stop(); } } }
private void HandleChannelMessage(string ircRawMessage, string channelName, IRCParser.TwitchChannelMessageType channelMessageType) { switch (channelMessageType) { case IRCParser.TwitchChannelMessageType.Usernotice: { UserNotice usernotice = new UserNotice(ircRawMessage); if (usernotice.MessageID != UserNotice.SubscriptionType.None) { OnSubscriptionEventArgs subEvent = new OnSubscriptionEventArgs(usernotice); OnSubscriptionReceived?.Invoke(this, subEvent); } return; } case IRCParser.TwitchChannelMessageType.ChannelMessage: { ChatMessage chatMessage = new ChatMessage(ircRawMessage); OnChatMessageReceivedEventArgs onChatReceivedEvent = new OnChatMessageReceivedEventArgs(chatMessage); OnChatMessageReceived?.Invoke(this, onChatReceivedEvent); return; } case IRCParser.TwitchChannelMessageType.LeftChannel: { // USER LEFT CHANNEL //:[email protected] PART #sirtucx string sUsername = ircRawMessage.Substring(1, ircRawMessage.IndexOf('!') - 1); OnUserLeaveEventArgs onUserLeaveEventArgs = new OnUserLeaveEventArgs(sUsername, channelName); OnUserLeaveEvent?.Invoke(this, onUserLeaveEventArgs); return; } case IRCParser.TwitchChannelMessageType.Mode: { string[] sModeSplit = ircRawMessage.Split(' '); if (sModeSplit[3] == "+o") { // TODO: MOD JOINED CHANNEL } else if (sModeSplit[3] == "-o") { // TODO: MOD LEFT CHANNEL } else { // TODO: UNKNOWN } return; } case IRCParser.TwitchChannelMessageType.Notice: { if (ircRawMessage.Contains("Improperly formatted auth")) { // TODO: AUTH ERROR } else if (ircRawMessage.Contains("has gone offline")) { // TODO: HOST LEFT } else if (ircRawMessage.Contains("The moderators of this room are:")) { // TODO: LIST ALL MODERATORS } else if (ircRawMessage.Contains("Your color has been changed.")) { // TODO: DETECT COLOR CHANGE } return; } case IRCParser.TwitchChannelMessageType.RoomState: { // TODO: ROOM STATE CHANGED return; } case IRCParser.TwitchChannelMessageType.UserState: { // USER JOINED CHANNEL // Example: @badges=staff/1;color=#0D4200;display-name=ronni;emote-sets=0,33,50,237,793,2126,3517,4578,5569,9400,10337,12239;mod=1;subscriber=1;turbo=1;user-type=staff :tmi.twitch.tv USERSTATE #dallas UserState userState = new UserState(ircRawMessage); OnUserJoinedEventArgs onUserJoinedEventArgs = new OnUserJoinedEventArgs(userState); OnUserJoinedEvent?.Invoke(this, onUserJoinedEventArgs); return; } case IRCParser.TwitchChannelMessageType.ClearChat: { // TODO: HANDLE BANS/TIMEOUTS return; } } }