public Message(EnumTypeMSG typeMSG, EnumTypeACTIONS enumTypeActions, string a, string b, string c, string d) { this.typeMSG = typeMSG; this.typeAction = enumTypeActions; this.a = a; this.b = b; this.c = c; this.d = d; }
/**************************************************************************************************** * ***************************************************************************************************/ public void SendToARoom(string idRoom, EnumTypeMSG enumTypeMSG, EnumTypeACTIONS enumTypeACTIONS, string firtsParam, string secondParam, string thirdParam, string fourthParam) { Room room = roomIcollection.FirstOrDefault(r => r.Id == idRoom); if (idRoom == waitingRoomName) { room = waitingRoom; } else { room = roomIcollection.FirstOrDefault(r => r.Id == idRoom); } foreach (User user in room.Players) { SendToOnePlayer(user.Ip, enumTypeMSG, enumTypeACTIONS, firtsParam, secondParam, thirdParam, fourthParam); } }
/**************************************************************************************************** * ***************************************************************************************************/ public void MsgClientToServe(string userIp, EnumTypeMSG type, EnumTypeACTIONS enumTypeACTIONS, string paramA, string paramB, string paramC, string paramD) { string ipClient = userIp; Room room = roomIcollection.FirstOrDefault(r => r.Players.Any(u => u.Ip == ipClient)); if (room == null) { room = waitingRoom; } string roomId = room.Id; User user = room.Players.FirstOrDefault(u => u.Ip == ipClient); if (type == EnumTypeMSG.ACTION) { if ((room.IpActualPlayer == ipClient || room.CanInterrupt || room.IpChallenger == ipClient || room.MustAnswer == ipClient) && room.ActionProcessing != EnumActionProcessing.MUSTKILLONECARD && room.ActionProcessing != EnumActionProcessing.WAITINGRETREIVINGCARDS) { switch (enumTypeACTIONS) { case EnumTypeACTIONS.REVENUE: user.Money += 1; SendToOnePlayer(ipClient, EnumTypeMSG.SET, EnumTypeACTIONS.MONEY, room.OrderNumberOfActualPlayer.ToString(), user.Money.ToString(), null, null); roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players.FirstOrDefault(u => u.Ip == ipClient).Money += 1; NextPlayer(room.Id); break; case EnumTypeACTIONS.SOCIALHELP: roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.SOCIALHELP; roomIcollection.FirstOrDefault(r => r.Id == room.Id).TypeChallenge = enumTypesChallenge.DUCHESS; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.SOCIALHELP, room.OrderNumberOfActualPlayer.ToString(), null, null, null); WaitForSomeoneChallenge(room.Id); break; case EnumTypeACTIONS.POWER: switch (Convert.ToInt32(paramA)) { case (int)enumTypes.AMBASSADOR: roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.AMBASSADORSELECTINGCARDS; roomIcollection.FirstOrDefault(r => r.Id == room.Id).TypeChallenge = enumTypesChallenge.AMBASSADOR; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.AMBASSADORSELECTINGCARDS, room.OrderNumberOfActualPlayer.ToString(), null, null, null); WaitForSomeoneChallenge(room.Id); break; case (int)enumTypes.CAPITAIN: roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.CAPITAINSTEALINGMONEY; roomIcollection.FirstOrDefault(r => r.Id == room.Id).TypeChallenge = enumTypesChallenge.CAPITAIN; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.CAPITAINSTEALINGMONEY, room.OrderNumberOfActualPlayer.ToString(), null, null, null); // target player string capitainIpTarget = roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[Convert.ToInt32(paramB)].Ip; WaitForAnswer(room.Id, capitainIpTarget); break; case (int)enumTypes.DUCHESS: roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.DUCHESSTAKINGINBANK; roomIcollection.FirstOrDefault(r => r.Id == room.Id).TypeChallenge = enumTypesChallenge.DUCHESS; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.DUCHESSTAKINGINBANK, room.OrderNumberOfActualPlayer.ToString(), null, null, null); WaitForSomeoneChallenge(room.Id); break; case (int)enumTypes.INQUISITOR: roomIcollection.FirstOrDefault(r => r.Id == room.Id).TypeChallenge = enumTypesChallenge.INQUISITOR; if (Convert.ToInt32(paramB) == 0) { roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.INQUISITORCONSULTING; string inquisitorIpTarget = roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[Convert.ToInt32(paramC)].Ip; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.INQUISITORCONSULTING, room.OrderNumberOfActualPlayer.ToString(), null, null, null); //target player WaitForAnswer(room.Id, inquisitorIpTarget); } else { roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.INQUISITORSELECTINGCARD; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.INQUISITORSELECTINGCARD, room.OrderNumberOfActualPlayer.ToString(), null, null, null); WaitForSomeoneChallenge(room.Id); } break; case (int)enumTypes.KILLER: roomIcollection.FirstOrDefault(r => r.Id == room.Id).ActionProcessing = EnumActionProcessing.KILLERKILLING; roomIcollection.FirstOrDefault(r => r.Id == room.Id).TypeChallenge = enumTypesChallenge.KILLER; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.KILLERKILLING, room.OrderNumberOfActualPlayer.ToString(), null, null, null); //targer player string killerIpTarget = roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[Convert.ToInt32(paramB)].Ip; WaitForAnswer(room.Id, killerIpTarget); break; } break; case EnumTypeACTIONS.MURDER: if (user.Money >= 7) { user.Money -= 7; roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players.FirstOrDefault(u => u.Ip == ipClient).Money = user.Money; SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.MURDER, room.OrderNumberOfActualPlayer.ToString(), paramA, null, null); MustKillOneCard(room.Id, Convert.ToInt32(paramA), room.Players[Convert.ToInt32(paramA)].Ip); } else { SendToOnePlayer(ipClient, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.MONEYERROR, null, null, null, null); SendToOnePlayer(ipClient, EnumTypeMSG.SET, EnumTypeACTIONS.MONEY, room.NumberOrder(user.Ip).ToString(), user.Money.ToString(), null, null); } break; case EnumTypeACTIONS.CHALLENGE: StopTimer(room.Id); SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.CHALLENGE, room.NumberOrder(ipClient).ToString(), paramB, null, null); roomIcollection.FirstOrDefault(r => r.Id == room.Id).MustAnswerPlayer = (enumTypes)Convert.ToInt32(paramA); WaitForSecondChallenge(room.Id, ipClient); break; case EnumTypeACTIONS.SECONDCHALLENGE: StopTimer(room.Id); int orderMustAnswer = room.NumberOrder(room.MustAnswer); if (room.Players[orderMustAnswer].HasCard(room.MustAnswerPlayer)) { SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.SECONDCHALLENGE, "FAIL", room.OrderNumberOfActualPlayer.ToString(), null, null); MustKillOneCard(room.Id, room.OrderNumberOfActualPlayer, room.IpActualPlayer); } else { SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.SECONDCHALLENGE, "SUCCESS", room.OrderNumberOfActualPlayer.ToString(), null, null); ActionSuccess(room.Id); MustKillOneCard(room.Id, orderMustAnswer, room.MustAnswer); } break; } } else if (room.ActionProcessing == EnumActionProcessing.WAITINGRETREIVINGCARDS && room.MustAnswer == ipClient) { if (enumTypeACTIONS == EnumTypeACTIONS.RETRIEVINGCARDSAMBASSADOR) { roomIcollection.FirstOrDefault(r => r.Id == room.Id).deck.Cour.Add(new Card(Convert.ToInt32(paramA))); roomIcollection.FirstOrDefault(r => r.Id == room.Id).deck.Cour.Add(new Card(Convert.ToInt32(paramB))); roomIcollection.FirstOrDefault(r => r.Id == room.Id).deck.Cour.Shuffle(); NextPlayer(room.Id); } else if (enumTypeACTIONS == EnumTypeACTIONS.RETRIEVINGCARDINQUISITOR) { roomIcollection.FirstOrDefault(r => r.Id == room.Id).deck.Cour.Add(new Card(Convert.ToInt32(paramA))); roomIcollection.FirstOrDefault(r => r.Id == room.Id).deck.Cour.Shuffle(); NextPlayer(room.Id); } } else if (room.ActionProcessing == EnumActionProcessing.MUSTKILLONECARD && room.MustAnswer == ipClient) { if (enumTypeACTIONS == EnumTypeACTIONS.KILLCARD) { if (roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[room.NumberOrder(ipClient)].Hand.Count - 1 > 0) { enumTypes cardType = (enumTypes)Convert.ToInt32(paramA); if (roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[room.NumberOrder(ipClient)].HasCard(cardType)) { Card card = roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[room.NumberOrder(ipClient)].KillOneCardAndGet(cardType); roomIcollection.FirstOrDefault(r => r.Id == room.Id).deck.Cimetiere.Add(card); SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.KILLONECARD, room.NumberOrder(ipClient).ToString(), null, null, null); roomIcollection.FirstOrDefault(r => r.Id == room.Id).CheckCardsAlive(); SendCardsAlive(room.Id); CheckGameEndAndNextPlayerIfOk(room.Id); } else { SendToOnePlayer(ipClient, EnumTypeMSG.ORDER, EnumTypeACTIONS.MUSTKILLONECARD, null, null, null, null); } } else { roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players[room.NumberOrder(ipClient)].Kill(); SendToARoom(room.Id, EnumTypeMSG.ANNONCE, EnumTypeACTIONS.KILLED, room.NumberOrder(ipClient).ToString(), null, null, null); CheckGameEndAndNextPlayerIfOk(room.Id); } } } else { SendToOnePlayer(ipClient, EnumTypeMSG.ORDER, EnumTypeACTIONS.WAIT, null, null, null, null); } } else if (type == EnumTypeMSG.GET) { switch (enumTypeACTIONS) { case EnumTypeACTIONS.SRVVERS: Console.WriteLine("Demande de la version du serveur : " + user.Ip); SendToOnePlayer(ipClient, EnumTypeMSG.ANSWER, EnumTypeACTIONS.SRVVERS, CURRENTSERVERVERSION, null, null, null); break; case EnumTypeACTIONS.MINCLTVERS: SendToOnePlayer(ipClient, EnumTypeMSG.ANSWER, EnumTypeACTIONS.MINCLTVERS, MINCLIENTVERSION, null, null, null); break; } } else if (type == EnumTypeMSG.SET) { switch (enumTypeACTIONS) { case EnumTypeACTIONS.NAME: roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players.FirstOrDefault(p => p.Ip == user.Ip).SetName(paramB); SendToARoom(room.Id, EnumTypeMSG.SET, EnumTypeACTIONS.NAMEOFAPLAYER, room.NumberOrder(user.Ip).ToString(), roomIcollection.FirstOrDefault(r => r.Id == room.Id).Players.FirstOrDefault(p => p.Ip == user.Ip).Name, null, null); break; } } }
public void SendToOnePlayer(string userIp, EnumTypeMSG enumTypeMSG, EnumTypeACTIONS enumTypeACTIONS, string firstParam, string secondParam, string thirdParam, string fourthParam) { Thread.Sleep(500); Console.WriteLine("SENDING >> " + firstParam + ":" + secondParam); Send(FindTCPCLient(userIp), new Message(enumTypeMSG, enumTypeACTIONS, firstParam, secondParam, thirdParam, fourthParam)); }