|
|
|
@ -1,9 +1,11 @@ |
|
|
|
|
using System; |
|
|
|
|
using Core; |
|
|
|
|
using System; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.ComponentModel; |
|
|
|
|
using System.Data; |
|
|
|
|
using System.Drawing; |
|
|
|
|
using System.Linq; |
|
|
|
|
using System.Net.Sockets; |
|
|
|
|
using System.Text; |
|
|
|
|
using System.Threading.Tasks; |
|
|
|
|
using System.Windows.Forms; |
|
|
|
@ -12,9 +14,18 @@ namespace Client |
|
|
|
|
{ |
|
|
|
|
public partial class RoomListForm : Form |
|
|
|
|
{ |
|
|
|
|
private delegate void InvokedMethod(); |
|
|
|
|
|
|
|
|
|
public RoomListForm() |
|
|
|
|
{ |
|
|
|
|
InitializeComponent(); |
|
|
|
|
InitInstance(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void InitInstance() |
|
|
|
|
{ |
|
|
|
|
Singleton.Instance.CreateRoomResponsed += CreateRoomResponsed; |
|
|
|
|
Singleton.Instance.RoomListResponsed += Instance_RoomListResponsed; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void btnEnter_Click(object sender, EventArgs e) |
|
|
|
@ -25,12 +36,17 @@ namespace Client |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ChatRoomForm chatRoomForm = new ChatRoomForm(); |
|
|
|
|
chatRoomForm.Text = lbxRoom.SelectedItem.ToString(); |
|
|
|
|
chatRoomForm.ShowDialog(); |
|
|
|
|
IAsyncResult ar = null; |
|
|
|
|
ar = BeginInvoke(() => |
|
|
|
|
{ |
|
|
|
|
ChatRoomForm chatRoomForm = new ChatRoomForm(); |
|
|
|
|
chatRoomForm.Text = lbxRoom.SelectedItem.ToString(); |
|
|
|
|
chatRoomForm.ShowDialog(); |
|
|
|
|
EndInvoke(ar); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void btnCreate_Click(object sender, EventArgs e) |
|
|
|
|
private async void btnCreate_Click(object sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
string roomName = tbxRoomName.Text; |
|
|
|
|
if (string.IsNullOrEmpty(roomName)) |
|
|
|
@ -39,14 +55,83 @@ namespace Client |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ChatRoomForm chatRoomForm = new ChatRoomForm(); |
|
|
|
|
chatRoomForm.Text = roomName; |
|
|
|
|
chatRoomForm.ShowDialog(); |
|
|
|
|
CreateRoomRequestPacket packet = new CreateRoomRequestPacket(roomName); |
|
|
|
|
await Singleton.Instance.SendAsync(packet.Serialize(), SocketFlags.None); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void RoomListForm_Activated(object sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
btnRefresh_Click(sender, e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void InvokeMethod(InvokedMethod method) |
|
|
|
|
{ |
|
|
|
|
if (InvokeRequired) |
|
|
|
|
{ |
|
|
|
|
lbxRoom.Invoke(new MethodInvoker(() => |
|
|
|
|
{ |
|
|
|
|
method(); |
|
|
|
|
})); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
method(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void CreateRoomResponsed(object? sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
if (sender == null) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
CreateRoomResponsePacket packet = (CreateRoomResponsePacket)sender; |
|
|
|
|
if (packet.Code == StatusCode.Success) |
|
|
|
|
{ |
|
|
|
|
string roomName = tbxRoomName.Text; |
|
|
|
|
InvokeMethod(() => |
|
|
|
|
{ |
|
|
|
|
lbxRoom.Items.Add(roomName); |
|
|
|
|
tbxRoomName.Text = ""; |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
IAsyncResult ar = null; |
|
|
|
|
ar = BeginInvoke(() => |
|
|
|
|
{ |
|
|
|
|
ChatRoomForm chatRoomForm = new ChatRoomForm(); |
|
|
|
|
chatRoomForm.Text = roomName; |
|
|
|
|
chatRoomForm.ShowDialog(); |
|
|
|
|
EndInvoke(ar); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void Instance_RoomListResponsed(object? sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
if (sender == null) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
RoomListResponsePacket packet = (RoomListResponsePacket)sender; |
|
|
|
|
InvokeMethod(() => |
|
|
|
|
{ |
|
|
|
|
foreach (string item in packet.RoomNames) |
|
|
|
|
{ |
|
|
|
|
lbxRoom.Items.Add(item); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private async void btnRefresh_Click(object sender, EventArgs e) |
|
|
|
|
{ |
|
|
|
|
lbxRoom.Items.Clear(); |
|
|
|
|
RoomListRequestPacket packet = new RoomListRequestPacket(); |
|
|
|
|
await Singleton.Instance.SendAsync(packet.Serialize(), SocketFlags.None); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void RoomListForm_FormClosing(object sender, FormClosingEventArgs e) |
|
|
|
|
{ |
|
|
|
|
Singleton.Instance.CreateRoomResponsed -= CreateRoomResponsed; |
|
|
|
|
Singleton.Instance.RoomListResponsed -= Instance_RoomListResponsed; |
|
|
|
|
Singleton.Instance.Socket.Shutdown(SocketShutdown.Send); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|