/** * Method creates {@link DatagramPacket} from given {@link Packet} and sends it to address:port from destination. * @param destination instance of {@link NodeInfo} with net address for sending. * @param packet data to send. It's {@link Packet#makeByteArray()} should returns data with size less than {@link DatagramAdapter#MAX_PACKET_SIZE} */ private void sendPacket(NodeInfo destination, Packet packet) { byte[] payload = packet.makeByteArray(); DatagramPacket dp = new DatagramPacket(payload, payload.length, destination.getNodeAddress().getAddress(), destination.getNodeAddress().getPort()); try { report(logLabel, ()->"sendPacket datagram size: " + payload.length, VerboseLevel.DETAILED); if ((testMode == TestModes.LOST_PACKETS || testMode == TestModes.LOST_AND_SHUFFLE_PACKETS) && (new Random().nextInt(100) < lostPacketsPercent)) report(logLabel, ()->"test mode: skip socket.send", VerboseLevel.BASE); else socket.send(dp); } catch (Exception e) { callErrorCallbacks("sendPacket exception: " + e); } }
protected void sendBlock(UDPAdapter.Packet packet, DatagramSocket socket, NodeInfo destination) throws InterruptedException { byte[] out = packet.makeByteArray(); DatagramPacket dp = new DatagramPacket(out, out.length, destination.getNodeAddress().getAddress(), destination.getNodeAddress().getPort()); try { socket.send(dp); } catch (IOException e) { e.printStackTrace(); } }
socket = new DatagramSocket(myNodeInfo.getNodeAddress().getPort()); socket.setReuseAddress(true);
@Override public void addNode(NodeInfo nodeInfo) { try (PooledDb db = dbPool.db()) { String sqlText = "insert into config(http_client_port,http_server_port,udp_server_port, node_number, node_name, public_host,host,public_key) values(?,?,?,?,?,?,?,?);"; try ( PreparedStatement statement = db.statementReturningKeys(sqlText) ) { statement.setInt(1, nodeInfo.getClientAddress().getPort()); statement.setInt(2, nodeInfo.getServerAddress().getPort()); statement.setInt(3, nodeInfo.getNodeAddress().getPort()); statement.setInt(4, nodeInfo.getNumber()); statement.setString(5, nodeInfo.getName()); statement.setString(6, nodeInfo.getPublicHost()); statement.setString(7, nodeInfo.getClientAddress().getHostName()); statement.setBytes(8, nodeInfo.getPublicKey().pack()); db.updateWithStatement(statement); } catch (Exception e) { e.printStackTrace(); throw e; } } catch (SQLException se) { se.printStackTrace(); throw new Failure("add node failed:" + se); } catch (Exception e) { e.printStackTrace(); } }
statement.setInt(1, nodeInfo.getClientAddress().getPort()); statement.setInt(2, nodeInfo.getServerAddress().getPort()); statement.setInt(3, nodeInfo.getNodeAddress().getPort()); statement.setInt(4, nodeInfo.getNumber()); statement.setString(5, nodeInfo.getName());