|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
namespace Client
|
|
|
|
|
{
|
|
|
|
|
delegate void InvokedMethod();
|
|
|
|
|
|
|
|
|
|
public partial class RoomListForm : Form
|
|
|
|
|
{
|
|
|
|
|
public RoomListForm()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
InitInstance();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void InitInstance()
|
|
|
|
|
{
|
|
|
|
|
Singleton.Instance.CreateRoomResponsed += CreateRoomResponsed;
|
|
|
|
|
Singleton.Instance.RoomListResponsed += RoomListResponsed;
|
|
|
|
|
Singleton.Instance.EnterRoomResponsed += EnterRoomResponsed;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnEnter_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (lbxRoom.SelectedItem == null)
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("Please select a room.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
EnterRoomRequestPacket packet = new EnterRoomRequestPacket(lbxRoom.SelectedItem.ToString());
|
|
|
|
|
await Singleton.Instance.SendAsync(packet.Serialize(), SocketFlags.None);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async void btnCreate_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string roomName = tbxRoomName.Text;
|
|
|
|
|
if (string.IsNullOrEmpty(roomName))
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("Please input a room name.");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 (this.InvokeRequired)
|
|
|
|
|
{
|
|
|
|
|
this.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 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 void EnterRoomResponsed(object? sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (sender == null)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
EnterRoomResponsePacket packet = (EnterRoomResponsePacket)sender;
|
|
|
|
|
InvokeMethod(() =>
|
|
|
|
|
{
|
|
|
|
|
IAsyncResult ar = null;
|
|
|
|
|
ar = BeginInvoke(() =>
|
|
|
|
|
{
|
|
|
|
|
ChatRoomForm chatRoomForm = new ChatRoomForm();
|
|
|
|
|
chatRoomForm.Text = lbxRoom.SelectedItem.ToString();
|
|
|
|
|
chatRoomForm.ShowDialog();
|
|
|
|
|
EndInvoke(ar);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 -= RoomListResponsed;
|
|
|
|
|
Singleton.Instance.EnterRoomResponsed -= EnterRoomResponsed;
|
|
|
|
|
|
|
|
|
|
Singleton.Instance.Socket.Shutdown(SocketShutdown.Send);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|