Ejemplo n.º 1
0
            public void HandleMessage(AcceptExchangeRequest message)
            {
                //the other player accepted our request, send data to him
                DataMessageBuilder builder = new DataMessageBuilder(message.senderPlayerId);

                builder.SetGoalFields(Player.game.Fields.Cast<Common.Schema.Field>().Where(f => f is Common.Schema.GoalField).Cast<Common.Schema.GoalField>());
                builder.SetTaskFields(Player.game.Fields.Cast<Common.Schema.Field>().Where(f => f is TaskField).Cast<TaskField>());
                builder.SetPieces(Player.game.Pieces);
                builder.SetPlayerLocation(Player.game.Location);

                var data = builder.GetXml();
                Player.Send(data);
                //do not call play, we call play already when we get our data
            }
        public async Task HandleMessage(AuthorizeKnowledgeExchange message, Socket handler)
        {
            if (!ValidateMessage(message))
            {
                return;
            }
            var playerFrom = Players.Where(p => p.Guid == message.playerGuid).Single();
            var playerTo   = Players.Where(p => p.Id == message.withPlayerId).SingleOrDefault();

            await Task.Delay((int)GameMasterClient.Settings.ActionCosts.KnowledgeExchangeDelay);

            if (playerTo == null)
            {
                var permanentReject = new RejectKnowledgeExchange()
                {
                    permanent = true,
                    playerId  = playerFrom.Id
                };
                GameMasterClient.Connection.SendFromClient(handler, XmlMessageConverter.ToXml(permanentReject));
                return;
            }

            if (playerTo.OpenExchangeRequests.Contains(playerFrom.Id))
            {
                var accept = new AcceptExchangeRequest()
                {
                    playerId       = playerTo.Id,
                    senderPlayerId = playerFrom.Id
                };

                playerTo.OpenExchangeRequests.Remove(playerFrom.Id);
                GameMasterClient.Connection.SendFromClient(handler, XmlMessageConverter.ToXml(accept));
                return;
            }

            var response = new KnowledgeExchangeRequest()
            {
                playerId       = playerTo.Id,
                senderPlayerId = playerFrom.Id
            };

            playerFrom.OpenExchangeRequests.Add(playerTo.Id);
            GameMasterClient.Connection.SendFromClient(handler, XmlMessageConverter.ToXml(response));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Accept an exchange request.
        /// <param name="apiKey">Your apiKey.</param>
        /// <param name="apiSecret">Your apiSecretKey.</param>
        /// <param name="address"/>The address that funds the source amount.</parm>
        /// <param name="privateKey">The privateKey of the sending address.</param>
        /// </summary>
        /// <returns></returns>
        public async Task <Result <bool, ErrorResponse> > AcceptExchangeRequestAsync(
            string apiKey,
            string apiSecret,
            string address,
            string privateKey,
            AcceptExchangeRequest exchangeRequest)
        {
            #region
            IEnumerable <ValidationResult> validation = exchangeRequest.Validate();

            if (validation.Any())
            {
                foreach (var item in validation)
                {
                    throw new ArgumentNullException(item.ErrorMessage);
                }
            }

            if (string.IsNullOrWhiteSpace(address))
            {
                throw new ArgumentNullException(address);
            }
            else if (string.IsNullOrWhiteSpace(privateKey))
            {
                throw new ArgumentNullException(nameof(privateKey));
            }
            #endregion

            string token = getAuthToken(apiKey, apiSecret);

            var    result     = new Result <bool, ErrorResponse>();
            string requestUri = $"{mEnv.BaseUrl}/v1/ExchangeRequests/{exchangeRequest.ID}";

            string     reserveTxnSinatrue  = null;
            string     executeTxnSignature = null;
            string     reclaimTxnSignature = null;
            BigInteger nonce = BigInteger.Parse(GluwaService.GetNonceString());

            if (exchangeRequest.Conversion.Value.IsSourceCurrencyBtc())
            {
                BtcTxnSignature txnSignature = await getBtcTxnSignaturesAsync(
                    exchangeRequest.Conversion.Value.ToSourceCurrency(),
                    address,
                    exchangeRequest.SourceAmount,
                    exchangeRequest.Fee,
                    exchangeRequest.DestinationAddress,
                    exchangeRequest.ReservedFundsAddress,
                    exchangeRequest.ReservedFundsRedeemScript,
                    privateKey);

                reserveTxnSinatrue  = txnSignature.ReserveTxnSignature;
                executeTxnSignature = txnSignature.ExecuteTxnSignature;
                reclaimTxnSignature = txnSignature.ReclaimTxnSignature;
            }
            else
            {
                BigInteger convertExpiryBlockNumber = BigInteger.Parse(exchangeRequest.ExpiryBlockNumber.ToString());

                reserveTxnSinatrue = getGluwacoinReserveTxnSignature(
                    exchangeRequest.Conversion.Value.ToSourceCurrency(),
                    address,
                    exchangeRequest.SourceAmount,
                    exchangeRequest.Fee,
                    exchangeRequest.DestinationAddress,
                    exchangeRequest.Executor,
                    nonce,
                    convertExpiryBlockNumber,
                    privateKey);
            }

            PatchExchangeRequest bodyParams = new PatchExchangeRequest()
            {
                SendingAddress      = address,
                ReserveTxnSignature = reserveTxnSinatrue,
                Nonce = nonce.ToString(),
                ExecuteTxnSignature = executeTxnSignature,
                ReclaimTxnSignature = reclaimTxnSignature
            };

            string        json    = bodyParams.ToJson();
            StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

            HttpRequestMessage request = new HttpRequestMessage
            {
                Method     = new HttpMethod("PATCH"),
                RequestUri = new Uri(requestUri),
                Content    = content
            };

            try
            {
                using (HttpClient httpClient = new HttpClient())
                {
                    httpClient.DefaultRequestHeaders.Add(AUTHORIZATION, $"{BASIC} {token}");

                    using (HttpResponseMessage response = await httpClient.SendAsync(request))
                    {
                        if (response.IsSuccessStatusCode)
                        {
                            result.IsSuccess = true;
                            result.Data      = true;

                            return(result);
                        }

                        string contentString = await response.Content.ReadAsStringAsync();

                        result.Error = ResponseHandler.GetError(response.StatusCode, requestUri, contentString);
                    }
                }
            }
            catch (HttpRequestException)
            {
                result.IsSuccess = false;
                result.Error     = ResponseHandler.GetExceptionError();
            }

            return(result);
        }