예제 #1
0
        public override void OnMessage(string message)
        {
            try
            {
                var envio = JsonConvert.DeserializeObject <Envio>(message);
                switch (envio.TipoMensagem)
                {
                case (int)TipoMensagem.Montagem:
                {
                    Barcos = new List <Barco>();

                    var firstOrDefault = envio.Objeto.FirstOrDefault();

                    if (firstOrDefault != null)
                    {
                        var idTab = int.Parse(firstOrDefault.ToString());

                        using (var db = new TabuleirosContext())
                        {
                            var tabuleiro = db.Tabuleiros.FirstOrDefault(x => x.Id == idTab);


                            var itens = JsonConvert.DeserializeObject <List <EnvioBarco> >(tabuleiro.Dados);

                            foreach (var item in itens)
                            {
                                Barcos.Add(new Barco(item));

                                StatusTabuleiro = true;
                            }
                        }
                    }
                    else
                    {
                        Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Fail, "Você Erro !!!!")));
                    }


                    if (clients.All(x => ((MicrosoftWebSockets)x).StatusTabuleiro))
                    {
                        clients.Broadcast(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Inicio, "Jogo Iniciado")));

                        ObterOponente().Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.MandoDeJogo, "Sua Vez !!!")));
                    }
                    else
                    {
                        this.Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Aguarde, "Aguarde o proximo Jogador terminar a Montagem....")));
                    }
                }
                break;


                case (int)TipoMensagem.Jogada:
                {
                    var jogada = envio.Objeto.FirstOrDefault();

                    if (jogada != null)
                    {
                        var opoente = ObterOponente();

                        if (opoente != null)
                        {
                            var barco = opoente.Barcos.FirstOrDefault(x => x.Coordenadas.Any(y => y.Valor == jogada.ToString() && !y.Destruido));

                            if (barco != null)
                            {
                                opoente.Barcos.Remove(barco);

                                barco.Afundar(jogada.ToString());

                                opoente.Barcos.Add(barco);

                                AtualizarBarcos(opoente, jogada.ToString());

                                Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Acerto, "Você acerto !!!!!")));


                                if (barco.Coordenadas.All(x => x.Destruido))
                                {
                                    opoente.Send(
                                        JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Destruido, string.Format("Ops Você perdeu seu barco !!! |{0}", barco.TipoBarco))));
                                }
                            }
                            else
                            {
                                opoente.Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Tiro, string.Format("Tiro |{0}", jogada.ToString()))));
                                Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Erro, "Você Erro !!!!")));
                            }
                        }
                    }
                }

                    VerificarFinalJogo();

                    ObterOponente().Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.MandoDeJogo, "Sua Vez !!!!")));
                    break;

                case (int)TipoMensagem.TempoEsgotado:
                    ObterOponente().Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.MandoDeJogo, "Sua Vez !!!!")));
                    break;
                }

                var webSocketHandler = clients.SingleOrDefault(r => ((MicrosoftWebSockets)r).name == "Julio");


                if (webSocketHandler != null)
                {
                    webSocketHandler.Send("Rola");
                }
            }
            catch (Exception ex)
            {
                this.Send(JsonConvert.SerializeObject(new Retorno(TipoMensagemRetorno.Fail, "Mensagem com Erro")));
            }
        }