Quantcast
Channel: L2JBrasil RSS
Viewing all articles
Browse latest Browse all 543

Como o L2Acp funciona e como contribuir

$
0
0

English:

Spoiler


Portugês:
Este tutorial irá explicar Como o L2Acp funciona e como contribuir
 
Em primeiro lugar e acima de tudo deixe-me deixar algo claro.
 
Este é um projeto sob GPLv2. Quaisquer alterações ou modificações feitas no software precisam ser tornadas públicas sob a mesma licença para todos verem.

A principal razão que eu fiz este opensource é assim que as pessoas podem ajudar em troca de usá-lo gratuitamente.

Um exemplo seria o seguinte: Se você adaptar o código para l2j high five, você deve por lei torná-lo público.
Qualquer violação será relatada e os infractores terão de lidar com as questões legais.


Agora que estamos alinhá-los deixe-me falar com você sobre como a aplicação funciona.

Este é o descritivo de como é o fluxo de uma requisição ao sistema:
  • O usuário faz uma ação no site.
  • O pedido é enviado para o site e está sendo validado para autenticidade.
  • Se for válido, o site está enviando uma solicitação criptografada para o servidor api.
  • O api do servidor está validando o pedido e executa a ação.
  • Em seguida, responde ao site e o site exibe o resultado da ação para o usuário.

Front-end
 
As solicitações estão na pasta Requests no projeto da web.
 
Cada pedido estende a classe abstrata L2Request.
Aqui está o aspecto desta classe:
xklFP2U.png
 
Veja aqui que os pedidos têm uma chave de API (que você precisará alterar) e um id de solicitação.
O id do pedido é usado pelo servidor API para descobrir como ele deve processar o pedido.
Todas as propriedades extras devem ser adicionadas à classe estendida.
 
Para criar uma nova solicitação, você precisa estender L2Request e dar-lhe um id de pedido.
Aqui está um exemplo.
4ogxfcd.png
 
Como você pode ver o pedido de compra de item tem algumas properies, bem como um id de pedido que pode ser visto na base (9).
Isso é tudo o que você precisa fazer para criar uma solicitação de site para o servidor.

Agora, se essa solicitação precisa retornar algo mais que uma mensagem de confirmação (ou seja, alguns dados), então você também tem que criar uma classe de resposta que estende L2Response.

BuyItemRequest não precisa de uma resposta especial para que ele apenas responde com um L2Response.

Este é o aspecto do modelo de resposta:

zW501fQ.png
 
Eu só tenho dois códigos de resposta por enquanto. 200 para status ok e 500 para qualquer erro (há planejamento para estender que)
 
 
Quando a solicitação é enviada do site para o servidor, ela está sendo serializada para uma seqüência json e criptografada com AES256.
Como a criptografia é simétrica, é muito importante que você altere as chaves de criptografia fornecidas por padrão.
 
Para enviar a solicitação ao servidor, você precisa criar uma assinatura de método na interface IRequestService.
Deve ser assim:
ykdKfft.png
 
Todas as solicitações devem retornar Task <L2Reponse> na assinatura da interface. Se ele precisa retornar algo que estenda a resposta, então nós instanciamos de acordo.
 
Aqui você pode ver a implementação da funcionalidade de solicitação:
go3OWJW.png
 
As solicitações têm um método de extensão chamado SendPostRequest <T>. T é genérico e é substituído por respostas estendidas, se necessário.
O método de extensão serializará o modelo e enviará a solicitação e retornará o objeto de resposta do gameserver.
Observe aqui que o método precisa ser assíncrono à medida que o aguardamos. Programação assíncrono oferece melhor desempenho em C# se feito direito.
 
Veja como o ponto final do item de compra é exibido no site.
SJu6jJ3.png
 
Algumas coisas importantes:
O atributo HttpPost mostra que este endpoint aceita solicitações de postagem.
O atributo Rota mostra o caminho URL do pedido.
Async Task permite o processamento assíncrono da solicitação.
[FromBody] significa que o framework mapeará automaticamente o corpo do formulário para um modelo.
Return O conteúdo retorna uma string. No entanto, estou atualmente substituindo-os com retorno Json para retornar um objeto para respostas flexíveis.
 
O resto é bem direto.
 
Este é o aspecto do código jQuery para esta solicitação:
WQpUJxc.png
 
 
Server-side API
 
O servidor está aceitando solicitações do site.
As solicitações são registradas no enum L2ACPRequests no pacote com.elfocrash.l2acp.

Aqui está:
gj9ZcHs.png
 
Eles estão sendo transformados em uma matriz e usando o id de solicitação nós mapeá-los e iniciar o processo de processamento.

Todas as solicitações no servidor api estender L2ACPRequests (inconsistência de nome eu sei)
A substituição do método setContent permite obter valores do objeto json.
Aqui está como:
ZCjlgXe.png
 
Observe aqui que se é uma string, um int ou um qualquer que você precisa obtê-lo de acordo com o tipo.
Observe também aqui que você precisa ter o mesmo caso "Pascal", então você começa. ("Algo") como o modelo foi serializado no site.

As respostas estendem a classe do modelo L2ACPResponse.
Você só precisa estendê-lo e agora enviá-lo como está se você precisar retornar dados que não sejam uma mensagem de sucesso.

Aqui está a aparência de uma resposta estendida:
eiQINDq.png
 
Observe a nomeação propriedade. Eles devem ser pascal caso como eles serão mapeados para um modelo de site dinamicamente e C # está usando pascal caso.


Esta é a idéia principal sobre como funciona o L2ACP.

Se você tiver mais perguntas, por favor me avise.

Tenha em mente que eu estou fazendo protótipos e por isso muitas coisas não estão em versão finais e sim "working in progress" (em desenvolvimento)

Colabore adicionando "Star" e "Fork" aos projetos no GitHub.

https://github.com/Elfocrash/L2ACP-Web
https://github.com/Elfocrash/L2ACP-api
 
Obrigado!


Viewing all articles
Browse latest Browse all 543

Trending Articles