Location>code7788 >text

Fast LAN chat room based on UPD

Popularity:508 ℃/2025-04-09 09:51:48
package ; import ; import ; import .; import ; import ; import ; import ; import ; import .Md5Utils; import ; import ; import .*; import ; import ; import ; import ; /*** LAN broadcast communication, UPD*/ public class UPDService { private volatile boolean doing = false; private volatile AtomicLong msgIndesx = new AtomicLong(0); private final String project; /*** Broadcast mode*/ private volatile DatagramSocket socket; private final DatagramPacket packet = new DatagramPacket("".getBytes(), "".getBytes().length, ("255.255.255.255"), 0); private volatile ConcurrentHashMap<String, UPDInetSocketAddress> addresses = new ConcurrentHashMap<>(); public UPDService(String project) throws SocketException, UnknownHostException { this.project = project; } public void start() { try { socket = new DatagramSocket(); (true); scan(); } catch (SocketException e) { throw new RuntimeException(e); } } public void scan() { if (doing) { } else { doing = true; //Perception (project).(() -> { (project).(new Scaner(0, 5000)); (project).(new Scaner(5001, 10000)); (project).(new Scaner(10001, 15000)); (project).(new Scaner(15001, 20000)); (project).(new Scaner(20001, 25000)); (project).(new Scaner(25001, 30000)); (project).(new Scaner(30001, 35000)); (project).(new Scaner(35001, 40000)); (project).(new Scaner(40001, 45000)); (project).(new Scaner(45001, 50000)); (project).(new Scaner(50001, 55000)); (project).(new Scaner(55001, 60000)); (project).(new Scaner(60001, 65535)); }); //Perception, information, and life (project).(() -> { byte[] receiveBuffer = new byte[1500]; final DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, ); while (!()) { try { (receivePacket); String receivedData = new String((), 0, (), StandardCharsets.UTF_8); BaseMessage message = (receivedData); if (() instanceof UPDMessage) { if (check(((UPDMessage) ()).getToken())) { if (!(() + ":" + ())) { (project).sysMessage("Discover::" + () + ":" + ()); } (() + ":" + (), new UPDInetSocketAddress((), ())); } } else if (() instanceof TextMessage) { if (() < () && ((), ())) { (project).chatMessage(((TextMessage) ()).getMessage(), ().getName()); } } } catch (IOException e) { } catch (Exception e) { } } }); } } public <T extends BaseUser> void send(T o) { byte[] message = new byte[0]; message = (().id(()).message(o).build()).getBytes(StandardCharsets.UTF_8); (message); (); long time = new Date().getTime(); for (UPDInetSocketAddress address : ()) { if ( >= time) { (address); try { (packet); } catch (IOException e) { } } } } private boolean check(String token) { if ((token)) return false; return Md5Utils.getMD5(new Date().getTime() / 1000000 + "", StandardCharsets.UTF_8.name()).equalsIgnoreCase(token); } public void shutDowm() { (); doing = false; (); } private class UPDInetSocketAddress extends InetSocketAddress { public final long outTime = (new Date(), 1).getTime(); public UPDInetSocketAddress(int port) { super(port); } public UPDInetSocketAddress(InetAddress addr, int port) { super(addr, port); } public UPDInetSocketAddress(String hostname, int port) { super(hostname, port); } } private class Scaner implements Runnable { private final DatagramPacket scanPacket; { try { scanPacket = new DatagramPacket("".getBytes(), "".getBytes().length, ("255.255.255.255"), 0); } catch (UnknownHostException e) { throw new RuntimeException(e); } } int start; int end; public Scaner(int start, int end) { this.start = start; this.end = end; } @Override public void run() { while (!()) { for (int portD = (start + end) / 2, portU = ((start + end) / 2) + 1; portU <= end && portD >= start && !(); portD--, portU++) { try { (1); } catch (InterruptedException e) { } try { BaseMessage<BaseUser> build = ().message(().token(Md5Utils.getMD5(new Date().getTime() / 1000000 + "", StandardCharsets.UTF_8.name())).build()).build(); String string = (build); byte[] bytes = (StandardCharsets.UTF_8); (bytes); (); (portU); (scanPacket); //(project).(true,"start aware port:"+portU);//(project).sysMessage("Start aware port:"+portU); (portD); (scanPacket); //(project).(true,"Start aware port:"+portD);//(project).sysMessage("Start aware port:"+portD); } catch (IOException e) { } } } } } }