private void ConnectDone() { PacketMaker maker = new PacketMaker(); maker.SetMsgLength(Encoding.UTF8.GetByteCount(textBox1.Text)); maker.SetCommand((int)COMMAND.SET_USER_ID); maker.SetStringData(textBox1.Text); userID = textBox1.Text; sender1.SendPacket(COMMAND.SET_USER_ID, maker); }
private void CreateRoom_Click(object sender, EventArgs e) { PacketMaker maker = new PacketMaker(); maker.SetMsgLength(Encoding.UTF8.GetByteCount(CreateRoomTextBox.Text)); maker.SetCommand((int)COMMAND.CREATE_ROOM); maker.SetStringData(CreateRoomTextBox.Text); sender1.SendPacket(COMMAND.CREATE_ROOM, maker); CreateRoomTextBox.Text = string.Empty; }
private void ExitRoomButton_Click(object sender, EventArgs e) { PacketMaker maker = new PacketMaker(); maker.SetMsgLength(BitConverter.GetBytes(1).Length); maker.SetCommand((int)COMMAND.EXIT_ROOM); maker.SetIntData(1); //maker.SetStringData(SendTextBox.Text); sender1.SendPacket(COMMAND.EXIT_ROOM, maker); SendTextBox.Text = string.Empty; }
private void JoinRoomButton_Click(object sender, EventArgs e) { PacketMaker maker = new PacketMaker(); maker.SetMsgLength(Encoding.UTF8.GetByteCount(JoinRoomTextBox.Text)); maker.SetCommand((int)COMMAND.JOIN_ROOM); maker.SetStringData(JoinRoomTextBox.Text); //maker.SetStringData(SendTextBox.Text); sender1.SendPacket(COMMAND.JOIN_ROOM, maker); JoinRoomTextBox.Text = string.Empty; }
private void StartSend() { lock (lockQueueObj) { bool isComplete = true; // 체크를 큐가 들어있는지로 하므로 끝나기 전까지 dequeue 금지 PacketMaker maker = packetQueue.Peek(); // 데이터를 보내자 sendArgs.AcceptSocket = null; sendArgs.SetBuffer(maker.dataBuffer, 0, maker.currentPos); isComplete = socket.SendAsync(sendArgs); if (!isComplete) { SendComplete(socket, sendArgs); } } //switch (command) //{ // case COMMAND.SET_USER_ID: // //userID = Encoding.UTF8.GetString(packet.dataBuffer, // // Defines.HEADERSIZE + Defines.COMMAND, // // packet.currentPos - (Defines.HEADERSIZE + Defines.COMMAND)); // sendArgs.AcceptSocket = null; // sendArgs.SetBuffer(packet.dataBuffer, 0, packet.currentPos); // socket.SendAsync(sendArgs); // break; // case COMMAND.SEND_CHAT_MSG: // sendArgs.AcceptSocket = null; // sendArgs.SetBuffer(packet.dataBuffer, 0, packet.currentPos); // socket.SendAsync(sendArgs); // break; // case COMMAND.SERVER_DISCONNECTED: // sendArgs.AcceptSocket = null; // sendArgs.SetBuffer(packet.dataBuffer, 0, packet.currentPos); // socket.SendAsync(sendArgs); // break; //} }
// 패킷 전송 public void SendPacket(COMMAND command, PacketMaker packet) { lock (lockQueueObj) { // 큐에 데이터가 없다면 추가하고 패킷을 보내자 if (packetQueue.Count == 0) { packetQueue.Enqueue(packet); StartSend(); return; } // 큐에 데이터가 있다면 넣기만 하자 packetQueue.Enqueue(packet); } }
private void SendButton_Click(object sender, EventArgs e) { StringBuilder builder = new StringBuilder(); builder.Append(ReceiveTextBox.Text); builder.Append(userID); builder.Append(" : "); builder.Append(SendTextBox.Text); builder.Append(Environment.NewLine); ReceiveTextBox.Text = builder.ToString(); PacketMaker maker = new PacketMaker(); maker.SetMsgLength(Encoding.UTF8.GetByteCount(SendTextBox.Text)); maker.SetCommand((int)COMMAND.SEND_CHAT_MSG); maker.SetStringData(SendTextBox.Text); sender1.SendPacket(COMMAND.SEND_CHAT_MSG, maker); SendTextBox.Text = string.Empty; }
// 패킷 수신 public void ReceivePacket(COMMAND command) { switch (command) { case COMMAND.SET_USER_ID_DONE: { int check = BitConverter.ToInt32(receiveBuffers, (Defines.HEADERSIZE + Defines.COMMAND)); string msg = Encoding.UTF8.GetString(receiveBuffers, (Defines.HEADERSIZE + Defines.COMMAND) + 4, totalByteLength); if (check == 1) { //MessageBox.Show(msg + " 아이디로 접속되었습니다."); userID = msg; settingIDCallback(); // 방 리스트를 가져오자 PacketMaker maker = new PacketMaker(); maker.SetMsgLength(BitConverter.GetBytes(1).Length); maker.SetCommand((int)COMMAND.GET_ROOM); maker.SetIntData(1); SendPacket(COMMAND.GET_ROOM, maker); } else { MessageBox.Show("동일한 아이디가 존재합니다"); // 디스커넥트를 서버에 보내자 // 나중에 패킷 메세지도 필요하면 그 때 보내보자 PacketMaker maker = new PacketMaker(); maker.SetMsgLength(BitConverter.GetBytes(1).Length); maker.SetCommand((int)COMMAND.SERVER_DISCONNECTED); maker.SetIntData(1); SendPacket(COMMAND.SERVER_DISCONNECTED, maker); //socket.Disconnect(false); //SocketAsyncEventArgs dis = new SocketAsyncEventArgs(); //dis.Completed += new EventHandler<SocketAsyncEventArgs>(Dis); //socket.DisconnectAsync(dis); } break; } case COMMAND.RECEIVE_CHAT_MSG: { string msg = Encoding.UTF8.GetString(receiveBuffers, (Defines.HEADERSIZE + Defines.COMMAND), totalByteLength); receiveMessageCallback(msg); break; } case COMMAND.GET_ROOM_DONE: { string msg = Encoding.UTF8.GetString(receiveBuffers, (Defines.HEADERSIZE + Defines.COMMAND), totalByteLength); settingRoomCallback(msg); break; } case COMMAND.CREATE_ROOM_DONE: { string msg = Encoding.UTF8.GetString(receiveBuffers, (Defines.HEADERSIZE + Defines.COMMAND), totalByteLength); createRoomCallback(msg); break; } case COMMAND.JOIN_ROOM_DONE: { string msg = Encoding.UTF8.GetString(receiveBuffers, (Defines.HEADERSIZE + Defines.COMMAND), totalByteLength); createRoomCallback(msg); break; } case COMMAND.EXIT_ROOM_DONE: { // 방 리스트를 가져오자 PacketMaker maker = new PacketMaker(); maker.SetMsgLength(BitConverter.GetBytes(1).Length); maker.SetCommand((int)COMMAND.GET_ROOM); maker.SetIntData(1); SendPacket(COMMAND.GET_ROOM, maker); // 방 로비 화면으로 넘겨주자 settingIDCallback(); break; } } }
public void SendPacket(COMMAND command, PacketMaker packet) { token.SendPacket(command, packet); }