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(); }
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"); } }