socket.setReuseAddress(true); socketListenThread = new SocketListenThread(socket); socketListenThread.start();
@Override public void shutdown() { report(logLabel, ()->"shutting down...", VerboseLevel.BASE); socketListenThread.isActive.set(false); socket.close(); timerHandshake.cancel(); timerHandshake.purge(); timerRetransmit.cancel(); timerRetransmit.purge(); timerProtectionFromDuple.cancel(); timerProtectionFromDuple.purge(); try { socketListenThread.join(); } catch (InterruptedException e) { report(logLabel, ()->"shutting down... InterruptedException: "+e, VerboseLevel.BASE); } report(logLabel, ()->"shutting down... done", VerboseLevel.BASE); }
@Override public void run() { setName("UDP-socket-listener-" + socketListenThreadNumber++); logLabel = myNodeInfo.getNumber() + "-" + getName() + ": "; onReceiveHello(packet); break; case PacketTypes.WELCOME: onReceiveWelcome(packet); break; case PacketTypes.KEY_REQ_PART1: onReceiveKeyReqPart1(packet); break; case PacketTypes.KEY_REQ_PART2: onReceiveKeyReqPart2(packet); break; case PacketTypes.SESSION_PART1: onReceiveSessionPart1(packet); break; case PacketTypes.SESSION_PART2: onReceiveSessionPart2(packet); break; case PacketTypes.DATA: onReceiveData(packet); break; case PacketTypes.ACK: onReceiveAck(packet); break; case PacketTypes.NACK: onReceiveNack(packet);
/** * We have received {@link PacketTypes#KEY_REQ_PART2} packet. Waiting for part1 or continue if it has got already. * @param packet received {@link Packet} */ private void onReceiveKeyReqPart2(Packet packet) { report(logLabel, ()->"received key_req_part2 from " + packet.senderNodeId + " (packetId="+packet.packetId+")", VerboseLevel.BASE); SessionReader sessionReader = getOrCreateSessionReaderCandidate(packet.senderNodeId); if (sessionReader != null) { sessionReader.protectFromDuples(packet.packetId, ()->{ sessionReader.removeHandshakePacketsFromRetransmitMap(); sessionReader.handshake_keyReqPart2 = packet.payload; onReceiveKeyReq(sessionReader); }); } }
/** * We have received {@link PacketTypes#KEY_REQ_PART1} packet. Waiting for part2 or continue if it has got already. * @param packet received {@link Packet} */ private void onReceiveKeyReqPart1(Packet packet) { report(logLabel, ()->"received key_req_part1 from " + packet.senderNodeId + " (packetId="+packet.packetId+")", VerboseLevel.BASE); SessionReader sessionReader = getOrCreateSessionReaderCandidate(packet.senderNodeId); if (sessionReader != null) { sessionReader.protectFromDuples(packet.packetId, ()->{ sessionReader.removeHandshakePacketsFromRetransmitMap(); sessionReader.handshake_keyReqPart1 = packet.payload; onReceiveKeyReq(sessionReader); }); } }