chat function
This commit is contained in:
@@ -25,17 +25,18 @@ namespace Client
|
||||
lbxUser.Items.Add(Singleton.Instance.Nickname);
|
||||
Singleton.Instance.UserEnterResponsed += UserEnterResponsed;
|
||||
Singleton.Instance.UserLeaveResponsed += UserLeaveResponsed;
|
||||
Singleton.Instance.ChatResponsed += ChatResponsed;
|
||||
}
|
||||
|
||||
private void btmSend_Click(object sender, EventArgs e)
|
||||
private async void btmSend_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (string.IsNullOrEmpty(tbxMsg.Text))
|
||||
return;
|
||||
|
||||
lbxMsg.Items.Add(tbxMsg.Text);
|
||||
tbxMsg.Text = null;
|
||||
ChatPacket packet = new ChatPacket(Singleton.Instance.Nickname, tbxMsg.Text);
|
||||
await Singleton.Instance.SendAsync(packet.Serialize(), SocketFlags.None);
|
||||
|
||||
ScrollMsgToEnd();
|
||||
tbxMsg.Text = null;
|
||||
}
|
||||
|
||||
private void ScrollMsgToEnd()
|
||||
@@ -83,10 +84,24 @@ namespace Client
|
||||
});
|
||||
}
|
||||
|
||||
private void ChatResponsed(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender == null)
|
||||
return;
|
||||
|
||||
ChatPacket packet = (ChatPacket)sender;
|
||||
InvokeMethod(() =>
|
||||
{
|
||||
lbxMsg.Items.Add($"{packet.NickName}: {packet.Message}");
|
||||
ScrollMsgToEnd();
|
||||
});
|
||||
}
|
||||
|
||||
private async void ChatRoomForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
Singleton.Instance.UserEnterResponsed -= UserEnterResponsed;
|
||||
Singleton.Instance.UserLeaveResponsed -= UserLeaveResponsed;
|
||||
Singleton.Instance.ChatResponsed -= ChatResponsed;
|
||||
|
||||
UserLeavePacket packet = new UserLeavePacket(Singleton.Instance.Nickname);
|
||||
await Singleton.Instance.SendAsync(packet.Serialize(), SocketFlags.None);
|
||||
|
@@ -60,6 +60,7 @@ namespace Client
|
||||
else
|
||||
{
|
||||
Singleton.Instance.Socket.Shutdown(SocketShutdown.Send);
|
||||
MessageBox.Show("Fail to login");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ namespace Client
|
||||
public event EventHandler? EnterRoomResponsed;
|
||||
public event EventHandler? UserEnterResponsed;
|
||||
public event EventHandler? UserLeaveResponsed;
|
||||
public event EventHandler? ChatResponsed;
|
||||
|
||||
public async Task ConnectAsync(string ip, int port)
|
||||
{
|
||||
@@ -100,6 +101,11 @@ namespace Client
|
||||
UserLeavePacket packet = new UserLeavePacket(dataBuffer);
|
||||
UserLeaveResponsed?.Invoke(packet, EventArgs.Empty);
|
||||
}
|
||||
else if (packetType == PacketType.Chat)
|
||||
{
|
||||
ChatPacket packet = new ChatPacket(dataBuffer);
|
||||
ChatResponsed?.Invoke(packet, EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user