// 로그인 요청 private void button2_Click(object sender, EventArgs e) { var loginReq = new LoginReqPacket(); loginReq.UserID = textBoxUserID.Text; loginReq.UserPW = textBoxUserPW.Text; var bodyData = loginReq.ToBytes(); PostSendPacket(PACKET_ID.PACKET_ID_LOGIN_REQ, bodyData); DevLog.Write($"로그인 요청: {textBoxUserID.Text}, {textBoxUserPW.Text}"); }
// LobbyList void PacketProcess_LobbyListResponse(byte[] bodyData) { var responsePkt = new LobbyListResPacket(); responsePkt.FromBytes(bodyData); for (int i = 0; i < responsePkt.LobbyCount; i++) { listBoxLobby.Items.Add(responsePkt.lobbyListinfo[i].GetValue()); } DevLog.Write($"로비 요청 결과: {(ERROR_CODE)responsePkt.Result}"); }
// 로그인 요청 private void button2_Click(object sender, EventArgs e) { var loginReq = new PKTReqLogin(); loginReq.UserID = textBoxUserID.Text; loginReq.AuthToken = textBoxUserPW.Text; var sendPacketData = MessagePackSerializer.Serialize(loginReq); PostSendPacket(PACKET_ID.REQ_LOGIN, sendPacketData); DevLog.Write($"로그인 요청: {textBoxUserID.Text}, {textBoxUserPW.Text}"); DevLog.Write($"로그인 요청: {ToReadableByteArray(sendPacketData)}"); }
private void btnRoomRelay_Click(object sender, EventArgs e) { if (textBoxRelay.Text.IsEmpty()) { MessageBox.Show("릴레이 할 데이터가 없습니다"); return; } var bodyData = Encoding.UTF8.GetBytes(textBoxRelay.Text); PostSendPacket(PACKET_ID.PACKET_ID_ROOM_RELAY_REQ, bodyData); DevLog.Write($"방 릴레이 요청"); }
void PacketProcess_RoomUserListNotify(byte[] bodyData) { var notifyPkt = new RoomUserListNtfPacket(); notifyPkt.FromBytes(bodyData); for (int i = 0; i < notifyPkt.UserCount; ++i) { AddRoomUserList(notifyPkt.UserUniqueIdList[i], notifyPkt.UserIDList[i]); } DevLog.Write($"방의 기존 유저 리스트 받음"); }
void PacketProcess(ClientNetLib.PacketData packet) { var packetType = (PACKET_ID)packet.PacketID; if (PacketFuncDic.ContainsKey(packetType)) { PacketFuncDic[packetType](packet.BodyData); } else { DevLog.Write("Unknown Packet Id: " + packet.PacketID.ToString()); } }
void PacketProcess_LobbyEnterRes(byte[] bodyData) { var responsePkt = new LobbyEnterResPacket(); responsePkt.Decode(bodyData); DevLog.Write($"로비 입장 결과: {(ERROR_CODE)responsePkt.Result}"); if ((ERROR_CODE)responsePkt.Result == ERROR_CODE.NONE) { labelStatus.Text = "로비에 입장 완료"; } }
void PacketProcess_GameEndRes(byte[] bodyData) { var responsePkt = new GameEndResPacket(); responsePkt.Decode(bodyData); DevLog.Write($"게임 서버 게임 완료 요청 결과: {(ERROR_CODE)responsePkt.Result}"); if ((ERROR_CODE)responsePkt.Result == ERROR_CODE.NONE) { labelStatus.Text = "게임 완료 상태"; } }
void PacketProcess_RoomLeaveRes(byte[] bodyData) { var responsePkt = new RoomLeaveResPacket(); responsePkt.Decode(bodyData); DevLog.Write($"게임 서버 방 나가기 요청 결과: {(ERROR_CODE)responsePkt.Result}"); if ((ERROR_CODE)responsePkt.Result == ERROR_CODE.NONE) { labelStatus.Text = "게임 방을 나간 상태"; } }
void PacketProcess_GameLoginRes(byte[] bodyData) { var responsePkt = new GameServerLoginResPacket(); responsePkt.Decode(bodyData); DevLog.Write($"게임 서버에 로그인 결과: {(ERROR_CODE)responsePkt.Result}"); if ((ERROR_CODE)responsePkt.Result == ERROR_CODE.NONE) { labelStatus.Text = "게임 서버에 로그인 완료"; } }
void PacketProcess_LobbyMatchRes(byte[] bodyData) { var responsePkt = new LobbyMatchResPacket(); responsePkt.Decode(bodyData); DevLog.Write($"매칭 요청 결과: {(ERROR_CODE)responsePkt.Result}"); if ((ERROR_CODE)responsePkt.Result == ERROR_CODE.NONE) { labelStatus.Text = "매칭 요청 중인 상태"; } }
private void button1_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textSendText.Text)) { MessageBox.Show("보낼 텍스트를 입력하세요"); return; } var body = Encoding.UTF8.GetBytes(textSendText.Text); PostSendPacket(PACKET_ID.PACKET_ID_ECHO, body); DevLog.Write($"Echo 요청: {textSendText.Text}, {body.Length}"); }
void PacketProcess_RoomChatResponse(byte[] bodyData) { var responsePkt = new RoomChatResPacket(); responsePkt.FromBytes(bodyData); var errorCode = (ERROR_CODE)responsePkt.Result; var msg = $"방 채팅 요청 결과: {(ERROR_CODE)responsePkt.Result}"; if (errorCode == ERROR_CODE.ERROR_NONE) { DevLog.Write(msg, LOG_LEVEL.ERROR); } }
private void mainForm_Load(object sender, EventArgs e) { TcpNetLobbyServer.DebugPrintFunc = WriteDebugLog; IsBackGroundProcessRunning = true; dispatcherUITimer = new System.Windows.Threading.DispatcherTimer(); dispatcherUITimer.Tick += new EventHandler(Update); dispatcherUITimer.Interval = new TimeSpan(0, 0, 0, 0, 100); dispatcherUITimer.Start(); btnDisconnect.Enabled = false; SetPacketHandler(); DevLog.Write("프로그램 시작 !!!", LOG_LEVEL.INFO); }
private void btnRoomChat_Click(object sender, EventArgs e) { if (textBoxRoomSendMsg.Text.IsEmpty()) { MessageBox.Show("채팅 메시지를 입력하세요"); return; } var requestPkt = new RoomChatReqPacket(); requestPkt.SetValue(textBoxRoomSendMsg.Text); PostSendPacket(PACKET_ID.REQ_ROOM_CHAT, requestPkt.ToBytes()); DevLog.Write($"방 채팅 요청"); }
// 간이 채팅 private void button3_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textSendText.Text)) { MessageBox.Show("보낼 텍스트를 입력하세요"); return; } string message = $"[{DateTime.Now.ToString("HH:mm:ss")}] {textBoxUserID.Text}: {textSendText.Text}"; var body = Encoding.UTF8.GetBytes(message); PostSendPacket(PACKET_ID.PACKET_ID_SIMPLE_CHAT, body); DevLog.Write($"Simple Chat 요청: {textSendText.Text}, {body.Length}"); }
void NetworkReadProcess() { const Int16 PacketHeaderSize = PacketDef.PACKET_HEADER_SIZE; while (IsNetworkThreadRunning) { if (Network.IsConnected() == false) { System.Threading.Thread.Sleep(1); continue; } var recvData = Network.Receive(); if (recvData != null) { PacketBuffer.Write(recvData.Item2, 0, recvData.Item1); while (true) { var data = PacketBuffer.Read(); if (data.Count < 1) { break; } var packet = new PacketData(); packet.DataSize = (short)(data.Count - PacketHeaderSize); packet.PacketID = BitConverter.ToInt16(data.Array, data.Offset + 2); packet.Type = (SByte)data.Array[(data.Offset + 4)]; packet.BodyData = new byte[packet.DataSize]; Buffer.BlockCopy(data.Array, (data.Offset + PacketHeaderSize), packet.BodyData, 0, (data.Count - PacketHeaderSize)); lock (((System.Collections.ICollection)RecvPacketQueue).SyncRoot) { RecvPacketQueue.Enqueue(packet); } } DevLog.Write($"받은 데이터 크기: {recvData.Item1}", LOG_LEVEL.INFO); } else { Network.Close(); SetDisconnectd(); DevLog.Write("서버와 접속 종료 !!!", LOG_LEVEL.INFO); } } }
// 로비 입장 요청 private void button4_Click(object sender, EventArgs e) { var lobbyEnterReq = new LobbyEnterReqPacket(); // TODO 문자열 떼기.. -예외처리 필요 string[] LobbyListInfoStr = listBoxLobby.GetItemText(listBoxLobby.SelectedItem).Split(','); string[] LobbyIndexStr = LobbyListInfoStr[0].Split(':'); lobbyEnterReq.SetValue(Convert.ToInt32(LobbyIndexStr[1].Replace(" ", ""))); PostSendPacket(PACKET_ID.LOBBY_ENTER_REQ, lobbyEnterReq.ToBytes()); //DevLog.Write($"로비 입장 요청"); DevLog.Write($"로비 입장 요청: {listBoxLobby.GetItemText(listBoxLobby.SelectedItem)}"); }
void PacketProcess(PacketData packet) { var packetType = (PACKET_ID)packet.PacketID; //DevLog.Write("Packet Error: PacketID:{packet.PacketID.ToString()}, Error: {(ERROR_CODE)packet.Result}"); //DevLog.Write("RawPacket: " + packet.PacketID.ToString() + ", " + PacketDump.Bytes(packet.BodyData)); if (PacketFuncDic.ContainsKey(packetType)) { PacketFuncDic[packetType](packet.BodyData); } else { DevLog.Write("Unknown Packet Id: " + packet.PacketID.ToString()); } }
private void mainForm_Load(object sender, EventArgs e) { IsNetworkThreadRunning = true; NetworkReadThread = new System.Threading.Thread(this.NetworkReadProcess); NetworkReadThread.Start(); NetworkSendThread = new System.Threading.Thread(this.NetworkSendProcess); NetworkSendThread.Start(); dispatcherUITimer = new System.Windows.Threading.DispatcherTimer(); dispatcherUITimer.Tick += new EventHandler(BackGroundProcess); dispatcherUITimer.Interval = new TimeSpan(0, 0, 0, 0, 100); dispatcherUITimer.Start(); btnDisconnect.Enabled = false; DevLog.Write("프로그램 시작 !!!", LOG_LEVEL.INFO); }
public void PostSendPacket(PACKET_ID packetID, byte[] packetData) { if (Network.IsConnected() == false) { DevLog.Write("서버 연결이 되어 있지 않습니다", LOG_LEVEL.ERROR); return; } var header = new MsgPackPacketHeadInfo(); header.TotalSize = (UInt16)packetData.Length; header.Id = (UInt16)packetID; header.Type = 0; header.Write(packetData); SendPacketQueue.Enqueue(packetData); }
void PacketProcess(byte[] packet) { var header = new MsgPackPacketHeadInfo(); header.Read(packet); var packetType = (PACKET_ID)header.Id; //DevLog.Write("Packet Error: PacketID:{packet.PacketID.ToString()}, Error: {(ERROR_CODE)packet.Result}"); //DevLog.Write("RawPacket: " + packet.PacketID.ToString() + ", " + PacketDump.Bytes(packet.BodyData)); if (PacketFuncDic.ContainsKey(packetType)) { PacketFuncDic[packetType](packet); } else { DevLog.Write("Unknown Packet Id: " + packetType); } }
void NetworkReadProcess() { while (IsNetworkThreadRunning) { if (Network.IsConnected() == false) { continue; } var recvData = Network.Receive(); if (recvData != null) { DevLog.Write($"받은 데이터: {recvData.Item2}", LOG_LEVEL.INFO); } else { DevLog.Write("서버와 접속 종료 !!!", LOG_LEVEL.INFO); } } }
private void mainForm_Load(object sender, EventArgs e) { PacketBuffer.Init((8096 * 10), MsgPackPacketHeadInfo.HeadSize, 1024); IsNetworkThreadRunning = true; NetworkReadThread = new System.Threading.Thread(this.NetworkReadProcess); NetworkReadThread.Start(); NetworkSendThread = new System.Threading.Thread(this.NetworkSendProcess); NetworkSendThread.Start(); IsBackGroundProcessRunning = true; dispatcherUITimer = new System.Windows.Forms.Timer(); dispatcherUITimer.Tick += new EventHandler(BackGroundProcess); dispatcherUITimer.Interval = 100; dispatcherUITimer.Start(); btnDisconnect.Enabled = false; SetPacketHandler(); DevLog.Write("프로그램 시작 !!!", LOG_LEVEL.INFO); }
void NetworkReadProcess() { while (IsNetworkThreadRunning) { if (Network.IsConnected() == false) { System.Threading.Thread.Sleep(1); continue; } var recvData = Network.Receive(); if (recvData != null) { PacketBuffer.Write(recvData.Item2, 0, recvData.Item1); while (true) { var data = PacketBuffer.Read(); if (data == null) { break; } lock (((System.Collections.ICollection)RecvPacketQueue).SyncRoot) { RecvPacketQueue.Enqueue(data); } } //DevLog.Write($"받은 데이터: {recvData.Item2}", LOG_LEVEL.INFO); } else { Network.Close(); SetDisconnectd(); DevLog.Write("서버와 접속 종료 !!!", LOG_LEVEL.INFO); } } }
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); } }
void PacketProcess_LoginResponse(byte[] packetData) { var responsePkt = MessagePackSerializer.Deserialize <PKTResLogin>(packetData); DevLog.Write($"로그인 결과: {(ERROR_CODE)responsePkt.Result}"); }
void PacketProcess_Echo(byte[] bodyData) { DevLog.Write($"Echo 받음: {bodyData.Length}"); }
void WriteDebugLog(string msg) { DevLog.Write(msg, LOG_LEVEL.DEBUG); }
private void btn_RoomLeave_Click(object sender, EventArgs e) { PostSendPacket(PACKET_ID.REQ_ROOM_LEAVE, null); DevLog.Write($"방 입장 요청: {textBoxRoomNumber.Text} 번"); }