mainForm 클래스
public partial class mainForm : Form
{
// 네트워크 클라이언트 만들어서 변수에 할당
ClientSimpleTcp Network = new ClientSimpleTcp();
// 네트워크 스레드가 실행중인지를 나타내는 변수
bool IsNetworkThreadRunning = false;
// 백그라운드 프로세스가 실행중인지를 나타내는 변수
bool IsBackGroundProcessRunning = false;
// 네트워크 읽기 스레드 선언
System.Threading.Thread NetworkReadThread = null;
// 네트워크 전송 스레드 선언
System.Threading.Thread NetworkSendThread = null;
// 패킷 버퍼 매니저 선언
PacketBufferManager PacketBuffer = new PacketBufferManager();
// 받은 패킷들을 넣어놓을 큐 선언
Queue<PacketData> RecvPacketQueue = new Queue<PacketData>();
// 보낼 패킷들을 넣어놓을 큐 선언
Queue<byte[]> SendPacketQueue = new Queue<byte[]>();
// 일정 시간 간격으로 특정 작업을 수행하거나 하는 UI용 타이머
System.Windows.Forms.Timer dispatcherUITimer = new();
생성자
public mainForm()
{
InitializeComponent();
}
- Form 클래스의 InitializeComponent 함수
- 디자인한 폼의 구성 요소들을 초기화하고 배치하는 역할
mainForm_Load
private void mainForm_Load(object sender, EventArgs e)
{
PacketBuffer.Init((8096 * 10), PacketDef.PACKET_HEADER_SIZE, 1024);
IsNetworkThreadRunning = true;
NetworkReadThread = new System.Threading.Thread(this.NetworkReadProcess);
NetworkReadThread.Start();
NetworkSendThread = new System.Threading.Thread(this.NetworkSendProcess);
NetworkSendThread.Start();
IsBackGroundProcessRunning = true;
dispatcherUITimer.Tick += new EventHandler(BackGroundProcess);
dispatcherUITimer.Interval = 100;
dispatcherUITimer.Start();
btnDisconnect.Enabled = false;
SetPacketHandler();
DevLog.Write("프로그램 시작 !!!", LOG_LEVEL.INFO);
}
- PacketBufferManager 초기화
- 스레드 할당
- 이런 저런 변수 값 할당 + UITimer 시작
- SetPacketHandler : 패킷에 해당하는 함수 넣어놓은 딕셔너리에 함수 배정
mainForm_FormClosing
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
IsNetworkThreadRunning = false;
IsBackGroundProcessRunning = false;
Network.Close();
}
- 폼이 닫히는 경우
- 변수들 false로 전환
- Network = ClientSimpleTcp 객체 = 클라이언트 소켓 닫기
btnConnect_Click
private void btnConnect_Click(object sender, EventArgs e)
{
string address = textBoxIP.Text;
if (checkBoxLocalHostIP.Checked)
{
address = "127.0.0.1";
}
int port = Convert.ToInt32(textBoxPort.Text);
if (Network.Connect(address, port))
{
labelStatus.Text = string.Format("{0}. 서버에 접속 중", DateTime.Now);
btnConnect.Enabled = false;
btnDisconnect.Enabled = true;
DevLog.Write($"서버에 접속 중", LOG_LEVEL.INFO);
}
else
{
labelStatus.Text = string.Format("{0}. 서버에 접속 실패", DateTime.Now);
}
}
- 연결 버튼 클릭 시 서버에 연결하는 함수
- Network의 Connect 함수 사용 → 클라이언트 소켓 연결