示例#1
0
        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();
                }
            }
        }
示例#2
0
    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;
    }