static void Main(string[] args) { while (true) { var loginStream = new LoginStream(args[0], int.Parse(args[1])); loginStream.LoginSuccess += (_, success) => { if (success) { WriteLine($"Login succeeded (accountID={loginStream.AccountID}). Requesting server list"); loginStream.RequestServerList(); } else { WriteLine("Login failed"); loginStream.Disconnect(); } }; loginStream.ServerList += (_, servers) => { servers.ForEach((serv, i) => WriteLine($"{i + 1}: {serv.Longname} ({serv.PlayersOnline} players online)")); int ret; while (!int.TryParse(Input("Server number"), out ret) || ret < 1 || servers.Count < ret) { } loginStream.Play(servers[ret - 1]); }; loginStream.PlaySuccess += (_, server) => { if (server == null) { WriteLine("Failed to connect to server. Try everything again."); loginStream.Disconnect(); return; } ConnectWorld(loginStream, server.Value); }; loginStream.Login(Input("Username"), Input("Password")); while (!loginStream.Disconnecting) { Task.Delay(100).Wait(); } } }
private void OnDestroy() { Debug.Log("Cleaning up subscriptions on exit"); if (login != null) { login.PlaySuccess -= OnPlaySuccess; login.LoginSuccess -= OnLoginSuccess; login.ServerList -= OnServerList; login.Disconnect(); } login = null; if (world != null) { world.CharacterList -= OnCharacterList; world.ChatServerList -= OnChatServerList; world.ZoneServer -= OnZoneServer; world.Disconnect(); } world = null; if (zone != null) { //try to camp out zone.SendCamp(); zone.ZoneEntry -= OnZoneEntry; zone.DeleteSpawn -= OnDeleteSpawn; zone.ChannelMessage -= OnChannelMessage; zone.SpawnHPUpdate -= OnSpawnHPUpdate; zone.SpawnPositionUpdate -= OnSpawnPositionUpdate; zone.PlayerPositionUpdateServer -= OnPlayerPositionUpdateServer; zone.Disconnect(); } zone = null; }