// Copyright © 2017-2018 Atomic Software, LLC. All Rights Reserved.
// See LICENSE.md for full license information.
using Atom.Core;
using Atom.Core.Diagnostics;
using Atom.Core.Networking;
using Atom.Core.Networking.Messages.Structures.Local;
namespace Atom.WorldManagerServer
{
internal class WorldManagerServer : Server
{
///
/// Listens for remote connections made to the server.
///
public Listener RemoteListener { get; private set; }
///
/// Listens for local connections made to the server.
///
public Listener LocalListener { get; private set; }
///
/// Represents the connection to the login server.
///
public Client LoginServer { get; private set; }
protected override void PerformStartActions()
{
Program.ShinePath = Config.GetString("DATA", "Path");
Program.LoadSHNs();
Program.LoadShineTables();
RemoteListener = new Listener(Config.GetString("NET", "RemoteListenIP"), Config.GetInt32("NET", "RemoteListenPort"));
LocalListener = new Listener(Config.GetString("NET", "LocalListenIP"), Config.GetInt32("NET", "LocalListenPort"));
LoginServer = new Client(Config.GetString("NET", "LoginConnectIP"), Config.GetInt32("NET", "LoginConnectPort"));
RegisterWorld();
}
private void RegisterWorld()
{
if (LoginServer == null)
{
Log.CriticalError("Could not register the world because the login server connection does not exist");
return;
}
while (!LoginServer.IsConnected || LoginServer.EncryptionTable == null)
{
// just a wait block, ignore this.
}
new PROTO_NC_LOCAL_REGISTERWORLD_REQ(Config.GetByte("SERVER", "Number"), Config.GetString("SERVER", "Name"), Config.GetString("NET", "RemoteListenIP"), Config.GetInt32("NET", "RemoteListenPort")).SendLocal(LoginServer);
}
}
}