【Linux】项目:概要,分析,总结(持续更新)

项目名称:小区物业门禁卡系统

编码工具:red hat6.3 Linux下sublime text工具

编译工具:g++ makefile工程管理工具

代码总量:1800行左右

C/S架构: 一.client客户端     二.server服务器端

一:客户端概要设计:
    0.TcpServer.h TcpClient.h :最底层的2个class,socket那一系列函数封装
        socket bind listen accept send recv close
        socket connect send recv close
    0.Client.h Server.h 代理类,单例模式:代理Tcpserver TcpClient

    1.System_cli.h :client系统:共运行3个线程:主线程 门禁卡收集器线程 接受服务器数据并用MVC处理数据线程
        (6000端口号连接服务器)
        1)主线程:登录 2)注册 3)退出  
            成功后进入下一层 contral_cli.h:insert delete search updata
                                            接受管理员输入数据,json打包,发送给服务器

    2.附线程a:接受服务器返回的数据Recver_cli.h :Constrator:create pthread
                                                 线程函数:接受数据string,解包,根据类型调用View中的函数处理
                                   Contral_recv View_recv :MVC事物处理

    3.附线程b:监听门禁卡登录时的刷卡信息 Collect_cli.h:libevent事件监听,门禁卡端口5000
                接受5000端口发来的数据后,将数据加工,添加表示类型,发送给服务器


    4.自定义Json协议:客户端发送协议and服务器端发送协议:[大写字母]表示json包数据分类
        Json::Value val 
        val["TYPE"]:(string)login regiser insert search update delete collect
        val["SOCKFD"]:(int)-1  fd
        val["NAME"] :(string) name;
        val["PW"]:(string) pw
        val["ID"] = (string)id;
        val["SEX"] = (string)man woman;
        val["AGE"] =(int) age;
        val["RESULT"] :(stirng)"yes"  "no" "message"   //服务器端返回TYPE类型的结果:成功则yes 失败则no

            管理员登录协议rootlist:
            val["TYPE"]:login regiser
            val["SOCKFD"]:
            val["NAME"] = name;
            val["PW"] = pw;
            val["RESULT"] :"yes"  "no" "message"

            小区住户信息协议resident:
            val["TYPE"]:insert search update delete collect
            val["SOCKFD"]:
            val["ID"] = id;
            val["NAME"] = name;
            val["SEX"] = sex;
            val["AGE"] = age;
            val["RESULT"] :"yes"  "no" "message"
    //失误:前期没有分析好协议,导致val["SOCKFD"] 这一项多余


二:服务器端(多线程)概要设计:
    1.主线程System.h:libevent事件监听: clifd上有请求,将clifd放入共享队列。开启线程池。
            ShareQueue.h:为保证线程安全,设计为单例模式,pop时加锁。
    2.线程池PthreadPool.h:阻塞在pop队列中(如果queue为空,则阻塞),
                                sharequeue上有clifd,则进入下一层,MVC 事物处理。

    3.Contral.h :MVC‘s C:处理clifd上的事件 :
        1).接受客户端发来的数据,json解包
        2).根据json["TYPE"],调用View.h中的树立函数:class View 为抽象类,通过继承,得到不同事物对应的class和处理函数
            View_login  View_registe....等派生类
            再把json包中数据,调用class Databaase 中的方法得到json["RESULT"]
            创建json包,将结果发回给客户端
        3).Database.h  连接数据库,bool返回类型的成员函数:验证login/registe/insert....结果是否正确

你可能感兴趣的:(Linux)