protected override void OnConnected() { Logger.Get <ISCClient>().LogInformation("Connection to LoginISC has been established."); var gsConfig = ContextBase.GetInstance <GameContext>().GameConfig.GameServerConfig; using (var packet = new NetPacket()) { packet.Write((short)OpCode.REGISTER_GS); packet.Write(gsConfig.VirtualGameServerId); packet.Write(gsConfig.GameServerId); packet.Write(gsConfig.GroupId); packet.Write(gsConfig.DisplayNo); packet.Write(gsConfig.Name); packet.Write(gsConfig.ApiUrl); packet.Write(gsConfig.ProxyGameServerIp); packet.Write(gsConfig.ProxyGameServerPort); packet.Write(gsConfig.IsMaintenance); packet.Write(gsConfig.PkEnabled); packet.Write(gsConfig.TimeZone); packet.Write(gsConfig.StateCode); packet.Write(gsConfig.IsRecommend); Send(packet); } }
static void Main(string[] args) { using (var gameCtx = ContextBase.GetInstance <GameContext>()) using (var gameWPDListener = new WPDGameListener()) using (var ISC = new ISCServer()) using (var gameServer = new PhotonGameServer()) using (DatabaseService.GetContext()) using (var loginServerClient = new ISCClient()) { gameCtx.AddService(gameServer); gameCtx.AddService(loginServerClient); gameWPDListener.StartListening(); ISC.Start(); gameServer.Start(); gameCtx.SetStatus("Connecting to ISC..."); loginServerClient.Connect(); gameCtx.SetStatus("Listening"); while (true) { string inp = Console.ReadLine(); if (inp.Equals("exit")) { break; } } loginServerClient.Disconnect(); gameServer.Stop(); ISC.Stop(); gameWPDListener.StopListening(); } }
public override WPDResponse Handle() { return(new GameAssetBundlesResponse { GameAssetBundles = ContextBase.GetInstance <LoginContext>().GameAssetBundles.ToArray() }); }
static void Main(string[] args) { using (var loginCtx = ContextBase.GetInstance <LoginContext>()) using (var loginWPDListener = new WPDLoginListener()) using (var ISC = new ISCServer()) using (DatabaseService.GetContext()) { loginCtx.AddService(ISC); loginWPDListener.StartListening(); ISC.Start(); loginCtx.SetStatus("Listening"); while (true) { string inp = Console.ReadLine(); if (inp.Equals("exit")) { break; } } ISC.Stop(); loginWPDListener.StopListening(); } }
public override WPDResponse Handle() { return(new StageFarmVersionResponse { StageFarmVersion = ContextBase.GetInstance <GateContext>().GateConfig.StageFarmVersion }); }
public override WPDResponse Handle() { return(new ImageResourcesResponse { ImageResources = ContextBase.GetInstance <LoginContext>().ImageResources.ToArray() }); }
public override WPDResponse Handle() { return(new GameServersResponse { GameServerGroups = ContextBase.GetInstance <LoginContext>().LoginConfig.GameServerGroups, GameServers = ContextBase.GetInstance <LoginContext>().GameServers.Select(gs => gs.Value).ToArray() }); }
public ISCServer() { Configuration.Host = ContextBase.GetInstance <GameContext>().GameConfig.ISCServerHost; Configuration.Port = ContextBase.GetInstance <GameContext>().GameConfig.ISCServerPort; Configuration.Blocking = false; Configuration.BufferSize = 8192; Configuration.Backlog = 5; Configuration.MaximumNumberOfConnections = 5; }
protected override void OnClientDisconnected(LoginISCConnection connection) { Logger.Get <ISCServer>().LogInformation($"{connection.Socket.RemoteEndPoint.ToString()} disconnected from ISCServer."); if (ContextBase.GetInstance <LoginContext>().GameServers.TryGetValue(connection, out GameServer gameServer)) { Logger.Get <ISCServer>().LogInformation($"GameServer {gameServer.Name} with id {gameServer.GameServerId} deregistered."); ContextBase.GetInstance <LoginContext>().GameServers.Remove(connection); } }
public override INetPacketStream Handle(NetUser connection, INetPacketStream stream) { var userId = stream.Read <string>(); var accessToken = stream.Read <string>(); ContextBase.GetInstance <GameContext>().LoginSessions.Add(new LoginSession { User = new User { UserId = userId, UserAccessToken = accessToken } }); return(null); }
public override WPDResponse Handle() { var supportedLanguages = new List <SupportedLanguage>(); foreach (var clientText in ContextBase.GetInstance <LoginContext>().ClientTexts) { supportedLanguages.Add(new SupportedLanguage { LanguageId = clientText.languageId, MaintenanceInfoUrl = string.Empty }); } return(new SupportedLanguagesResponse { DefaultLanguageId = ContextBase.GetInstance <LoginContext>().LoginConfig.DefaultLanguageId, SupportedLanguages = supportedLanguages.ToArray() }); }
public override WPDResponse Handle() { var session = ContextBase.GetInstance <GameContext>().GameSessions .Where(s => s.User.GameAccessToken == GameAccessToken).FirstOrDefault(); if (session == null) { return new GameMetaDatasResponse { Result = 1 } } ; return(new GameMetaDatasResponse { GameDatas = ContextBase.GetInstance <GameContext>().CompressedGameDatas }); }
static void Main(string[] args) { using (var loginCtx = ContextBase.GetInstance <GateContext>()) using (var gateWPDListener = new WPDGateListener()) { gateWPDListener.StartListening(); loginCtx.SetStatus("Listening"); while (true) { string inp = Console.ReadLine(); if (inp.Equals("exit")) { break; } } gateWPDListener.StopListening(); } }
public override WPDResponse Handle() { var clientText = ContextBase.GetInstance <LoginContext>().ClientTexts.FirstOrDefault(t => t.languageId == (int)LanguageId); if (clientText == null) { clientText = ContextBase.GetInstance <LoginContext>().ClientTexts.FirstOrDefault(); } if (clientText == null) { return new ClientTextMetaDatasResponse() { Result = 1, ErrMsg = "Server has no languages loaded." } } ; return(new ClientTextMetaDatasResponse { ClientTexts = WPDUtil.ZipToBase64(clientText.SerializeBase64String()) }); }
protected override void OnClientDisconnected(PhotonGameConnection connection) { var session = ContextBase.GetInstance <GameContext>().GameSessions .Where(s => s.Connection == connection) .FirstOrDefault(); using (var dbCtx = DatabaseService.GetContext()) { var hero = dbCtx.Heros .Where(h => h.Id == session.SelectedPlayCharacter) .FirstOrDefault(); var character = session.AccountHeros .Where(h => h.AccountHeroId == session.SelectedPlayCharacter) .FirstOrDefault(); hero.X = character.Position.X; hero.Y = character.Position.Y; hero.Z = character.Position.Z; hero.RotationY = character.RotationY; dbCtx.SaveChanges(); } // disconnect user to other clients GameContext.GameSessions .Where(s => s.Connection != null && s.Connection != connection) .ToList() .ForEach(s => s.Connection.SendEvent(new SEBHeroExitEventBody { accountHeroId = session.SelectedPlayCharacter }, ServerEventName.kEvent_HeroExit)); GameContext.GameSessions.Remove(session); Logger.Get <PhotonGameServer>().LogInformation($"{connection.Socket.RemoteEndPoint.ToString()} disconnected from GameServer."); }
public override INetPacketStream Handle(NetUser connection, INetPacketStream stream) { var ctx = ContextBase.GetInstance <LoginContext>(); var gameServer = new GameServer { VirtualGameServerId = stream.Read <int>(), GameServerId = stream.Read <int>(), GroupId = stream.Read <int>(), DisplayNo = stream.Read <int>(), Name = stream.Read <string>(), ApiUrl = stream.Read <string>(), ProxyGameServerIp = stream.Read <string>(), ProxyGameServerPort = stream.Read <int>(), IsMaintenance = stream.Read <bool>(), PkEnabled = stream.Read <bool>(), TimeZone = stream.Read <string>(), StateCode = stream.Read <int>(), IsRecommend = stream.Read <bool>() }; var packet = new NetPacket(); packet.Write((short)OpCode.REGISTER_GS); if (ctx.GameServers.Values.Any(g => g.GameServerId == gameServer.GameServerId || g.VirtualGameServerId == gameServer.VirtualGameServerId)) { packet.Write(false); Logger.Get <RegisterGameServerHandler>().LogWarning($"GameServer registration for {gameServer.Name} with id {gameServer.GameServerId} was rejected."); } else { ctx.GameServers.Add(connection, gameServer); packet.Write(true); Logger.Get <RegisterGameServerHandler>().LogInformation($"GameServer registration for {gameServer.Name} with id {gameServer.GameServerId} was granted."); } return(packet); }
public override WPDResponse Handle() { var loginCtx = ContextBase.GetInstance <LoginContext>(); var account = default(Account); using (var ctx = DatabaseService.GetContext()) { account = ctx.Accounts .FirstOrDefault(a => a.UserId == UserId && a.UserSecret == UserSecret); } if (account == null) { return new LoginResponse { Result = 1 } } ; var accessToken = new JObject(); accessToken["userId"] = account.UserId; accessToken["accessSecret"] = Utils.RandomString(20); accessToken["checkCode"] = Utils.RandomString(32); accessToken["platform"] = "android"; var user = new User { UserType = 1, UserId = account.UserId, UserSecret = account.UserSecret, UserAccessToken = accessToken.ToString(), LastVirtualGameServer = 0 }; var previousSession = loginCtx.Sessions.FirstOrDefault(s => s.User.UserId == user.UserId && s.User.UserSecret == user.UserSecret); if (previousSession != null) { loginCtx.Sessions.Remove(previousSession); } loginCtx.Sessions.Add(new LoginSession { User = user }); // Register user to game servers using (var packet = new NetPacket()) { packet.Write((short)OpCode.REGISTER_USER); packet.Write(user.UserId); packet.Write(user.UserAccessToken); loginCtx.GetService <ISCServer>().SendTo(loginCtx.GameServers.Select(d => d.Key), packet); } return(new LoginResponse { UserType = user.UserType, AccessToken = user.UserAccessToken, LastVirtualGameServerId = user.LastVirtualGameServer }); }
public WPDGateListener() : base(ContextBase.GetInstance <GateContext>().GateConfig.WPDListenPrefix) { }
public ISCClient() { Configuration.Host = ContextBase.GetInstance <GameContext>().GameConfig.LoginISCHost; Configuration.Port = ContextBase.GetInstance <GameContext>().GameConfig.LoginISCPort; Configuration.BufferSize = 8192; }
public WPDLoginListener() : base(ContextBase.GetInstance <LoginContext>().LoginConfig.WPDListenPrefix) { }