1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
// Copyright 2015-2020 Parity Technologies (UK) Ltd. // This file is part of Tetsy Vapory. // Tetsy Vapory is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Tetsy Vapory is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Tetsy Vapory. If not, see <http://www.gnu.org/licenses/>. use vapory_types::H256; use tetsy_jsonrpc_tcp_server::PushMessageError; #[derive(Debug, Clone)] pub enum Error { NoWork, NoWorkers, Io(String), Tcp(String), Dispatch(String), } impl From<std::io::Error> for Error { fn from(err: std::io::Error) -> Self { Error::Io(err.to_string()) } } impl From<PushMessageError> for Error { fn from(err: PushMessageError) -> Self { Error::Tcp(format!("Push message error: {:?}", err)) } } /// Interface that can provide pow/blockchain-specific responses for the clients pub trait JobDispatcher: Send + Sync { // json for initial client handshake fn initial(&self) -> Option<String> { None } // json for difficulty dispatch fn difficulty(&self) -> Option<String> { None } // json for job update given worker_id (payload manager should split job!) fn job(&self) -> Option<String> { None } // miner job result fn submit(&self, payload: Vec<String>) -> Result<(), Error>; } /// Interface that can handle requests to push job for workers pub trait PushWorkHandler: Send + Sync { /// push the same work package for all workers (`payload`: json of pow-specific set of work specification) fn push_work_all(&self, payload: String); } pub struct ServiceConfiguration { pub io_path: String, pub listen_addr: String, pub port: u16, pub secret: Option<H256>, }