public async Task <string> PlayerLogin(string jsonRequest)
        {
            if (m_LocalNode == null)
            {
                return(m_LocalNode.GetJsonHelper().ToJsonString(new
                {
                    error_code = -1,
                    error_message = "Service is not available"
                }));
            }

            m_LocalNode.GetLogger().Info("call merchant api: player-login");

            dynamic req         = m_LocalNode.GetJsonHelper().ToJsonObject(jsonRequest);
            string  merchantUrl = req.merchant_url.ToString();

            m_LocalNode.GetLogger().Info("Player login - [" + req.merchant_code.ToString() + "] " + req.player_id.ToString());
            m_LocalNode.GetLogger().Info("Merchant URL - " + merchantUrl);

            dynamic ret = null;

            var apiReq = new
            {
                req.merchant_code,
                req.currency_code,
                req.player_id,
                req.login_token
            };

            try
            {
                var rawret = await RemoteCaller.Request <Tuple <int, string> >(merchantUrl + "/player/validate-login", apiReq, null, 10 * 1000);

                m_LocalNode.GetLogger().Info("3-Way Login Reply Code: " + rawret.Item1);
                ret = m_LocalNode.GetJsonHelper().ToJsonObject(rawret.Item2);
            }
            catch (Exception ex)
            {
                ret = null;
                m_LocalNode.GetLogger().Error("Three-Way Login Error - Failed to call merchant API: " + ex.Message);
            }

            if (ret == null)
            {
                return(null);
            }

            if (ret.error_code != 0)
            {
                m_LocalNode.GetLogger().Error("Three-Way Login Error: " + (ret == null ? "Failed to call merchant API" : ret.error_message));
                return(m_LocalNode.GetJsonHelper().ToJsonString(new
                {
                    error_code = -1,
                    error_message = "Three-Way Login Error"
                }));
            }

            return(m_LocalNode.GetJsonHelper().ToJsonString(ret));
        }
        public async Task <string> GetPlayerBalance(string jsonRequest)
        {
            if (m_LocalNode == null)
            {
                return(m_LocalNode.GetJsonHelper().ToJsonString(new
                {
                    error_code = -1,
                    error_message = "Service is not available"
                }));
            }

            //m_LocalNode.GetLogger().Info("call merchant api: get-player-balance");

            dynamic req         = m_LocalNode.GetJsonHelper().ToJsonObject(jsonRequest);
            string  merchantUrl = req.merchant_url.ToString();

            //m_LocalNode.GetLogger().Info("Merchant URL - " + merchantUrl);

            dynamic ret = null;

            var apiReq = new
            {
                req.merchant_code,
                req.currency_code,
                req.player_id
            };

            try
            {
                ret = await RemoteCaller.Request(merchantUrl + "/player/get-balance", apiReq, null, 10 * 1000);
            }
            catch (Exception ex)
            {
                ret = null;
                m_LocalNode.GetLogger().Error("Get Player Balance Error - Failed to call merchant API: " + ex.Message);
            }

            if (ret == null)
            {
                return(null);
            }

            if (ret.error_code != 0)
            {
                m_LocalNode.GetLogger().Error("Get Player Balance Error: " + (ret == null ? "Failed to call merchant API" : ret.error_message));
                return(m_LocalNode.GetJsonHelper().ToJsonString(new
                {
                    error_code = -1,
                    error_message = "Get Player Balance Error"
                }));
            }
            return(m_LocalNode.GetJsonHelper().ToJsonString(ret));
        }
        public async Task <string> CreditForSettling(string jsonRequest)
        {
            if (m_LocalNode == null)
            {
                m_LocalNode.GetLogger().Error("CreditForSettling Error: Service is not available");
                return(null);
            }
            ;

            //m_LocalNode.GetLogger().Info("call merchant api: credit-for-settling");

            dynamic req         = m_LocalNode.GetJsonHelper().ToJsonObject(jsonRequest);
            string  merchantUrl = req.merchant_url.ToString();

            //m_LocalNode.GetLogger().Info("Merchant URL - " + merchantUrl);

            dynamic ret = null;

            var apiReq = new
            {
                req.credit_uuid,
                req.bet_uuid,
                req.merchant_code,
                req.currency_code,
                req.player_id,
                req.round_id,
                req.bet_pool,
                req.credit_amount,
                req.bet_settle_time,
                req.request_times,
                req.is_cancelled
            };

            try
            {
                ret = await RemoteCaller.Request(merchantUrl + "/bet/credit-for-settling-bet", apiReq, 20 * 1000);
            }
            catch (Exception ex)
            {
                ret = null;
                m_LocalNode.GetLogger().Error("CreditForSettling Error - Failed to call merchant API: " + ex.Message);
            }

            if (ret == null)
            {
                return(null);
            }

            return(m_LocalNode.GetJsonHelper().ToJsonString(ret));
        }
        public async Task <string> CancelDebit(string jsonRequest)
        {
            if (m_LocalNode == null)
            {
                m_LocalNode.GetLogger().Error("CancelDebit Error: Service is not available");
                return(null);
            }
            ;

            //m_LocalNode.GetLogger().Info("call merchant api: debit-for-betting");

            dynamic req         = m_LocalNode.GetJsonHelper().ToJsonObject(jsonRequest);
            string  merchantUrl = req.merchant_url.ToString();

            //m_LocalNode.GetLogger().Info("Merchant URL - " + merchantUrl);

            dynamic ret = null;

            var apiReq = new
            {
                req.trans_uuid,
                req.debit_uuid,
                req.merchant_code,
                req.currency_code,
                req.amount
            };

            try
            {
                ret = await RemoteCaller.Request(merchantUrl + "/bet/cancel-debit", apiReq, null, 20 * 1000);
            }
            catch (Exception ex)
            {
                ret = null;
                m_LocalNode.GetLogger().Error("CancelDebit Error - Failed to call merchant API: " + ex.Message);
            }

            if (ret == null)
            {
                return(null);
            }

            return(m_LocalNode.GetJsonHelper().ToJsonString(ret));
        }
Пример #5
0
        public async Task CreditForBetting(RequestContext ctx)
        {
            ctx.Logger.Info("Credit for settling-bet...");

            string reqstr = ctx.Data.ToString();

            if (reqstr.Trim().Length <= 0)
            {
                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Invalid request"
                }));

                return;
            }

            dynamic req = ctx.JsonHelper.ToJsonObject(reqstr);

            ctx.Logger.Info("Create credit record in db...");

            var saveReq = new
            {
                bet_uuid      = req.bet_uuid,
                table_code    = req.table_code,
                shoe_code     = req.shoe_code,
                round_number  = req.round_number,
                bet_pool      = req.bet_pool,
                merchant_code = req.merchant_code,
                player_id     = req.player_id,
                pay_amount    = req.pay_amount
            };
            string dbReplyStr = await RemoteCaller.RandomCall(ctx.RemoteServices,
                                                              "transaction-data", "create-credit", ctx.JsonHelper.ToJsonString(saveReq));

            if (dbReplyStr.Trim().Length <= 0 || !dbReplyStr.Contains('{'))
            {
                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Failed to create credit record in db: " + dbReplyStr
                }));

                return;
            }

            ctx.Logger.Info("Call merchant site to credit...");

            dynamic dbReply = ctx.JsonHelper.ToJsonObject(dbReplyStr);
            string  apiUrl  = dbReply.request_url;

            var apiReq = new
            {
                dbReply.credit_uuid,
                req.bet_uuid,
                req.merchant_code,
                req.player_id,
                dbReply.round_id,
                req.bet_pool,
                credit_amount   = req.pay_amount,
                bet_settle_time = req.settle_time,
                is_cancelled    = false
            };
            dynamic ret = await RemoteCaller.Request(apiUrl, apiReq, 10 * 1000);

            if (ret == null)
            {
                ctx.Logger.Info("Failed to call credit function from merchant site");

                var updateReq = new
                {
                    dbReply.credit_uuid,
                    req.merchant_code,
                    req.player_id,
                    request_times  = 1,
                    is_success     = 0,
                    network_error  = 1,
                    response_error = 0
                };
                string dbReplyStr2 = await RemoteCaller.RandomCall(ctx.RemoteServices,
                                                                   "transaction-data", "update-credit", ctx.JsonHelper.ToJsonString(updateReq));

                dynamic dbReply2 = ctx.JsonHelper.ToJsonObject(dbReplyStr2);

                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Failed to call credit function from merchant site"
                }));
            }
            else
            {
                ctx.Logger.Info("Update credit record in db...");

                if (ret.error_code == 0)
                {
                    var updateReq = new
                    {
                        dbReply.credit_uuid,
                        req.merchant_code,
                        req.player_id,
                        request_times  = 1,
                        is_success     = 1,
                        network_error  = 0,
                        response_error = 0
                    };
                    string dbReplyStr2 = await RemoteCaller.RandomCall(ctx.RemoteServices,
                                                                       "transaction-data", "update-credit", ctx.JsonHelper.ToJsonString(updateReq));

                    if (String.IsNullOrEmpty(dbReplyStr2))
                    {
                        ctx.Logger.Info("Failed to update credit record in db");
                    }
                    else
                    {
                        dynamic dbReply2 = ctx.JsonHelper.ToJsonObject(dbReplyStr2);
                        ctx.Logger.Info("Update credit record in db - error code: " + dbReply2.error_code.ToString());
                    }
                }
                else
                {
                    var updateReq = new
                    {
                        dbReply.credit_uuid,
                        req.merchant_code,
                        req.player_id,
                        request_times  = 1,
                        is_success     = 0,
                        network_error  = 0,
                        response_error = ret.error_code
                    };
                    string dbReplyStr2 = await RemoteCaller.RandomCall(ctx.RemoteServices,
                                                                       "transaction-data", "update-credit", ctx.JsonHelper.ToJsonString(updateReq));

                    dynamic dbReply2 = ctx.JsonHelper.ToJsonObject(dbReplyStr2);
                }

                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(ret));
            }
        }
        public async Task PlayerLogin(RequestContext ctx)
        {
            string reqstr = ctx.Data.ToString();

            if (reqstr.Trim().Length <= 0)
            {
                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Invalid request"
                }));

                return;
            }

            dynamic req = ctx.JsonHelper.ToJsonObject(reqstr);

            string merchantUrl = await RemoteCaller.RandomCall(m_LocalNode.GetRemoteServices(),
                                                               "merchant-data", "get-merchant-url", req.merchant_code.ToString());

            if (String.IsNullOrEmpty(merchantUrl))
            {
                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Merchant API URL not found: " + req.merchant_code.ToString()
                }));

                return;
            }

            ctx.Logger.Info("Player login - [" + req.merchant_code.ToString() + "] " + req.player_id.ToString());
            ctx.Logger.Info("Merchant URL - " + merchantUrl);

            var apiReq = new
            {
                req.merchant_code,
                req.player_id,
                req.login_token
            };
            dynamic ret = await RemoteCaller.Request(merchantUrl + "/player/validate-login", apiReq, null, 10 * 1000);

            if (ret == null || ret.error_code != 0)
            {
                ctx.Logger.Error("Three-Way Login Error: " + (ret == null ? "Failed to call merchant API" : ret.error_message));
                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Three-Way Login Error"
                }));

                return;
            }

            var okay      = false;
            var sessionId = Guid.NewGuid().ToString();

            var dbhelper = m_LocalNode.GetDataHelper();

            using (var cnn = dbhelper.OpenDatabase(m_MainCache))
            {
                using (var cmd = cnn.CreateCommand())
                {
                    dbhelper.AddParam(cmd, "@session_id", sessionId);
                    dbhelper.AddParam(cmd, "@merchant_code", req.merchant_code);
                    dbhelper.AddParam(cmd, "@player_id", req.player_id);

                    cmd.CommandText = " update tbl_player_session "
                                      + " set session_id = @session_id , update_time = NOW() "
                                      + " where merchant_code = @merchant_code and player_id = @player_id ";

                    okay = cmd.ExecuteNonQuery() > 0;

                    if (!okay)
                    {
                        using (var cmd2 = cnn.CreateCommand())
                        {
                            dbhelper.AddParam(cmd2, "@session_id", sessionId);
                            dbhelper.AddParam(cmd2, "@merchant_code", req.merchant_code);
                            dbhelper.AddParam(cmd2, "@player_id", req.player_id);

                            cmd2.CommandText = " insert into tbl_player_session "
                                               + " ( session_id , merchant_code, player_id, update_time ) values "
                                               + " ( @session_id, @merchant_code, @player_id, NOW() ) ";

                            okay = cmd2.ExecuteNonQuery() > 0;
                        }
                    }
                }
            }

            if (!okay)
            {
                ctx.Logger.Error("Three-Way Login Failed!");
                await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
                {
                    error_code    = -1,
                    error_message = "Three-Way Login Failed"
                }));

                return;
            }

            var remoteServices = m_LocalNode.GetRemoteServices();

            var frontEndUrl  = RandomPickPublicServiceUrl(remoteServices, "table-info");
            var betServerUrl = RandomPickPublicServiceUrl(remoteServices, "accept-bet");

            await ctx.Session.Send(ctx.JsonHelper.ToJsonString(new
            {
                req.merchant_code,
                req.player_id,
                ret.player_balance,
                session_id    = sessionId,
                front_end     = frontEndUrl,
                bet_server    = betServerUrl,
                error_code    = 0,
                error_message = "Three-Way Login Okay"
            }));
        }