예제 #1
0
        void endGame() //게임 끝 - 강의자료의 serverstop 함수역할. 모두정리
        {
            //client한테 결과 보내고
            GameResult();
            End_Packet end = new End_Packet();

            end.Type         = (int)PacketType.게임종료;
            end.winner_name  = winner_name;
            end.winner_score = winner_score;
            sendToAll(end, null);

            //새 게임 준비
            count_game = 0;
            getAnswer();
        }
예제 #2
0
        void Receive()
        {
            int nRead = 0;//이거몬지 선영이한테 물어보기

            try
            {
                m_bConnect = true;
                while (m_bConnect && m_stream != null)
                {
                    Array.Clear(readBuffer, 0, 1024 * 4);
                    if (m_Client.Connected)
                    {
                        try
                        {
                            nRead = m_stream.Read(readBuffer, 0, 1024 * 4);
                        }
                        catch
                        {
                            Message("error at Receive -read");
                            m_stream.Close();
                        }

                        Packet packet = (Packet)Packet.Desserialize(readBuffer);

                        if ((int)packet.Type == (int)PacketType.채팅)
                        {
                            Chat_data chat = (Chat_data)Packet.Desserialize(readBuffer);
                            Message(chat.nickname + ":" + chat.data);
                        }
                        else if ((int)packet.Type == (int)PacketType.그림)
                        {
                            //그림일 때 추가
                        }
                        else if ((int)packet.Type == (int)PacketType.정답)
                        {
                            Correct_data correct = (Correct_data)Packet.Desserialize(readBuffer);
                            if (correct.nickname == me.nickname)
                            {
                                Message("정답입니다");//본인이 맞췄을 때는 정답입니다로 출력
                                Hide(true);
                            }
                            else
                            {
                                Message(correct.nickname + "님이 정답을 맞추셨습니다."); //messagebox할라다 별로길래 냅둠
                                Message(correct.nickname + "님이 그리는 중입니다");
                                Hide(false);
                            }
                            lblKeyword.Text = "";
                            //클라이언트가 내부적으로 걔점수라벨만 바꾸는게 낫나???아니면 서버가 플레이어정보배열 보내서 일괄 관리!?
                            for (int i = 0; i < arrClient.Count; i++)
                            {
                                if (arrClient[i].nickname == correct.nickname)
                                {
                                    arrClient[i].score += 1;
                                    lblScore[i].Text    = arrClient[i].score.ToString();
                                }
                            }
                        }
                        else if ((int)packet.Type == (int)PacketType.다음정답)
                        {
                            Answer ans = (Answer)Packet.Desserialize(readBuffer);
                            Message("제시어는 " + ans.answer + "입니다");
                            Message("제시어를 그려주세요");
                            lblKeyword.Text = ans.answer;//퇴장 재참가할때 이거띄 우는거에는 상관없는지 고민
                        }

                        else if ((int)packet.Type == (int)PacketType.참가)
                        {
                            New_Player new_player = (New_Player)Packet.Desserialize(readBuffer);

                            Message(new_player.ligthInfo.nickname + "님이 입장하셨습니다");
                            //Player_light_Info light_info = new Player_light_Info();//가벼운정보들 저장용

                            arrClient.Add(new_player.ligthInfo);


                            LoadScreen();
                        }

                        else if ((int)packet.Type == (int)PacketType.게임종료)
                        {
                            End_Packet end = (End_Packet)Packet.Desserialize(readBuffer);
                            Message("\n" + end.winner_name + "님이 " + end.winner_score + "점으로 승리하셨습니다" + "\n");
                            //뭔가 너무 눈에 안띄어서 일단 이렇게..
                        }

                        else if ((int)packet.Type == (int)PacketType.나가기)
                        {
                            Exit_data         exit        = (Exit_data)Packet.Desserialize(readBuffer);
                            Player_light_Info exit_member = new Player_light_Info();
                            exit_member.nickname = exit.nickname;
                            Message(exit_member.nickname + "님이 나갔습니다");
                            arrClient.Remove(exit_member);
                            LoadScreen();
                        }
                    }
                }
            }
            catch
            {
                Message("client : error at Receive");
            }
        }