Example #1
0
        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);
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }
Example #4
0
        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;
        }
Example #5
0
        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;
            //}
        }
Example #6
0
        // 패킷 전송
        public void SendPacket(COMMAND command, PacketMaker packet)
        {
            lock (lockQueueObj)
            {
                // 큐에 데이터가 없다면 추가하고 패킷을 보내자
                if (packetQueue.Count == 0)
                {
                    packetQueue.Enqueue(packet);
                    StartSend();

                    return;
                }

                // 큐에 데이터가 있다면 넣기만 하자
                packetQueue.Enqueue(packet);
            }
        }
Example #7
0
        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;
        }
Example #8
0
        // 패킷 수신
        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;
            }
            }
        }
Example #9
0
 public void SendPacket(COMMAND command, PacketMaker packet)
 {
     token.SendPacket(command, packet);
 }