# Portuguese

### Ligação rápida com LSports - RabbitMQ

Portanto, começou a implementar os serviços LSports via RMQ, boa escolha! Vamos por a sua conexão a funcionar de uma forma simples e rápida.

Este guia tem o objetivo de dar uma melhor visão de como a equipa de Suporte da equipa LSports para resolver problemas rapidamente e com um esforço mínimo da sua parte.

**Instruções passo a passo:**\
● Primeiro, nós recomendamos usar o nosso SDK (atualmente disponível em C#, PHP ou Node) para uma implementação rápida, pode fazer do download dos ficheiros baseado na sua linguagem de programação favorita a partir daqui\
[SDK - C#](https://lsportseu-my.sharepoint.com/personal/stas_m_lsports_eu/_layouts/15/guestaccess.aspx?docid=0bd80e807559e4543b520bd0fe7f25b46\&authkey=AerSWTRZ2TMn2HyT3r9NEgE\&e=x0V82l)

O exemplo seguinte refere-se às seguintes iniciais:\
**Username: MyEmail**\
**Password: Passw0rd1234**\
**Package: 102030**\
(Pode escolher as credenciais que lhe são dadas pela LSports)

`Repare: Todos os exemplos estão em C#.`\
Caso escolha implementar o seu próprio código, irá precisar da biblioteca RMQ [aqui](https://www.rabbitmq.com/devtools.html).\
Por favor tenha em consideração que a LSports atualmente usa a versão 3.6.5.0

1. Comece por verificar de o seu pacote está ativo enviando uma chamada API como as seguintes:

**Pacote InPlay:** <https://inplay.lsports.eu/api/Package/EnablePackage?username=MyEmail&password=Passw0rd1234&packageid=102030>

**Pacote Prematch:** <https://prematch.lsports.eu/OddService/EnablePackage?username=MyEmail&password=Passw0rd1234&guid=guid-provided-by-LSports>

**Resposta:**

{% tabs %}
{% tab title="XML" %}

```xml
<xs:schema>
  <xs:element name="Message">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Header">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:short" name="HttpStatusCode"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="Body">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="Message"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
```

{% endtab %}

{% tab title="JSON" %}

```json
{
  "type": "object",
  "properties": {
    "Header": {
      "type": "object",
      "properties": {
        "HttpStatusCode": {
          "type": "integer"
        }
      },
      "required": [
        "HttpStatusCode"
      ]
    },
    "Body": {
      "type": "object",
      "properties": {
        "Message": {
          "type": "string"
        }
      },
      "required": [
        "Message"
      ]
    }
  },
  "required": [
    "Header",
    "Body"
  ]
}
```

{% endtab %}
{% endtabs %}

Caso o pacote já tenha sido ativado então a mensagem deve conter “Value was already set”. Para qualquer outro estado ou mensagem de erro por favor verifique as suas credenciais ou contacte-nos.

2. CCrie uma ligação factory do seguinte modo:

```csharp
ConnectionFactory connectionFactory = new ConnectionFactory
```

```json
{
    HostName = "Described below",
    Port = 5672,
    UserName = "MyEmail",
    Password = "Passw0rd1234",
    AutomaticRecoveryEnabled = true,
    VirtualHost = "Customers", //Default value
    RequestedHeartbeat = 580,
    NetworkRecoveryInterval = TimeSpan.FromSeconds(1)
};
```

**RMQ HostName:**\
InPlay: **inplay-rmq.lsports.eu**\
PreMatch: **prematch-rmq.lsports.eu**

3. Crie uma ligação do seguinte modo:

```csharp
IConnection connection = _connectionFactory.CreateConnection();
```

4. Crie um modelo do seguinte modo:

```csharp
IModel model = connection.CreateModel();
```

5. Configure a qualidade de serviço:

```csharp
model.BasicQos(prefetchSize: 0, prefetchCount: 1000, global: false);
```

6. Mensagem consume:

```csharp
EventingBasicConsumer consumer = new EventingBasicConsumer(model);
consumer.Received += (sender, eventArgs) =>
{
    // Deserialize message
    // Call method to handle deserialized message
};
```

7. Começar mensagem consumo:\
   (tenha o cuidado de escrever o seu ID do pacote com sublinhados ('\_') como descrito) Por exemplo, se o ID do pacote for “102030”

```csharp
model.BasicConsume(queue: '_102030_', noAck: true, consumer: consumer)
```

* A partir daqui já deve ser capaz de criar a sua conexão RMQ e começar a receber mensagens do Batimento cardíaco.

**Requisição de uma Imagem Completa**\
Como as atualizações vindas da RMQ são apenas deltas, antes de começar a consumir mensagens vindas da LSports, pode requisitar uma imagem completa dos dados que deverá receber.\
Pode fazê-lo fazendo uma chamada API aos seguintes:

* Inplay Snapshot - Fornece os dados para todos os eventos que estão atualmente a acontecer.
* Prematch Get events - Fornece os dados para o(s)evento(s) requisitado(s).

Para uma explicação detalhada da nossa estrutura de dados, pode continuar a ler a nossa documentação.

#### Possíveis tipos de erros

**Aviso: Se a fila chegar a 10000 mensagens não lidas/unacked será automaticamente purgada e o seu pacote será desativado.**

A maioria das falhas de conexão ocorrem devido a credenciais incorretas ou pacotes inativos. Abaixo encontram-se os erros e causas mais comuns.

**"Connection failed"** - Por favor verifique os detalhes de ligação e.g. Ligação factory, anfitrião RMQ, RItualHost foram escritos corretamente\
\&#xNAN;**"Access refused"**- Por favor verifique se o seu pacote está ativo e que as credenciais de início de sessão e ID do pacote foram escritos corretamente.

**Agora tudo o que tem de fazer é, começar a requisitar os nossos dados de desporto de acordo com as suas necessidades. Para a documentação detalhada por favor siga o** [**link**](http://client.lsports.eu/OddService/Documentation) **abaixo**

**Se tiver qualquer feedback sobre o nosso documento de conexão ou se precisar de suporte, por favor contacte o nosso contacto de vendas,**\
**LSports**
