zoukankan      html  css  js  c++  java
  • 2016-7-30 网络通信原理

    网络通信原理:

    package com.example;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    // 回调接口
    interface ICallback {
        String getString();
        void fun(String str);
    }
    
    // 登录
    class A implements ICallback {
        String string = "login";
    
        public String getString() {
            return string;
        }
        @Override
        public void fun(String str) {
            System.out.println(string + " : " + str);
        }
    }
    
    // 回调的核心
    class B {
        List<ICallback> iList = new ArrayList<>();
    
        // 注册被回调(注册函数)
        public void addTo(ICallback iCallback) {
            iList.add(iCallback);
        }
    
        // 回调函数
        public void excute() {
            int num = 0;
            for (ICallback i : iList) {
                i.fun(String.valueOf(num++));
            }
        }
    }
    
    // p2p聊天
    class C implements ICallback {
        String string = "p2p";
    
        @Override
        public String getString() {
            return string;
        }
        @Override
        public void fun(String str) {
            System.out.println(string + " : " + str);
        }
    }
    
    // 群聊
    class D implements ICallback {
        String string = "chatroom";
    
        @Override
        public String getString() {
            return string;
        }
        @Override
        public void fun(String str) {
            System.out.println(string + " : " + str);
        }
    }
    
    // 视频
    class F implements ICallback {
        String string = "camera chat";
    
        @Override
        public String getString() {
            return string;
        }
        @Override
        public void fun(String str) {
            System.out.println(string + " : " + str);
        }
    }
    
    // QQ电话
    class G implements ICallback {
        String string = "QQ phone";
    
        @Override
        public String getString() {
            return string;
        }
        @Override
        public void fun(String str) {
            System.out.println(string + " : " + str);
        }
    }
    
    class X extends Thread {
        boolean isRunning = true;
        int i = 1;
        public static int num = 0;
        List<ICallback> iList = new ArrayList<>();
    
        // 注册函数 : 注册被回调类方法
        public void addTo(ICallback iCallback) {
            iList.add(iCallback);
        }
    
        // 回调函数 : 处理回调
        public void run() {
            super.run();
            while (isRunning) {
                num++;
                try {
                    System.out.println("=====" + new Date(System.currentTimeMillis()) + "=====");
                    System.out.println("[num] = " + num + " | get a message!");
                    System.out.println("---------");
                    Thread.sleep(2000);
    
                    // 处理所有回调
                    for (ICallback i : iList) {
                        i.fun("<-[message]");
                    }
                    System.out.println("======================================");
    
                    // 模拟现实,每隔一段时间就移除一个回调(监听)
                    if (num == 2 * i) {
                        Thread.sleep(2000);
                        System.out.println("+++++++++++++");
                        System.out.println(iList.get(0).getString() +" completed !");
                        System.out.println("+++++++++++++");
                        removeFrom(0);
                        i++;
                        Thread.sleep(2000);
                    }
                    Thread.sleep(7000);
                    if (iList.isEmpty()) {
                        System.out.println("**************************");
                        System.out.println("Do not have a active action");
                        isRunning = false;
                    }
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public void sstart() {
            start();
        }
    
        public void removeFrom(int i) {
            iList.remove(i);
        }
    }
    
    public class MyClass {
        public static void main(String[] args) {
    
            X x = new X();
    
            // 动态挂接被回调的类函数
            x.addTo(new A());
            x.addTo(new C());
            x.addTo(new D());
            x.addTo(new F());
            x.addTo(new G());
    
            x.sstart();
        }
    }
  • 相关阅读:
    Sass 初级学习三
    Sass 初级学习二
    Sass 初级学习一
    数据库0,1和flase true的转换
    Mybatis逆向工程-mybatis generator
    码畜生活现状
    【抽五分钟】使用VuePress创建在线文档中心
    面经整理
    C#引用fo-dicom读取dicom文件异常
    windows10更新后, VMWare无法启动虚拟机: vmdb-14 pipe connection has been broken
  • 原文地址:https://www.cnblogs.com/juzi-123/p/5721796.html
Copyright © 2011-2022 走看看