Example #1
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Press Enter to Connect");
            Console.ReadLine( );

            //var messageDispatcher = new XDocumentMessageDispatcher();
            var messageDispatcher = new JsonMessageDispatcher();

            messageDispatcher.Bind <MessageHandler>( );


            var endpoint = new IPEndPoint(IPAddress.Loopback, 9000);

            messageDispatcher.Bind(Channel);
            await Channel.ConnectAsync(endpoint).ConfigureAwait(false);

            //_ = Task.Run( ( ) => HBLoop( 1 ) );

            var basket = new SubmitBasketRequest {
                Id      = "TXN0007",
                POSData = new POSData {
                    Id = $"POS{POSId}"
                }
            };
            await Channel.SendAsync(basket).ConfigureAwait(false);

            await Task.Delay(1000);

            Channel.Close( );
            Console.WriteLine("Client Closed Channel");

            Console.ReadLine( );
        }
Example #2
0
        public static void SendLoginResult(string account, string node_name, uint session, LoginResult lr)
        {
            JsonMessageLoginResult reply = new JsonMessageLoginResult();

            reply.m_Account = account;
            reply.m_Result  = (int)lr;
            JsonMessageDispatcher.SendDcoreMessage(LoginSystem.Instance.SvrAPI, node_name, reply, session);
        }
Example #3
0
        private void AlreadyOnline(ulong guid)
        {
            var      data_scdr = LobbyServer.Instance.DataProcessScheduler;
            UserInfo user      = data_scdr.GetUserInfo(guid);

            //处理账号重复登录的问题:根据玩家当前状态分别处理
            if (user.CurrentState == UserState.Quit)
            {
                //GameClient中途退出,玩家状态为Quit
                user.BillingPlayer = billing_player_;
                user.NodeName      = NodeName;
                user.LeftLife      = UserInfo.LifeTimeOfNoHeartbeat;
                JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo();
                userInfoMsg.m_Account = Account;
                userInfoMsg.m_Guid    = user.Guid;
                userInfoMsg.m_Nick    = user.Nickname;
                userInfoMsg.m_Level   = user.Level;
                userInfoMsg.m_Sign    = user.Sign;
                JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg);
                LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName);
                //向LobbyClient发送断线重连消息
                JsonMessageUserQuitRoom uqrMsg = new JsonMessageUserQuitRoom();
                uqrMsg.m_Guid      = user.Guid;
                uqrMsg.m_RoomID    = user.CurrentRoomID;
                uqrMsg.m_IsEndQuit = false;
                JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, user.NodeName, uqrMsg);
                Next("BillingOnline", user);
            }
            else if (user.CurrentState == UserState.Game && user.LeftLife <= 0)
            {
                //LobbyClient中途退出,GameClient仍在,玩家状态为Game
                //应验证LobbyClient是同一个IP
                user.BillingPlayer = billing_player_;
                user.NodeName      = NodeName;
                user.LeftLife      = UserInfo.LifeTimeOfNoHeartbeat;
                JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo();
                userInfoMsg.m_Account = Account;
                userInfoMsg.m_Guid    = user.Guid;
                userInfoMsg.m_Nick    = user.Nickname;
                userInfoMsg.m_Level   = user.Level;
                userInfoMsg.m_Sign    = user.Sign;
                JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg);
                LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName);
                Next("BillingOnline", user);
            }
            else
            {
                //向第二个登录的玩家返回重复登录的错误信息
                JsonMessageAccountRepeatLogin accRepeatLoginMsg = new JsonMessageAccountRepeatLogin();
                accRepeatLoginMsg.m_Account = Account;
                JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, accRepeatLoginMsg);

                string errorMsg = "Account already online : " + Account;
                LogSys.Log(LOG_TYPE.ERROR, errorMsg);
                Next("End");
            }
        }
Example #4
0
        private void MessageInitiate(PBMessenger messenger)
        {
            messenger.AddChannel((byte)CoreMessageTypeExtend.kBilling,
                                 DashFire.Billing.MessageMapping.Query,
                                 DashFire.Billing.MessageMapping.Query);

            JsonMessageDispatcher.RegisterMessageHandler((int)JsonMessageID.Login, typeof(JsonMessageLogin), OnLogin);
            JsonMessageDispatcher.RegisterMessageHandler((int)JsonMessageID.CYPConfirmResult, typeof(JsonMessageCYPConfirmResult), ForwardToLoginSession);
            JsonMessageDispatcher.RegisterMessageHandler((int)JsonMessageID.CreateNick, typeof(JsonMessageCreateNick), ForwardToLoginSession);
        }
Example #5
0
        public override void OnMessage(JsonMessage msg)
        {
            var reply = msg as JsonMessageCreateNick;

            if (LobbyConfig.DataStoreAvailable)
            {
                var dsc = LobbyServer.Instance.DataStoreConnector;
                dsc.Load <DS_Nickname>(reply.m_Nick, (e, d) => LoadNicknameCallback(e, d, reply.m_Nick));
            }
            else
            {
                var data_scdr = LobbyServer.Instance.DataProcessScheduler;
                var guid      = data_scdr.GetGuidByNick(reply.m_Nick);
                if (guid == 0)
                {
                    JsonMessageCreateNickResult cnResultMsg = new JsonMessageCreateNickResult();
                    cnResultMsg.m_Account = Account;
                    cnResultMsg.m_Result  = (int)CreateNickResult.NICK_SUCCESS;
                    cnResultMsg.m_Nick    = reply.m_Nick;
                    JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, cnResultMsg);

                    //创建新的玩家角色
                    ++s_tempguid_;
                    var user = data_scdr.NewUserInfo();
                    user.BillingPlayer = billing_player_;
                    user.Guid          = s_tempguid_;
                    user.Account       = Account;
                    user.Nickname      = reply.m_Nick;
                    user.NodeName      = NodeName;
                    user.Sign          = "Dash Fire";
                    user.LeftLife      = UserInfo.LifeTimeOfNoHeartbeat;
                    data_scdr.DoUserLogin(user);

                    JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo();
                    userInfoMsg.m_Account = user.Account;
                    userInfoMsg.m_Guid    = user.Guid;
                    userInfoMsg.m_Nick    = user.Nickname;
                    userInfoMsg.m_Level   = user.Level;
                    userInfoMsg.m_Sign    = user.Sign;
                    JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg);
                    LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName);

                    Next("BillingOnline", user);
                }
                else
                {
                    LogSys.Log(LOG_TYPE.ERROR, "Duplicated nickname: {0}", reply.m_Nick);
                    JsonMessageCreateNickResult cnResultMsg = new JsonMessageCreateNickResult();
                    cnResultMsg.m_Account = Account;
                    cnResultMsg.m_Result  = (int)CreateNickResult.NICK_REPEAT_ERROR;
                    cnResultMsg.m_Nick    = reply.m_Nick;
                    JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, cnResultMsg);
                }
            }
        }
Example #6
0
        public override void Run()
        {
            JsonMessageCYPConfirm request = new JsonMessageCYPConfirm();

            request.m_Account = Account;
            JsonMessageDispatcher.SendDcoreMessage(
                LoginSystem.Instance.SvrAPI,
                NodeName,
                request,
                Session);

            Pending();
        }
Example #7
0
        public void CreateNickNameAuto()
        {
            //直接指定玩家账号为玩家昵称
            string autoNickname = Account;

            if (LobbyConfig.DataStoreAvailable)
            {
                var dsc = LobbyServer.Instance.DataStoreConnector;
                dsc.Load <DS_Nickname>(autoNickname, (e, d) => LoadNicknameCallbackAuto(e, d, autoNickname));
                Pending();
            }
            else
            {
                var data_scdr = LobbyServer.Instance.DataProcessScheduler;
                var guid      = data_scdr.GetGuidByNick(autoNickname);
                if (guid == 0)
                {
                    //创建新的玩家角色
                    ++s_tempguid_;
                    var user = data_scdr.NewUserInfo();
                    user.BillingPlayer = billing_player_;
                    user.Guid          = s_tempguid_;
                    user.Account       = Account;
                    user.Nickname      = autoNickname;
                    user.NodeName      = NodeName;
                    user.Sign          = "Dash Fire";
                    user.LeftLife      = UserInfo.LifeTimeOfNoHeartbeat;
                    data_scdr.DoUserLogin(user);

                    JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo();
                    userInfoMsg.m_Account = user.Account;
                    userInfoMsg.m_Guid    = user.Guid;
                    userInfoMsg.m_Nick    = user.Nickname;
                    userInfoMsg.m_Level   = user.Level;
                    userInfoMsg.m_Sign    = user.Sign;
                    JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg);
                    LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName);

                    Next("BillingOnline", user);
                }
                else
                {
                    //理论上不会出现重复昵称
                    string errorMsg = "Duplicated nickname:" + autoNickname;
                    LogSys.Log(LOG_TYPE.ERROR, errorMsg);
                    Next("End", GetType().Name, errorMsg);
                }
            }
        }
Example #8
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Press Enter to Connect");
            Console.ReadLine();

            //var messageDispatcher = new XDocumentMessageDispatcher();
            var messageDispatcher = new JsonMessageDispatcher();

            messageDispatcher.Bind <MessageHandler>();

            try
            {
                var endpoint = new IPEndPoint(IPAddress.Loopback, 9000);
                messageDispatcher.Bind(Channel);
                await Channel.ConnectAsync(endpoint).ConfigureAwait(false);

                _ = Task.Run(() => HBLoop(-1));
                Console.WriteLine("Client Running");


                Console.WriteLine("Press Enter to Send Basket");
                Console.ReadLine();

                var submitBasket = new SubmitBasketRequest
                {
                    Id      = Guid.NewGuid().ToString(),
                    POSData = new POSData
                    {
                        Id = $"POS{POSId}"
                    },
                    POSTransactionNumber = "POS_TXID_0001"
                };

                await Channel.SendAsync(submitBasket).ConfigureAwait(false);
            }
            catch (Exception _e)
            {
                Console.WriteLine($"Client Exception: {_e}");
            }
            Console.ReadLine();
        }
Example #9
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Press Enter to Connect");
            Console.ReadLine( );

            //var messageDispatcher = new XDocumentMessageDispatcher();
            var messageDispatcher = new JsonMessageDispatcher();

            messageDispatcher.Bind <MessageHandler>( );

            try {
                var endpoint = new IPEndPoint(IPAddress.Loopback, 9000);
                messageDispatcher.Bind(Channel);
                await Channel.ConnectAsync(endpoint).ConfigureAwait(false);

                Console.WriteLine("Client Running");
                _ = Task.Run(() => HBLoop(-1));
            } catch (Exception _e) {
                Console.WriteLine($"Client Exception: {_e}");
            }
            Console.ReadLine( );
        }
Example #10
0
        private void NextGuidCallback(string error, long guid, string nickname)
        {
            var data_scdr = LobbyServer.Instance.DataProcessScheduler;

            if (null == error)
            {
                UserInfo user = data_scdr.NewUserInfo();
                user.BillingPlayer = billing_player_;
                user.Account       = Account;
                user.Guid          = (ulong)guid; //从数据库得到的guid起始值为0,+1使其从1开始
                user.Level         = 1;
                user.Nickname      = nickname;
                user.Sign          = "Dash Fire DS";
                user.NodeName      = NodeName;
                user.LeftLife      = UserInfo.LifeTimeOfNoHeartbeat;
                data_scdr.DoUserLogin(user);
                //一个新玩家信息创建完成,保存到数据库中
                var ds_thread = LobbyServer.Instance.DataStoreThread;
                ds_thread.QueueAction(ds_thread.DSSaveAccount, user);
                ds_thread.QueueAction(ds_thread.DSSaveUserInfo, user);
                //向客户端发送玩家数据
                JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo();
                userInfoMsg.m_Account = user.Account;
                userInfoMsg.m_Guid    = user.Guid;
                userInfoMsg.m_Nick    = user.Nickname;
                userInfoMsg.m_Level   = user.Level;
                userInfoMsg.m_Sign    = user.Sign;
                JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg);
                LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,User New! guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName);

                Next("BillingOnline", user);
            }
            else
            {
                Next("End", GetType().Name, error);
            }
        }
Example #11
0
 private void LoadNicknameCallback(string error, DS_Nickname data, string nickname)
 {
     if (null != error)
     {
         LogSys.Log(LOG_TYPE.ERROR, "Load {0} data failed: {1}", nickname, error);
         //若数据库中该昵称不存在,则可以创建新的
         JsonMessageCreateNickResult cnResultMsg = new JsonMessageCreateNickResult();
         cnResultMsg.m_Account = Account;
         cnResultMsg.m_Result  = (int)CreateNickResult.NICK_SUCCESS;
         cnResultMsg.m_Nick    = nickname;
         JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, cnResultMsg);
         DSCreateNewUser(nickname);
     }
     else
     {
         //若数据库中已有该昵称,则向客户端提示错误
         LogSys.Log(LOG_TYPE.ERROR, "Duplicated nickname: {0}", nickname);
         JsonMessageCreateNickResult cnResultMsg = new JsonMessageCreateNickResult();
         cnResultMsg.m_Account = Account;
         cnResultMsg.m_Result  = (int)CreateNickResult.NICK_REPEAT_ERROR;
         cnResultMsg.m_Nick    = nickname;
         JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, cnResultMsg);
     }
 }
Example #12
0
        private void LoadUserInfoCallback(string error, DS_UserInfo data, long guid)
        {
            var data_scdr = LobbyServer.Instance.DataProcessScheduler;

            if (null != error)
            {
                Next("End", GetType().Name, error);
            }
            else
            {
                LogSys.Log(LOG_TYPE.INFO, "Load {0} data success: {1}", guid, data.Account);
                UserInfo user = data_scdr.NewUserInfo();
                user.BillingPlayer = billing_player_;
                user.Guid          = (ulong)data.Guid;
                user.Account       = data.Account;
                user.Nickname      = data.Nickname;
                user.Level         = data.Level;
                user.ExpPoints     = data.Exp;
                user.Gold          = data.Gold;
                user.NodeName      = NodeName;
                user.LeftLife      = UserInfo.LifeTimeOfNoHeartbeat;
                data_scdr.DoUserLogin(user);
                ///////////////////////
                //向客户端发送玩家数据
                JsonMessageUserInfo userInfoMsg = new JsonMessageUserInfo();
                userInfoMsg.m_Account = user.Account;
                userInfoMsg.m_Guid    = user.Guid;
                userInfoMsg.m_Nick    = user.Nickname;
                userInfoMsg.m_Level   = user.Level;
                userInfoMsg.m_Sign    = user.Sign;
                JsonMessageDispatcher.SendDcoreMessage(LobbyServer.Instance.SvrAPI, NodeName, userInfoMsg);
                LogSys.Log(LOG_TYPE.DEBUG, "DoAccountLogin,User New! guid:{0},nick:{1},acc:{2},node:{3}", user.Guid, user.Nickname, user.Account, user.NodeName);

                Next("BillingOnline", user);
            }
        }
 public WebSocketChannelManager(JsonMessageDispatcher messageDispatcher)
 {
     MessageDispatcher = messageDispatcher;
 }