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( ); }
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); }
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"); } }
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); }
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); } } }
public override void Run() { JsonMessageCYPConfirm request = new JsonMessageCYPConfirm(); request.m_Account = Account; JsonMessageDispatcher.SendDcoreMessage( LoginSystem.Instance.SvrAPI, NodeName, request, Session); Pending(); }
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); } } }
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(); }
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( ); }
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); } }
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); } }
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; }