DnsServer.java
上传用户:hensond
上传日期:2021-12-27
资源大小:817k
文件大小:1k
源码类别:

软件工程

开发平台:

Java

  1. package com.company.observer;
  2. import java.util.Observable;
  3. import java.util.Observer;
  4. import java.util.Random;
  5. /**
  6.  * @author cbf4Life cbf4life@126.com
  7.  * I'm glad to share my knowledge with you all.
  8.  * 每个DNS服务器都即使观察者也是被观察者
  9.  */
  10. public abstract class DnsServer extends Observable implements Observer {
  11. //处理请求,也就是接收到事件后的处理
  12. public void update(Observable arg0, Object arg1) {
  13. Recorder recorder = (Recorder)arg1;
  14. //如果本机能解析
  15. if(isLocal(recorder)){
  16. recorder.setIp(genIpAddress());
  17. }else{//本机不能解析,则提交到上级DNS
  18. responsFromUpperServer(recorder);
  19. }
  20. //签名
  21. sign(recorder);
  22. }
  23. //作为被观察者,允许增加观察者,DNS解析的上级DNS一般是一个
  24. public void setUpperServer(DnsServer dnsServer){
  25. //先清空,然后再增加
  26. super.deleteObservers();
  27. super.addObserver(dnsServer);
  28. }
  29. //向父DNS请求解析,也就是通知观察者
  30. private void responsFromUpperServer(Recorder recorder){
  31. super.setChanged();
  32. super.notifyObservers(recorder);
  33. }
  34. //每个DNS服务器签上自己的名字
  35. protected abstract void sign(Recorder recorder);
  36. //每个DNS服务器都必须定义自己的处理级别
  37. protected abstract boolean isLocal(Recorder recorder);
  38. //随机产生一个IP地址,工具类
  39. private String genIpAddress(){
  40. Random rand = new Random();
  41. String address = rand.nextInt(255) + "." + rand.nextInt(255) + "."+ rand.nextInt(255) + "."+ rand.nextInt(255);
  42. return address;
  43. }
  44. }