HomeGuia GeralAPI ReferenceNovidadesFórum de discussãoFale Conosco
SuportePerguntas Frequentes
API Reference

Biblioteca de conexão - C# .NET

Essa biblioteca é responsável por fornecer uma interface de conexão ao Crystal Difusor Cedro.

Instalação

Adicione o arquivo NuGet.Config na solução:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <packageSources>
   <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
   <add key="Cedro-Cedro" value="https://nuget.cedrotech.com/v3/index.json" />
 </packageSources>
 <packageRestore>
   <add key="enabled" value="True" />
   <add key="automatic" value="True" />
 </packageRestore>
 <bindingRedirects>
 	<add key="skip" value="False" />
 </bindingRedirects>
 <packageManagement>
   <add key="format" value="0" />
   <add key="disabled" value="False" />
 </packageManagement>
</configuration>

Instale a biblioteca via Nuget no projeto:

dotnet add <Meu Projeto>.csproj package Cd3.Connector -s https://nuget.cedrotech.com/v3/index.json

Caso já tenha a biblioteca instalada, atualize:

dotnet add <Meu Projeto>.csproj package Cd3.Connector –version <NovaVersao> -s
https://nuget.cedrotech.com/v3/index.json

Como usar

1. Inicialize o Connector

O primeiro passo é criar uma instância da classe Connector, passando o nome
de usuário, senha e funções de callback para lidar com eventos de conexão,
desconexão e mensagens recebidas.

using Cd3Connector;
class Program
{
	static void Main(string[] args)
	{
// Inicializando o conector
		var connector = new Connector("seu_usuario", "sua_senha", OnConnect,
OnDisconnect, OnMessage);
// Inicia a conexão
		connector.Start();
	}
static void OnConnect()
	{
		Console.WriteLine("Conectado com sucesso!");
	}
static void OnDisconnect()
	{
		Console.WriteLine("Desconectado!");
	}
static void OnMessage(string message)
	{
		Console.WriteLine($"Mensagem recebida: {message}");
	}
}

Além dos parâmetros obrigatórios, o Connector permite configurar a inicialização
com os seguintes parâmetros opcionais:

  • active_conflated: (bool, padrão: False)
    • Define se o modo conflated deve ser ativado, permitindo uma menor
      frequência de atualizações.
  • log_level: (string, padrão: “INFO”)
    • Define o nível de detalhe do log. Os valores podem ser:
      • “DEBUG” para maior detalhe;
      • “INFO” para informações gerais;
      • “WARNING” ou “ERROR” para menos detalhes
  • log_path: (string, padrão: “”)
    • Caminho para salvar os arquivos de log. Se não for fornecido, os logs
      serão criados em uma pasta padrão chamada cd3_connector no
      diretório atual.
  • active_realtime: (bool, padrão: False)
    • Define se o modo realtime deve ser ativado, permitindo receber atualizações em tempo real dos servidores datafeed. Por padrão a informação é recebida dos servidores delay.

Esses parâmetros podem ser fornecidos/configurados ao chamar o construtor de
forma independente, ou seja, não é necessário especificar todos os parâmetros
opcionais ao mesmo tempo. Cada parâmetro pode ser configurado
individualmente, sem depender dos outros. Para detalhes de como utilizá-los,
consulte o Exemplo completo 2.


2. Métodos principais


  • Start(): Inicia a conexão com o servidor.
  • Stop(): Finaliza a conexão com o servidor.
  • SendCommand(string command): Envia um comando ao servidor

3. Enviar comandos

Com a conexão estabelecida, você pode enviar comandos ao servidor usando o
método SendCommand. Cada comando deve ser enviado como uma string.

connector.SendCommand("SQT PETR4"); // Solicita cotação de PETR4
connector.SendCommand("BQT PETR4"); // Solicita book de ofertas de PETR4

4. Callbacks

Você deve definir funções de callback para tratar eventos de conexão,
desconexão e para processar as mensagens recebidas. São elas:

  • OnConnect: Invocada quando a conexão é estabelecida com sucesso.
  • OnDisconnect: Invocada quando a conexão é perdida.
  • OnMessage: Invocada sempre que uma nova mensagem é recebida.

Exemplo de uma função de callback para receber mensagens:

static void OnMessage(string message)
{
  if (message.Equals("invalid login.", StringComparison.OrdinalIgnoreCase))
  {
  	Console.WriteLine("Login inválido. Verifique suas credenciais.");
  }
  else
  {
  	Console.WriteLine($"Mensagem recebida: {message}");
  }
}

Exemplos


Exemplo completo 1

using Cd3Connector;

namespace Example
{
    class Receiver
    {
        private readonly Queue<string> messages;
        private readonly ManualResetEventSlim eventSlim;
        private readonly Connector connector;
        private bool reconnect;
        public Receiver()
        {
            connector = new Connector("username", "password", OnConnect, OnDisconnect, OnMessage, active_conflated:true, log_level:"INFO", log_path:"C:\\logs_cd3connector");
            messages = new Queue<string>();
            eventSlim = new ManualResetEventSlim(false);
            ThreadPool.QueueUserWorkItem(state => ProcessMessages());
            reconnect = true;
        }

        public void Start()
        {
            connector.Start();
        }

        private void OnConnect()
        {
            connector.SendCommand("sqt petr4");
            connector.SendCommand("bqt petr4");
            connector.SendCommand("sqt winm24");
            connector.SendCommand("bqt winm24");
        }

        private void OnDisconnect()
        {
            if (reconnect)
                connector.Start();
        }

        private void OnMessage(string message)
        {
            lock (messages)
            {
                messages.Enqueue(message);
                eventSlim.Set();
            }
        }

        private void ProcessMessages()
        {
            while (true)
            {
                eventSlim.Wait();
                string msg;
                lock (messages)
                {
                    msg = messages.Dequeue();
                    if (messages.Count == 0)
                        eventSlim.Reset();
                }
                if (msg.Equals("invalid login.", StringComparison.OrdinalIgnoreCase))
                    reconnect = false;
                Console.WriteLine(msg);
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Receiver MktDataConnector = new();
            MktDataConnector.Start();
        }
    }
}


Exemplo completo 2

using Cd3Connector;
namespace Example
{
  class Receiver
  {
    private readonly Queue<string> messages;
    private readonly ManualResetEventSlim eventSlim;
    private readonly Connector connector;
    private bool reconnect;
    public Receiver()
    {
      connector = new Connector("username", "password", OnConnect, OnDisconnect, OnMessage, active_conflated:true,
      log_level:"INFO", log_path:"C:\\logs_cd3connector", active_realtime:true);;
      messages = new Queue<string>();
      eventSlim = new ManualResetEventSlim(false);
      ThreadPool.QueueUserWorkItem(state => ProcessMessages());
      reconnect = true;
    }
    public void Start()
    {
    	connector.Start();
    }
    private void OnConnect()
    {
      connector.SendCommand("sqt petr4");
      connector.SendCommand("bqt petr4");
      connector.SendCommand("sqt winm24");
      connector.SendCommand("bqt winm24");
    }
    private void OnDisconnect()
    {
    	if (reconnect)
    		connector.Start();
    }
    private void OnMessage(string message)
    {
      lock (messages)
      {
        messages.Enqueue(message);
        eventSlim.Set();
      }
    }
    private void ProcessMessages()
    {
      while (true)
      {
        eventSlim.Wait();
        string msg;
        lock (messages)
        {
          msg = messages.Dequeue();
          if (messages.Count == 0)
          	eventSlim.Reset();
        }
        if (msg.Equals("invalid login.", StringComparison.OrdinalIgnoreCase))
        	reconnect = false;
        Console.WriteLine(msg);
      }
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Receiver MktDataConnector = new();
      MktDataConnector.Start();
    }
  }
}