USE service_broker_db

GO

CREATE MESSAGE TYPE CalcularPosiciones VALIDATION = NONE;

GO

CREATE CONTRACT ContratoCalculoPosiciones
(
	CalcularPosiciones SENT BY INITIATOR
)

GO

-- Creamos un log para observar el funcionamiento del Service Broker
CREATE TABLE tblLog ( fecha DATETIME )

GO

-- El siguiente SP se encarga de llenar nuestra tabla de log
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[spCalcularPosiciones]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Handle UNIQUEIDENTIFIER;
DECLARE @MessageType SYSNAME;
DECLARE @fecha DATETIME;

RECEIVE TOP (1)
	@Handle = conversation_handle,
	@MessageType = message_type_name
	FROM [ColaRecepcion];

SELECT @Handle
IF(@Handle IS NOT NULL)
BEGIN
	-- Calcular puntos de todos los jugadores e insertarlos en la tabla de resultados
	-- Para efectos de prueba, también se puede inserta un registro en una tabla con efecto de crear un log de los movimientos del servicio
	INSERT INTO tblLog VALUES (GETDATE())
END
END

GO

CREATE QUEUE [ColaRecepcion];
ALTER QUEUE [ColaRecepcion] WITH ACTIVATION
(
	STATUS = ON,
	MAX_QUEUE_READERS = 1,
	PROCEDURE_NAME = spCalcularPosiciones,
	EXECUTE AS SELF
);

CREATE SERVICE [ServicioRecepcion] ON QUEUE [ColaRecepcion]([ContratoCalculoPosiciones]);

GO

CREATE QUEUE [ColaEmisor];
CREATE SERVICE [ServicioEmisor] ON QUEUE [ColaEmisor];

GO




