00:00
各位,我现在思路有了,他的实现方式仍然跟刚才老师讲的步骤几乎是一样的。啊,有个套路,心里面就很有底了,来,我们先看看啊,没点勾放这没问题。啊,那么这个mam process呢,处理的这个user process呢,也也放在地方也没什么问题,Server这个文件呢,呃,这个server这个文件呢,放在处理这个包,或者放在这个main都可以,这个UR单写一个单写一个好我看一下我以前是怎么处理的啊,我这个放贷都放到process的,好,那现在呢,我的结构已经有了,来分包。先。先把先把各个文件放到,放到放到什么呢?放到对应的。文件夹下文件夹下。那么这个文件夹呢,就体现出我们这个包的概念了,这个对于我们来说还是比较easy的,是不是各位同学。对吧,那怎么玩呢?打开我们的code。
01:05
这是我们的客户端,现在呢,三个文件都放在一起了,这是不行的,来第一个包包妹。每第二个包包。第二个包包呢,我们叫做这个process。没问题。第三个包包是我们的utr。Uts第四个包包是我们的model包啊,包包呢,后面会用到啊,很快就会用了,好大概有这么四个包,那现在呢,我开始剥离,那剥离的时候呢,还是道规律,不要先把别人的文件啊,先把你原先文件先不要马上删掉或者怎么样,那么我们现在一个一个的拨,首先这里面呢,呃,会有一个会有一个主文件,好主文件我们先把写进去啊,先把它复制一份。到我们的这个面面包里面去,这个没问题,粘贴来了,这第一个第二个呢。
02:00
我们这个log进肯定就不需要了,因为不可能说一个功能对应一个文件,这是不现实的事,所以说呢,到时间我们会把它拆到我们的user process里面去,所以说我这新建两个空的文件啊,同学们第一个呢叫user process。没问题吧,这个是处理跟用户相关的,他将来这个文件,这个文件的对接跟服务器对接呢,就是对接他,他们两个是好朋友。他有两个是好朋友,但是你你你说诶韩老师,他两个文件名都相同,怎么办呢?这个没关系,不用管,也不用也不用故意的去取一个哦,这个叫server user plus,这叫client,没必要,反而越弄越晕,因为你本身两个都在不同的大的文件夹下面,这个可以区分的啊,没有必要再去写个server,呃,Client这个没必要好,所以说呢,这个逻辑大家搞清楚,好再建一个新的文件。这个呢,叫专门处理短信的SM,那么我们叫process。
03:02
点勾好,我们还有一个u tr文件啊,这个u tr文件可以基本上可以直接复制过来啊,从目前来说,他可能就先需要这个啊,粘贴复制一份O了,好,当然这个要开始改进了啊啊提构连一个文件两个三个四个,还有个serve。哎,Serve这个文件刚才讲的也是特别重要的文件。Server点购,这个server点购呢,它的作用是一个是显示登录菜单,第二个它保持跟服务器端通讯,好,这个就开始一个个写好,这边看哪些把它拿拿走啊不。好像播的也不太多啊,这个地方几乎几乎没什么可播的,它应该就是在这个地方,在这个地方捞呢,改成只调用它的那个user process里面的log,仅此而已,所以这个地方到现要重新调用。啊,这里我们会需要需要重新调用。需要重新调用。
04:01
好,这一段先不用去改它。调用,呃,那么现在还是按们老规矩啊,先改改UT24这地方几乎我个人感觉没有必要再重新写一遍,没有必要再重新写一遍,其实他就跟我们的server完全一样,我直接粘贴拷贝过来就完事。对吧,所以说我完全就不想改了。它的读和写,它本质它的读和写,这个和这边呢是一样的,只是我为了省事,我把它呢也在这移植了一份过来。好,这个呢,那我干脆就不写了,我直接把它删掉。从那边复制一份过来,完整的好代码,那各位同学,那现在呢,老师就偷一个蓝了,直接从server这边粘贴一份这个工具的一个文件复制。放到我们的这一个的这个。啊,又贴里棒棒里一去,别放错了啊,同学们。好,这个代码粘过来基本上是,呃,看看哪方需要改进一下啊,呃,好像没有什么需要特别改进的。
05:05
没有什么需要改进的,对吧,你看这包嘛,都都是都是对的。好就不需要,那这个呢,就把它删掉了啊,没有用了啊,这个是你可以你可以先先保留吧,要是要是有出问题呢,对吧,好保存一下。好,这个UR就有了,接着呢,我们来封装这个地方,好,我们来封装这个地方user process,打包package p process,好,这个地方应该可以的,因为我这个客户端没有一个叫process的函数,应该不会冲突啊,叫process没问题。好的,该用什么包先拿过来啊。我们首先要从。这个log进里面,这个捞进会离你开我们这个log辑没有用了,待会我们要把它这个关于用户登录的这么一个玩意儿整体拷贝啊。拷贝到我们的这个U里面去,好这个呢比较简单。
06:01
好,这有一个给绑定给关联一个吧,关联一个用户怎么样登录的,登录的一个一个方法,那么先把这个结构体写起来啊。Type type,我们叫user process。Process,然后呢是一个structure,那在这里面需要什么东西呢?他需要什么东西呢?好,它这里面需要哪些字段,你要怎么去分析呢?各位同学,你要看这个logging里面有需要什么东西,我们一回之发现好像捞进里面不会用到任何东西,因为它的连接都是自己拿到的,所这地方其实是暂时不需要任何东西。为什么嘛,因为你你连接也不需要你的,你你连接,因为连接它本身就拿到了第二个,你到时候要传输的时候,你传输的时候不是要一个right吗?啊要要这个吗?要read吗?那read read的时候我也直接在这创建一个transfer就完事了,说它暂时不需要什么东西啊,我只能说是暂时不需要啊,暂时不需任何字段。
07:14
所以说自己要去分析各位同学啊,暂时不需要。不需要这个字段,OK,那现在这个log呢,我们为了访问方便呢,先把它搞成一个大写的对不对?好,然后呢,这个地方来一个this新,然后我们的user process。写进去哪些地方改一改看看啊。好像无需改动,好像无需改动啊,啊,哪地方要大大写一下呢。Right,哦,对,这下面这个要改进这个先保存一下,有有有改的地方先改一下啊来走一走,Server这方先把这个包包打进。Package这边呢,有个process这边呢也要打一个包包,就说你什么都可以不写,但是你必须让这个文件归属于一个包啊,这是一个最基本的一个原理,我们在讲购物的时候,第一天就曾经给大家讲过这个东西。
08:11
好,现在呢看应该报错啊,对,我们要的就错,一共有加九加九代表诶至少超过九个啊,来来整一个引包包。有哪些包啊?呃,首先net包肯定是要要的。啊,然后我这复制粘贴一份啊,需要什么东西,我先粘贴,这可能都用得到,先把它复制过来吧。先把复制过来,这就省点事了吗?好,先把message引进来,Batter引进来接引进来报一下。保存过后可能还有错误,只剩一个了。果然啊,这个就很快,哪一个错误呢?正如我们想象的一样,就它好,我们讲过啊,一旦我做了这种封装,做了这种这种分层封装,那么我们的读包和写包呢,都交给穿式粉,你就不要再去,我们去自个儿搞一个函数,没必要啊,那么这个时候呢,老规矩,创建,创建一个transfer实力。
09:08
对,你创建一个transfer的实例。大家有没有发现啊,我们这样做其实挺麻烦的,因为你在整个过程中,其实你是一个链接,是不是我们可以把transfer上来以后,先实例化,就先把它做成一个全局,哪个地方需要用直接用就行了呀,是不是还可以进一步优化呀?因为你你整个连接,你跟客户服务器端连接有是一个连接吗?那既然是一个连接,我们只要读的话,直接把它做成一个全局的,或者说把它做成一个做做成一个放到一个文件里面去上来,给直接初那个先先在那个适当的位置把初始化,然后以后我们就直接用。更方便优化的地方还有很多啊,优化的地方还有很多,这个呢,就是大家要去动脑筋了,TFTF走一个。爱的符号,然后呢,有一个u chair这个包包下面有一个穿石粉。
10:01
走起来里边呢,需要一个connect里面这个connect这个地方为什么不需要他带过来呢?因为这个connect本身就是你登录的时候去创建起来的。所以说这个地方呢,就它自身不用不用带这个东西,好,这个大家看清楚了啊。这个地方为什么是这样写的,看清楚啊好,然后这边改动成什么呢?TF点,然后大写的R完事。保存一下。OK,同学们看到还有一个错误啊,他这这是这什么玩意,这个啊,没有没有引utr包,好像咱们是不是没有UR包。那这个U包呢,也非常简单,就是我们client下面的U,我把它分开的啊,我把分开的这个呢,也可以把它并在一起,以后这个工具包直接放在common下面,Common有message common有UR更方便。啊,这个后面可以再去优化。U tears好保存,现在看看还有没有错误。
11:01
还有一个错误啊,点开。他为什么还说,哦,没有这个,是不是我们不需要传这个链接,因为TF自动把这个连接带过去了。还有哪些地方,再看一下代码寻寻觅觅,我们发现没毛病了,那没有毛病,也就是说此时此刻呢,我们把这个也写完了,这这个还没写啊,这个还没写,那现在呢。我们这个已经搞定了,这个也搞定了,现在我们写一下server订购。Serve点购啊,12点又是个新东西,是个新东西呢,我们要去构建它要完成什么任务,它第一个任务要显示登录成功的界面,没问题,写个菜单吗?第二个保持和这个通讯没问题,我写个函数,比如说我叫keep server啊,这个这个这个message或者什么样子啊,保持一个通讯就是保持一个通讯好的,那现在呢,我们就来写这个吧。好,这边也十周的改进啊,Inport不着急啊,同学们,走,首先引一个包包。
12:06
所以说你看这个代码其实也不少啊,就自己要去想啊,你还得想,你想再加上写代码肯定是需要时间的,那首先呢,我们先写一个函数,就是显示登录成功后的界面。好。好,那可能有同学说,老师你你这个思路怎么样,才能就说我现在可能有同学感觉是,诶老师你告诉我这样做我可能会知道,但是你要不告诉我,我可能就不知道怎么去做了,这个没有办法,同学们就说这个东西呢,你要说经过只有通过练习,你多见了,你慢慢就有套路了。这个就是说现在老师唯一能讲的就是把这个思路,我我是怎么做的思路一步一步展现给你,但是你你不可能通过做一个小案,做一个案例或者做一个项目你就全通了,这也很难,但是呢,要去多练习,慢慢就感觉啊,你就知道怎么做了,好function,那么我们就直接叫做数菜单。
13:06
非常的简单啊,来这个现在我们先暂时不去封装,就售一个菜单售菜单。好的,So,这个没有没有啊,没有好这地方咱们就写个函数就行了。写函数。当然你也可以把它做成一个做做封装一个结构体啊,封装一个结构体。好了,我先暂时不去封装结构体啊,就直接写个函数,呃,So,没有,然后呢,这边就显示菜单,那我们看看登录后它长什么样子呢,它一定会给一个界面设计。哦,我们看看他长的是这个德行啊,他这样子的。他说显示在线用户列表可以就登录成功过后呢,我可以我输入一就会看见现在有多少人在线。甚至我可以不停的每隔一定时间来刷新一下,自动刷新这个用户列表也可以。因为我后面有一个偷偷通讯的一个那个那个那个携程,那么还有一个呢,就是发送消息,还有就是信息列表,还可以退出系统号,就大概四个啊,用户在线发消息,还有信息列表,就看有哪些东西啊来我们把这个界面给他写一下。
14:17
Format。好,我这写一个叫用户登录界面。用恭喜啊,这方甚至可以提示你是谁,把信息给他封装机器都可以,恭喜登录成功,恭喜某某某。这个登录成功。登录成功,这个某某某,到时候我让你们把它填进去。这个填呢,又涉及到一些东西,你得把它封装成一个U热一个结构体更好一点啊,这个地方到时怎么填,同学们到时候再想。好。好啊,恭喜某某某登录成功,好,那么你下面可以选择的操作呢,有这么一些来走一个两个三个四个,好,我就写一写啊第一个呢。
15:03
第一个就是用户列表可以显示在线。用户列表显示在线。在线用户列表,想想这个怎么去拿用户在线列表啊,你将来是一个多人聊天系统对不对,第二个呢,我们可以啊对,我们可以根据他的这个需求看一下啊,叫做发送消息。发送消息。发送消息好,第四一个呢,第三一个可以看信息列表。啊,信息列表。信息列表,当然你还可以输一个是叫查看留言对吧,等等这些功能扩展就多了。啊,功能扩展就多了,甚至那个留言可以自动给你推下来,这个叫退出系统。退出系统好,比如说你登录过后呢,你你发现诶我不想玩了,我想直接走也可以也可以好下面呢,最后这有个请选择一到四。
16:01
OK,没毛病对不对,请选择。请选择什么呢?一到四你给我选一个,我就为你服务好,那么这个时候呢。这个时候这个菜单有了过后,我们肯定要去让他输入一个,输入一个值,对不对,输入一个值,那这边我们就用一个K吧VRK在这定义一个int。好,那么这个时候呢,就接收一下。接收一下OK,那这个时候我用KF。Sc if啊。然后呢,我老规矩,别忘了啊,一个是D,然后一个N,然后输一个整数进去K。好,我根据输入的这个输入的这个值呢,来提示不同的内容,现在啊,OK,那就说一句吧。S wi k。好的,那么先把这个代码简单写一写case。Case,如果它等于一,那么我们就说显示在线列在线的用户列表,当然又涉及到一堆东西了,对不对?form.pn好,我们就说,诶,显示在线用户列表。
17:13
好,这个就完事,呃,我是一个,现在写的是一段伪代码,现在写的是一段伪代码啊同学们看到,然后呢,呃,如果是发送消息呢,就肯定有些新奇的说,你你给谁发。那肯能会有些心思,哎,你跟张三发还是群聊等等啊,这个呢,到时你再做好这个呢叫发送消息。发送消息给谁发在线的人,因为你现在知道哪些在线的,你就可以指定我给张三发还是李四发,对吧?啊,如果是界面的话,就是点击这个人,如果是文本界面,肯定就先输一个对方的ID号再发嘛,肯定是这样子的好第三一个呢,第三一个就是我们可能是啊信息列表,信息列表比如说我想看一下打,比如我想给让大家增加这样一个功能把。
18:01
有把张三和李四曾经给你聊过的信息给我罗列出来,就有点类似于查看什么呀,查看这个叫做什么叫做叫做历历史记录这玩意儿,那这个时候就功能有点意思了,那相当于说你还给我想办法把张三和李四东西要吗?肯定这个客户端肯定是不能存数据库啊。肯定是把它以文件的形式,大家肯定能做,我们前面学过这个知识点并不难,好这个地方就是查看信息列表啊,这个呢,其实也是可以做出来的啊。只要把这个结构给你们打通了,你们都可以做,同学们啊,只是时间的问题。信息。信息列表没问题吧,好,紧接着呢,最后一个就退出系统CASE4 OK,呃,假设呢,这个人他不想玩了,他说哎,我不想,我不想跟你玩,我就退出了,可以可以,那叫print,我们那就print直接退退就完了啊,提示他一句话吧,提示他一句话再退。
19:01
提示他一句话,知道他要退了啊,你退出了系统。你选择选择退出。退出了系统,OK,那这个时候退出呢,我就猛一点啊,直接退,他反正就不玩了,我就退了。啊,我就退了,OK,其实还有一种特别好的一种思想是我在退之前先给服务器发个消息说我要走了,比如说拜拜,服务器那边收到一个拜拜,就也也去把这个这个连接关掉,这是最好的一种方式,就是我告诉你我要走了。因为有时候服务器在这个客户端要走之前呢,他做些工作,因为有可能这个这个客户端它有很多消息是写在缓存里面的。因为我不会每次都入库,所以他发现我发现他要走了,过后呢,我马上干什么事情呢?我马上先把他的跟他这个用户相关的缓存的内容先刷到或者入库,或者是或者是落盘啊,这个就是后后面大家可以扩展,这个要扩展东西太多了啊。
20:05
你说这个说老师不就是个聊天嘛,聊天QQ就是本质就是个聊天器,你看QQ多大,腾讯帝国是吧,他这个其实其实看起来简单,在设计里面东西可可就多了啊,可就多了,只是现在腾讯现在主要是腾讯一统天下,以前那个好多好多公司都在抢,抢占这个I'm市场。因为他一统天下了,所以现在搞的大家没什么,这方面好像用的比较少了,就是说这个这方面用的比较,但是还是有很多,你比如说现在像这个视频电话,还有这个视频会议,其实它的本质也是一个通讯机制,我记得当时在我们那个时代啊,就是在他罗斯刚刚工作的时候,005年,零六年的时候,那个时候好多这个公司其实也开发了很多类似的I I'm的产品。曾经我们在新浪的时候,新浪曾经想主打一个UC,可能有人听过啊,他是UC有个浏览器,它一个聊天的,当时都花了很多很多钱,很多很多钱。
21:09
要投,投入的东西很多,结果以失败而告终,最后这个这个部门基本上就就就没有那几个人了啊,还有你们大家可能还听过,就是微软曾经提过。只发了一个MSN听过吧,当时当时MSN可是火了一段时间了,同学们当时差一点就把那个腾讯的那个,就是那个企业的那些用户抢的差不多了,因为当时。微软他是他是把他这个产品跟他这个操作性绑定的,他想怎么去抢这个市场,他说你QQ定位是娱乐聊天的,当时有一个普遍认为就是在公司里边,如果打开QQ都认为是在聊天。所以说微软打了一个什么呢?我这个就是工作时候用的一个,呃,通讯的一个东西,所以当时很多人用MS,结果这个腾讯,这个腾讯意识到这个危险过后,马上出了企业版的这个QQ,所以当时呢,后面就把这个又又把这个市场给抢回来了。
22:08
啊,当然还有很多,雅虎叫出了一个叫雅虎通啊,也花了很多钱。啊,就是砸钱砸的很多,就跟现在那个什么共享共享单车一样,那共享单车花了多少钱,有几个,现在还有几个挣钱的,死的都差不多了,是不是还有以前那个叫那个共享那个就是那个叫叫叫滴滴那种是吧,也花了好多钱。全部都死的差不多,所以这个是烧钱的,烧钱的火啊好,讲到这里就是我们就先暂时退出啊,好,最后呢,如果他他说的这个东西不对,就是他输的不是这里面呢,我们就说你输入不对,请重新输入就完了,就让他反复的输,我们这个菜单会循环显示啊同学们。好,这段就是你输入输入的不对啊,输入的选项不对,选项不正确。OK啊,好,这个就写完了,那写完过后呢,这个菜单我会在哪里反复显示呢?我在这同学们显示菜单是我在这显示,因为它一旦成,一旦登录成功,我会显示这个菜单,菜单我会负循环显示,因此呢,在这里面我们不需要去做任何动作啊,只有它按这个式才能推出,否则就一直在这玩啊,你比如说你按了个一,我就把内容给你提出来,再把这个菜单再显示出来啊,我是这么一个设计理念啊,好,最后呢,这个就做完了,主菜单菜单写完先保一下看有没有错误。
23:34
好,这个写完了,写完过后这需要引一个包包。Always。好,这个是我们第一个第一个文件啊,第一个文件,那接着呢,我们回头再写这个地方,就是你现在呢,呃,这个user process已经写,已经写完了,我们先把这条线打通,再去写这个啊,就是保持和服务局端通讯,这个呢,我们还没写,还没写,我们待会待会再写这个主菜单已经写完了,主菜单已写完了,好,现在呢,我们来回到这个面点够怎么做呢。
24:06
你在这里是直接调以前的函数,这不行了,这不行了,咱们不不能这样调了,我们要改东西了。我们这里要改一个逻辑。因为使用了,因为使用了这个分层的,分层的这个模式啊,使用了这个新的结构,新的这个程序结构。啊,因此呢,我们创建一个,因为因为我知道K1的时候,我知道你是想去输这个用户名密码嘛,对不对,所以说我这样写,诶,我想想在这儿还有没,还有没有有没有必要要这个东西啊。我觉得这地方这个K没有意义,因为你这已经是要登录聊天室了,对吧,那这段代码感觉不伦不类在这没有意义对吧。没有一的,干脆这段代码直接删掉,把这段代码提到上面去就完事了好不好?就这段没有什么意义,我当时写这个代码是因为我我我有两级目录,我有两级目录大家可能会觉得都写到一个地方没有问题,现在的两级目录有一级目录已经深入到这个文件里面去了,所以说。
25:11
就没问题了,因为我是登录过,我让这个server点够给我显示第二级目录,说他从这个里面升到第二级了,这个就没问题,好,那同学我这段代码就没有意义,我就把直接删了啊同学们,我先把这个拿到这边注意听。我直接呢,就把它扔到这儿。扔到这儿。好,这个loop呢,咱们也先不要推动啊,就就不就就不退出啊,就不退出就是。这这这地方我就没有意义了,这个我先删掉了啊,这个地方没有用,没有用了,除非他按这个在这登录过直接退出可以,那这个时候这个这个量呢,也没有意义了,先把它注销了好不好好这个整个代码下面这个地方也没有用了,这个K其实也没什么用处,我就删掉了。先先暂时注销本待会再算好,也也就说到这来了啊,到这来过后呢,我们来做一个工作,做一个什么工作呢?呃,就是说。
26:08
呃,就是就是登录完成这个登录。那么完成登录呢,我们先去第一步,我们先去创建一个,注意听啊,这是是不是怎么来的,创建一个叫做user。User process的一个实例是这意思吧,那这个实例呢,对我们来说还是很简单的,一下就能重建起来,就那就叫up吧,简单一点走。啊,然后他在哪个包包下面呢,你在这儿,所以他的包呢,是process这个包。好,这个就不会有有冲突啊,这个包下面的有一个叫做user process。好,Processor好,里面呢,什么东西都可以不填,是够空的啊,空的话我就放在一行。然后呢,我调用它的一个方法,哪个方法呢?up.logging。
27:00
Up up.log因为我这已经拿到用户名和密码了,所以说我把用户名给它填进去用,呃,用户ID还有用户密码给他传进去,好传进去过后呢,最后看这个log井有没有返回什么东西啊。啊OK,好,这边有报错,报错的原因是因为没有啊这个lo就没有意义了,那就直接出啊,直接是个死循环,什么时候退出退出呢?你你就你就想退出的时候再退出,或者在里边在登录以后里面,你按了那个退出,它也系统退出好这个原因是因为没有引爆。一下包啊,同学们,Go。然后呢,是chart chart room。然后我的这一个是client_UT啊,不是这个啊process pros保存一下代码还有错误吗。发现没有错误了。没错,没错,这OK,好,紧接着看,往里面追一追,老井掉的是谁?掉的是他。哦,他还是帮我们完成了相应的任务,有个L我没有接收而已,没接收也无所谓,好,下面该怎么走怎么走,怎么走怎么走,好,注意在这儿,目的来了。
28:11
因为你在这个登录过后,同学们看这个地方会会告诉你登录成功还是失败,我们这个是通的,所以大家不用担心。我们原先成功以后,我们干什么事,我们啥都不干你就跑了,这是不行的,因为你登录成功,你肯定是要进入到二级菜单吗。你不是说哦,打一个登录成功就跑路了,那有什么意思呢。说这地方肯定要。改掉。所以我们的代码要在这儿做一个改进,注意听啊,这边要做什么事情。这边要做什么事情,做两件事情,第一个。调用调用就是显应该是第一个要显示我们的这个这个登录,登录成功后的,成功后的菜单,这个对于我们来说是VERY11的一件事情,那这个菜单我要循环显示。
29:01
因为我不能显示,一看我就走了,就说什什么意思呢,我就是给你写啊,就说就说就说你输完了过后,你选了过后这个菜单呢,再提示你还可以做别的选项,就跟我们那个原先写的那个客户管理一样的,他会告诉你你还可以选什么,如果你不做循环显示的话,它显示一次。它显示一致的,就不显示你后面不知道选什么东西了,看不到这个菜单了,明白吧,哎,他就说诶你选完了,我把结果给你再说,你还可以选什么,肯定是这样子的吧,好所以说我循环显示啊,显示我们菜单循环显示,注意听。因为我这个循环显示菜单,为什么我这要写呢?因为我这个菜单里面我没有做循环控制,如果你在里面做循环控制,也可以说老师我觉得循环显示没有必要写到外面,我这直接整个在这循环也可以。我就看你看你怎么去设计好吧,当然写到里面可能更更更好一点,对吧,可能更好一点,这个看你的这个选选择吧,好,我先暂时写到外面啊,可以写到里面啊,没有没有任何问题,没有任何问题,我还先按我的思路先走一下,可以写到里边啊,同学们再说一遍。
30:07
就说我这呢,做的稍微简单一点,我就直接for循环,就循环显示菜单,那循环显示菜单是显示的server里面的,它两个不在同一个包。他不在同一个包,OK,那不在同一个包,我们引进去了没有?哦,这个process引process还没引进来。还是一个包啊,同学们,因为这个是呃,Process哦,他们在同一个包,Server和user process确实在同一个包,那就不需要了,直接拿来用,直接拿来用啊,直接拿来用,看一下现在成成有没有成功啊,注意听就差一点了啊,就差一点了,先把它给我写进去。好,吊起来行了。再说一遍,你也可以把这个现在三单全是这个负循环套到里面去也可以,没有区别啊,没有区别,好,代码写完我们来跑一下各位同学,现在代码已经写完了,我们看看能不能够先把菜单选出来,然后这个菜单写完了过后呢,我们最后再加一点东西,最后一点东西就是。
31:10
保持和服务器通讯的这个携程起起来,因为你不能说我把菜单写写出来,你你客户端就啥事不干了,因为客户端还有很多偷偷要干的事。比如说有个用户在线上线了。对吧,我就诶我就马上通过这个这个偷偷跑的这个携程马上把这个在线的那个用户给你显示出来,它显示这个显示终端就行了嘛,如果是界面就是嘟嘟嘟嘟嘟嘟那种声音了,好这个我还没起啊。好,我们来玩一把。保存一下,慢慢玩一把,看看能不能玩儿起来。好,编译一下。从代码上来说没有毛病,没有毛病好服务器端我好像没有关闭,没有关闭我就直接可以用了啊。虽然掩体走。来,呃,第一个呢,我们先说一个错误的。
32:00
200。然后呢,密码ADC这个不存在,好,我退出了也很正常,说该用户不存在,请注册再使用,这个逻辑是正确的,因为这个时候他走到哪去了呢?他其实走的这个逻辑。500吗?他走到这,诶给他返回一个错误,说不存在了,这个信息A不就是从服务器里面带过来的吗?对吧?OK,那现在呢,各位朋友,各位朋友啊,那现在呢,我们输一个正确的,看一下OK不OK,走输入一个正确的ID,再输一个123456回则。哎,登录成功过后,他怎么说,登录成功之后你就。我是重新生成的,这不是这个,怎么还在这呢。各位朋友。我编译有没有,我有没有重新重新编译。我编了译了呀。诶,大家看这个。哦,什么意思啊?
33:05
规律一个要加慢哦,这是什么玩意,这是谁写的这个哦,是不是还跑到以前那个去了啊,应该有个命,因为我们是。我们是重新搞了一版吗?好,这个就对了啊,同学们提醒的很到位。好,再来走来这是输,直接输正确的123456回收各位同学可以看到啊呃,恭喜谁谁谁登录成功,到时间这个叉叉叉是要求同学们显示出来的,那你得想诶登录成功是谁呀?是张三还是李四呢?哎,他的ID是多少对吧?选择一,比如现在我输一个一,大家想一下它会怎么办,它会继续显示菜单。他把这个提示出来,先输入二也是一样,输入三,因为我是循环显示菜单,第三第三个进列表,第四一个是不是就退出去了呀。没错啊,但是这个写完了过后,还有一件事情没有做,因为你这样做的话呢,其实你在显示菜单的时候,有一个最致命的问题,服务器那边假设你的好友上线了,你是不知道的,再比如说打个比方,另外你有一个人,他群发一个消息。
34:10
你拿不到,因为你的链接,你的链接其实这个时候,因为你不知道什么时候人家发这个,什么时候你要发这个群发,因此呢,我们还得起一个携程。这里。这里我们还需要在在服在客户端,客户端新启动一个这个隐藏的吧,我们叫就就就一个携程吧,携程这个携程干什么事情呢?该携程该携程保持。保持和这个很有用啊,后面要用用得上的啊,该携程保持和服务器端的和服务器端的一个通讯。那么通讯有什么用处呢?如果服务器有什么东西发给我们,我们可以及时的接收并显示,注意听啊,如果服务器。
35:02
服务器有有数据,有数据推送给我们叫推送啊,这个专业数据叫推送。如果我们取的话呢,我们取的话,我们就直接盖着,对,如果服务器直接给你拿,我直接给你发,我们叫推送啊,因为推送消息啊,推送,如果服务器有数据推送给我们。给给这个客户端,客户端,比如说有个张三给你说话了,对吧,哎,张三说诶我要给谁说话。那你那你是不是应该马上先说,诶张三给我给我们说话了,你马上嘟嘟嘟,有个人说有在呼你对吧,是推送给客户端可以接受并显示则。则接收,接收并并显示在显示,显示在这个客户端的这个终端。啊,客户端的终端OK。那这个是不是有logo呢?大家想一想,是不是我应该起一个这玩意儿很简单,写一个就行了,这个简单啊,咱直接写一个函数方式,那么我估计估计就叫这个名字。
36:07
叫做server。啊,咱们就叫server。Server process。啊,Message这个名字看这样叫好不好啊,叫做r process message应该是处理server message这样子更好一点是吧,你看这样子其实意思是这个处理server推来的消息,但是这个名字也可以这样叫,也行哈,也行,但就看你你的习惯了,就看你的习惯啊,有些人习惯把service写前边,嗯,也可以,这这不是大事啊,不是大事。好了,那这个地方各位同学,你要保持一个通话,你是不是得想办法把这个连接给人家传过来啊,啊,你没有连接,我没办法跟跟他保持一个通话,所以说这边应该接收一个,至少要给我一个传一个连接过来,我才能给你保持一个通话嘛,那这个时候怎么保持通话呢?肯定是一个for循环,我一直在这读。
37:04
对不对,所以说你在这儿呢,大家看到,因为你在user process地方是能够拿到这个连接的,你把这个连接给他,给他,他来想办法保持连接好,这个代码有了啊,有了最后是。和服务器端保持通讯的通讯。好代码就有了,来走一个for循环,For循环我就不停的读嘛,那读的时候呢,大家想很简单,因为有连接嘛,有连接你读的时候显然要用我们这个包包来读了,对不对,所以说你先创建一个,哎,创建一个看这有有点通的感觉了啊,创建一个川十粉实力,有点通的感觉了啊同学们穿十粉实力。然后呢,让他不停的读消息。不停的不停不停的读取,读取这个服务器,服务器发送的消息。
38:00
发送的消息大家都知道有一个前提啊,只要服务器那边没有断到连接。我也没有断到连接,那么读的地方它会卡顿的,诶读读读读读,你给我,如果你只要不关,我就一直在那读,对吧,所在的地方呢,这个代码就应该这样写了,那就简单啊,TF走,你看这整个全局的更好啊,整个全局你看我每次这样写有点麻烦。Us第二,穿石粉。大家看这个越越来越往里面深入了啊。川石粉粥。好,那这个时候需要我们引一个utr包,有吗?好像没有,那么utr包呢,应该是在别的地方用过,我就直接复制过来啊,同学们,Utr包就省点事,各位朋友好,把它扔到这UT包邮了,那UT包过后呢,我传进点,传进过我就用它TF点。Read。PKG,注意他读完了过后,他会给我们返回一个什么东西,还有印象吧,诶,他应该给我们返回,我不知道,我看一下他应该给我们返回一个message和一个error,这个message都已经给你序列化过后的了啊,他到底是什么消息,其实已经咱们这儿可以拿到了,因为我们是做封装的,好,现在呢,我们拿到这个消息,如果真的有有东西给我们推过来,我们就马上第一时间就能拿到。
39:20
因为你,因为我会阻塞在这里,这边有个前提啊,就说只要对方不关闭连接,我会在这一直读,而且对程序的效率没有影响,因为连接只要是畅通的,他就一直阻塞在地方,诶有没有东西,有没有东西,有没有东西前提要知道这个逻辑啊,这点是特别重要的,好那么这个地方我就写一句话,就客户端。客户端不停的读取提示一下啊,客户端客户端你可以把他的那个呃,地址打印出来,谁呢,我可以提示一下啊,给大家一个小小的提示,客户端谁呢?不知道说出来客户端地址。读取正在啊,正在。
40:01
啊,正在等待,等待读取服务器发送的,发送的这个消息。啊呃,客户端自己的IP哦,自己的IP就是本地这个没什么可看的,你可以看是哪个服务器发的,因为将来有可能还有多多个是吧,算了,我这先暂时不去,因为本地的这个IP也没什么可看的,这在读取复方是消息好写完了,那写完过后呢,呃,这边就判断一下,呃,如果读到的话呢,如果出错了,就说假设我在不停的读,突然出了一个逆啊,出了一个等于等于一个错误了,那说明对方有可能关闭这个了,那这个错误呢,我们可以再去自定义,就说他可能是对方服务器瘫痪了,或者种种原因,反正读错了,读错过后我们提示一句话就是我们就不玩了,我们也也也就不在这死循环了啊,直接让他去做处理。好,我们打一下点print LN,我们说服务器端出错了,就说read出错了,L。
41:03
L等于好,ER2等于走ER好,然后呢,这边就不玩了,Return,如果它没有,嗯,没,如果他没读到一个东西,还没有出错,那就是下一步处理逻辑了,可能是诶显示啊,或者怎么样,那是下一步逻辑啊,如果读取到了,读取到了这个消息。好消息,那么就是下一步处理逻辑了,又是又是下一步,下一步处理逻辑。好代码呢,差不多了啊,我这儿先暂时的把它输出来就可以了。或者先暂时输出来啊,Message等于啊,如果读到的话呢,我们就就把它输出来就行了,对,现在应该读到,因为我没有发东西。好,代码写完调用它一下,怎么把它调起来呢?Ne。Net没有引进去,怎么把它调起来呢?非常的简单,在登录成功以后,我们只需要够一下就行了,大家看这是你登录成功以后的这个效果,然后呢,Go。
42:05
够什么呢?刚才的server。Process。Message,对对,这意思啊,好让它跑起来就说开一个携程,开启一个携程,因为我只起一次啊,还要传一个C。我启一次好,启动一次过后,他就在那不停的等待,读读读读好这边呢,主菜单也在显示,如果你这个携程里面有东西,打到这个客户端也能看到。好,这这这样大家是不是要要扩展起来啊,要扩展起来,好朋友们,代码写完了,我们来验证一下哪地方有问题,好像12分。在这地方有一个对对对对,同学们说的很对啊,OK,那么这地方我少一个东西,同学们来验证一下我们代码到底OK是不OKOK。好,编一下。变压服务器那边没有变化,所以说不用动不用动,我们只看这里啊,Client走。
43:03
OK,克兰,走啊,少了一个妹。Mean。再来。Client client。好,嗯,这个时候应该正常情况下啊,登录成功过后,我们会看到有一个呃,携程在那偷偷的在在那工作,但是呢,现在应现在应该是卡,应该是主塞在那,应该是主塞在那。因为你服务器现在没有没有别的用户给他发东西,好密码123456回收。好,看到有错误了啊,看哪里有出错。好的。他这边报了一个错误,他说嗯,客户端正在等待读取服务器发送消息,然后读取客户端发送消息,没有卡顿。读取客户端发送消息,那么在哪里错误呢?说无效的一个memory or空的一个指针,指针异常啊。呃,他说这个大概是在read package出了问题,具体来说是UT2点够24行,这个代码应该没毛病,这个代码应该没毛病,那我们看哪地方传进是43行。
44:13
43号出了问题,来看一下43号在哪里?那么43行其实就是read。Read的时候。没有哦,我明白了,这个是因为我们穿没有把那个connect传进去是吧,发现没有,因为它里面读的时候,他会去从这个TF把那个connect取出来,但是connect什么都没有,那肯定就。出错出出大问题了,怎么传呢,是不是就是你这传过来这个这个东西啊,这个应该是小写一下。好,这样这样就可以了啊,这个地方应该有一个好。好,这就没问题了啊,就差那一点啊,就差那一点,各位同学好。OK,编译一下,走来吧,同学们再跑一下,走人。好一来输一个100,输一个正确的3456回撤,好同学们可以看到大家看现在的情况是这样子的菜单。
45:08
在这里,然后呢,客户端正在等待读取服务器发送消息。OK,因为现在他没发东西,所以卡在卡在这了,现在呢,我如果输输这个输一个一好显示,其实那个后台那个构形程卡还在读。还在读,只是一旦读到东西了,过后呢,你可以把这信息显示在这个这个终端,好,这是我们的一个改进,同学们我把代码给它整理一下啊,好,这个思路咱们就有了。我把这个思路给大家整理一下。比较。啊,第一次大家写的时候肯定会比较累一点。后面呢,就慢慢慢慢的就好了。诶,我们看一下这是我们的一个包,那具体来说这个步骤我们看一下啊,首先呢,我们把这个u tr直接粘过来的。将。第一步是步骤啊,将什么呢。
46:03
将这个服务器端的服server。Ser v2下面的U72点拷贝过来了。拷贝到哪里呢?这个urs下面的urs点够好,这第一步就做完了,第二步呢,我们,呃,这个user我们修啊,就就说什么呢,对。创建。哎,创建了这个server目录下,Server目录下的一个process下面的user process。点够好,具体来说代码呢,我们往这儿给大家复制一份啊,复制一份大概就是用于代码,其实就是把原先那个够拿过来改了一下而已,所以说我这呢,就就简单的把它这个文件的这个头拿过来就行了,其他我不粘了啊,因为它的代码就是原先那个构点捞捞进点go展展过来的。
47:04
好,具体下面的代码说一下啊,说明这个文件说明。啊,说明就是该文件,该文件就是在原来的原来的这个logging.go上做了一个修改的,做了一个做了做了一个改,那个就做了一个改进,啊改进就是把它封装到这边呢,改进。改进。啊及封装到及封装到哪个地方呢?封装到这个user process。CES点这个结构体。好,这个也说完了啊,紧接着呢,我们又做了这个server,这个地方改动呢,是新的,这个是新东西啊,然后呢,我们增加了这个创建了这个server目录下面的一个process下面的server go OK,那具体来说这个文件怎么怎么搞的呢?诶就是这么一点东西。
48:07
朋友们。对,思路很清晰啊,思路非常的清晰。从这里可以看出来,客户端的改进比服务器端应该是稍微的简单了一些。对,稍微的简单一些好,27行全部接完。好,27行。对,27行啊。好,老师,把这段代码也复制到我们的笔记里边去,这是第50、51行。接着往下看,51行好,51行过后呢,这下下面没啥东西了啊,整了两个括号过来。也有用啊,它是一个整体,然后这个做完了过后呢,诶,我们又改了什么呢?我们改动了这个命点构,命点构改动,其实呃,就是这改了一下啊,就改了这一点点啊mean mean就是server server main包下面的main点勾。
49:02
做了一点修改,修改的地方很少。就在这儿加了一点东西。哎,就在这儿加了东西,我直接把这块代码。拿过来,然后呢,我给他标一个红线啊,就这。啊,一点点一点点的改进,一点点的改进。好了同学们,那关于我们这一个就是客户端的一个结构的改进呢,咱们就先给大家介绍到这里。
我来说两句