63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
import asyncio
|
|
import signal
|
|
import logging
|
|
|
|
try:
|
|
import uvloop
|
|
except ImportError:
|
|
uvloop = None
|
|
|
|
from src.farmer import Farmer
|
|
from src.server.outbound_message import NodeType
|
|
from src.server.server import ChiaServer
|
|
from src.types.peer_info import PeerInfo
|
|
from src.util.config import load_config, load_config_cli
|
|
from src.util.default_root import DEFAULT_ROOT_PATH
|
|
from src.util.logging import initialize_logging
|
|
from src.util.setproctitle import setproctitle
|
|
|
|
|
|
async def main():
|
|
root_path = DEFAULT_ROOT_PATH
|
|
net_config = load_config(root_path, "config.yaml")
|
|
config = load_config_cli(root_path, "config.yaml", "farmer")
|
|
try:
|
|
key_config = load_config(root_path, "keys.yaml")
|
|
except FileNotFoundError:
|
|
raise RuntimeError("Keys not generated. Run chia-generate-keys")
|
|
initialize_logging("Farmer %(name)-25s", config["logging"])
|
|
log = logging.getLogger(__name__)
|
|
setproctitle("chia_farmer")
|
|
|
|
farmer = Farmer(config, key_config)
|
|
|
|
harvester_peer = PeerInfo(
|
|
config["harvester_peer"]["host"], config["harvester_peer"]["port"]
|
|
)
|
|
full_node_peer = PeerInfo(
|
|
config["full_node_peer"]["host"], config["full_node_peer"]["port"]
|
|
)
|
|
ping_interval = net_config.get("ping_interval")
|
|
network_id = net_config.get("network_id")
|
|
server = ChiaServer(config["port"], farmer, NodeType.FARMER, ping_interval, network_id)
|
|
|
|
asyncio.get_running_loop().add_signal_handler(signal.SIGINT, server.close_all)
|
|
asyncio.get_running_loop().add_signal_handler(signal.SIGTERM, server.close_all)
|
|
|
|
_ = await server.start_server(farmer._on_connect, config)
|
|
await asyncio.sleep(1) # Prevents TCP simultaneous connect with harvester
|
|
_ = await server.start_client(harvester_peer, None, config)
|
|
_ = await server.start_client(full_node_peer, None, config)
|
|
|
|
farmer.set_server(server)
|
|
farmer._start_bg_tasks()
|
|
|
|
await server.await_closed()
|
|
farmer._shut_down = True
|
|
log.info("Farmer fully closed.")
|
|
|
|
|
|
if uvloop is not None:
|
|
uvloop.install()
|
|
asyncio.run(main())
|