Exemplo n.º 1
0
 public static void ReconectarAtivosDesconectados()
 {
     using (var _chamadasRepo = new ChamadasRepository())
     {
         _chamadasRepo.AtualizarStatusAoReiniciar();
         var chamadasabertas = _chamadasRepo.GetAllOpen();
         var monitor         = Market_Monitor.Instancia;
         monitor.LimparMonitoramento();
         foreach (var chamada in chamadasabertas)
         {
             _chamadasRepo.AddReference(chamada, "Symbol");
             monitor.AddMonitor(chamada, chamada.Symbol.symbol.ToLower());
             _chamadasRepo.Detach(chamada);
         }
     }
 }
        public AtivoMonitorado(Chamada Chamada, string symbol)
        {
            Symbol       = symbol;
            this.chamada = Chamada;

            GainMonitor = chamada.PrecoGain;
            LossMonitor = chamada.PrecoLoss;

            ws = new WebSocket("wss://stream.binance.com:9443/stream?streams=" + symbol.ToLower() + "@trade");
            //ws.Log.Level = LogLevel.Trace;
            //ws.Log.File = "changetofilepath";
            ws.OnOpen += (sender, e) =>
            {
                Logs.LogConexaoAtivos(chamada.Id + " => " + DateTime.UtcNow + " => type ( Start Monitor )");
            };

            //Para envio de ping
            ws.EmitOnPing = true;
            ws.OnMessage += (sender, e) =>
            {
                try
                {
                    if (e.IsPing)
                    {
                        ws.Ping();
                        return;
                    }
                    var content     = e.Data;
                    var ws_trade    = JsonConvert.DeserializeObject <WS_Trade>(content);
                    var marketvalue = ws_trade.data.p;

                    if (chamada.ChamadaStatus_Id == 1)
                    {
                        //verifica se a ordem foi criada com valor acima do preco de mercado ||  se a ordem foi criada com valor abaixo do preco de mercado
                        if ((chamada.PrecoMercadoHoraChamada > chamada.PrecoEntrada && marketvalue <= chamada.PrecoEntrada) || (chamada.PrecoMercadoHoraChamada < chamada.PrecoEntrada && marketvalue >= chamada.PrecoEntrada))
                        {
                            using (var _ChamadasRepo = new ChamadasRepository())
                            {
                                chamada.ChamadaStatus_Id = 2;
                                _ChamadasRepo.Update(chamada);
                                var userIds = _ChamadasRepo.NaoRecusaram_e_nao_Aceitaram_Chamada(chamada.Id);
                                //remove card de chamadas da tela dos clientes
                                signalContext.Clients.Users(userIds).EncerrarChamada(chamada.Id);
                                signalContext.Clients.User("admin").MudarParaEdicao(chamada.Id);
                                Logs.LogConexaoAtivos(chamada.Id + " => " + DateTime.UtcNow + " => type ( Preco Entrada Alcançado ) => " + marketvalue);
                            }
                        }
                    }
                    else if (chamada.ChamadaStatus_Id == 2)
                    {
                        if (marketvalue > GainMonitor)
                        {
                            using (var _ChamadasRepo = new ChamadasRepository())
                            {
                                chamada.ChamadaStatus_Id    = 4;
                                chamada.ResultadoChamada_Id = 1;
                                _ChamadasRepo.Update(chamada);
                                //signalContext.Clients.User("admin").RemoverEdicao(chamada.Id);
                                signalContext.Clients.All.RemoverEdicao(chamada.Id);
                                Logs.LogConexaoAtivos(chamada.Id + " => " + DateTime.UtcNow + " => type ( Preco Gain Alcançado) => " + marketvalue);
                                this.Dispose(true);
                            }
                        }
                        else if (marketvalue < LossMonitor)
                        {
                            using (var _ChamadasRepo = new ChamadasRepository())
                            {
                                chamada.ChamadaStatus_Id    = 4;
                                chamada.ResultadoChamada_Id = 2;
                                _ChamadasRepo.Update(chamada);
                                //signalContext.Clients.User("admin").RemoverEdicao(chamada.Id);
                                signalContext.Clients.All.RemoverEdicao(chamada.Id);
                                Logs.LogConexaoAtivos(chamada.Id + " => " + DateTime.UtcNow + " => type ( Preco Loss Alcançado) => " + marketvalue);
                                this.Dispose(true);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logs.LogConexaoAtivos("Error on Try Catch => " + ex.Message + " => inner exception => " + ex.InnerException.Message + " => stack trace => " + ex.StackTrace);
                }
            };

            ws.OnClose += (sender, e) =>
            {
                Logs.LogConexaoAtivos(chamada.Id + " => OnClose Event => " + DateTime.UtcNow + " code => " + e.Code + " motivo => " + e.Reason);
                var monitor = Market_Monitor.Instancia;
                monitor.RemoveMonitor(chamada.Id);
            };

            ws.OnError += (sender, e) =>
            {
                Logs.LogConexaoAtivos(chamada.Id + " => OnError Event => " + DateTime.UtcNow + " Msg Erro => " + e.Message + " => inner exception => " + e.Exception.Message + " => stack trace => " + e.Exception.StackTrace);
            };
            ws.Connect();
        }