00:00
我们继续编写。那现在呢,我们开始编写客户端的代码,从前面分析,我们知道客户端这边呢,咱需要有三个文件。一个是启动的,第二个呢,就是还有一个handler。这个客端代码相对不是那么好理解了啊,待会呢,我在讲的时候可能需要同学们认真的去理解一下,我这里呢,先写handler,为什么先写handler呢?因为在编写过程中,Net client还有这一个。T都会跟handler有相应的关系,调用关系,所以说我先写client handler,那打开我们这个代码,我们现在开始编写handler。老子谢谢na。Clan。Her。稍等。在写这边呢,我们显然是先要继承,对不对,继承。
01:02
我们继承哪一个呢?China以前用过的。Chinabound没问题,同时呢,我还要实现一个非常重要的接口叫。大家看到我这,诶这写错了。Able就他。对,就烫。那大家知道老师为什么要去实现这个接口吗?因为这个接口里面有一个特别重要的方法叫call,叫调用,这个方法呢,对我们后边是有非常重要的作用,好,那现在我一时半会呢,还说不到哪去,待会大家知道这个实现这个接口是非常有用的,我来。实现它的方法。接着往下面继续先写着吧。呃,除了实现这个靠方法之外呢,我们还要定义相关的一些属性和方法,来,我们来写一写,要重写哪几个方法呢?我们来看一个是China active。
02:02
还有一个China read。OK,这两个方法我们是需要重写,还有一个处理异常的,我要写一下。对处理异常的,我也需要处理一下,然后还有哪个呢,我们再看看还有哪个需要处理的呢。好,Call这边有了。括号这边有了异常的变数了,对,这这三个方法是最基本的,先把它写进去。那现在呢,我把相关的属性也定好,注意现在就现在写的handle跟我们跟我们以前写的有点不一样,大家认真听,我先定义几个属性。首先我先第一个China。Har。Context,哦,我先拿到我,我这个人将来会在不同的方法里面使用,所以说我需要先得到这个context,待会。另外一个呢,我还需要有一个结果。使菌就他这调方法的时候呢,调方法的时候,它会返回一个结果,还有一个什么属性呢,就是参数,这个参数就是。
03:05
就是待会儿那个调服,就是客户端调方法,调方法的时候传进来的这个参数,他。啊,这个就是客户端调用调用方法时传入的。传入的参数。那这个当然就是将来返回的结果,就是将来啊,就是将来调用后返回的结果。返回的结果,而这个就不用说了,就是我们的handle context,就是上下文。OK。好,继续往下写,那现在呢,我们就按照这个流程一步一步写,我们先写这个呢,这个active,这个active大家还记得它是干什么呀,是与服务器。与服务器干什么呀,与服务器的连接。连接创建。而创建。成功后创建后。就会被调用。
04:01
就会被调用,因此呢,我在这里要做一件什么事情呢?我在这里就把这个ctx传给。Context,因为我在其他函数要用用到它,所以说我把它做成一个属性的,这里呢,我先这样子哈,来我这把它设置一下。等于CPX,为什么我要做这件事情?因为我需要在其他方法里面也要用到当前这个handler的上下文。为什么这样做,因为。因为我在其他方法,其他方法会使用到,使用到慢呢,使用的这个ctx,因此我把这个CX传给了一个属性,好下面这个read的方法,大家应该很清晰的知道,这个RA的方法是什么时候被调用呢?就是收到服务器。服务器的数据。后啊,收到数据后干什么呢?就会调用调用方法。
05:02
这地方有点不好理解,大家认真听哈,认真听,我这里面要写这样几段代码。拿到代码呢,首先我。我要。把这一个MSG,就把这个MSG传给。Result,所以我要这么写。等于MSG。就是把我这儿读的消息传给他。对传给他,那传给他这里面因为类型不匹配怎么办呢?顺一下就可以了。好,下面有一个方法特别的重要,叫notify。诶说老师这个楼体派是干什么的呀。这个notify大家应该很清晰的知道,学过Java的同学都知道,这个notify是干什么呢?他是要去在他说接到接收到服务器数据以后,调用这个方法干什么呢?他要去唤醒等待的线程,就这个方法是唤我写到这也可以。
06:01
唤醒。唤醒,等待。等待的县城。这在这个编程我们在前面都没有用过,诶为什么要等待等待这个线程呢,它是这样子的,同学们,我简单画一个图,可能现在说的不是很清晰啊,他可能是大概是这样的一个,这是我们客户端。这是我们的服务器端。问题吧,好。那那将来我们在真正这个客户端这边有handler handler呢有一个call方法。Handle有个call方法,其实我们在这个客户端调的时候,调方法时其实是先通过这个call调用我们方法,把数据先发给我们服务器端认真听。在这个号里面呢,它会把数据发给我们的服务器端,服务器看他这个一发回发过去过后呢,因为这个方法它是通过我们反射机制来调用的。他掉完了过后,这个这个消息还没有马上回来,所以说在call里面呢,我会马上让这个方法进行一个Y。
07:08
违停,那而且大家知道基于ni这个原则,基于个原则,服务器端回送的数据其实是回送到我们handler的这个read的方法,就China read的方法能理解吗?对,也就是说他在这个地方,他会把这边回复消息。嗯,传送给我们handler的China read的方法。好,China的方法拿到以后呢,这个wait方法,因为他在等待,他没返回呢,因为这个是通过,相当于说通过我们这个proxy。一个代理对象来调用我们这个call,这个handle的call方法,他调完了过后,他把这个信息发过去,发发过去过后呢,他就在这等待,等待完了过数据是发给我们这个handle的另外一个方法,所以说我在这有一个notify唤醒它,一唤醒它这个代码就能继续往下执行,执行的时候在这个地方我已经把结果给到。
08:01
给到这个result了,然后这边再把结果返回给我们代理对象,他是这样一个流程。所以说这个地方听起来有点绕,我也没有办法好,因为这个代码你要写完了才能去测试,好的说等待唤醒的线程,那接着继续往下写吧,不着急啊,嗯,大家只要认真听都是可以听懂的,本身代码呢,并不是很很难,那大家看到刚才根据老师的分析,这个China read和这个靠方法呢,其实它是有一个同步关系的。对不对,所以说我要在这里加一个东西,大家理不理解。我要做一个同步的一个控制。那这边呢,呃,理解了过后继续往下写,那我们现在写这个靠这个靠这个方法呢,是我说一下靠这个方法其实在这里是一个非常重要的作用啊,这个是干什么呢?是。被代理对象。被代理对象调用。OK,被代理对象调用,然后呢,这里要发送数据,它是真正的发送数据给哪个呢?给服务器。
09:10
并且呢,它会。发送完了过后,他就等待被唤醒。等待被唤醒。因此呢,它有一个动作叫wait。发送完了过后,他就这样子,他一发送完了过后他就which。Wa,因为这个结果呢,不是返回给他,根据ninety的,根据ninety的,嗯,这个框架的规则,它是给到全read了,所以他马上要waiting waiting过后呢,等待被唤醒,等待被唤醒过后再返回结果。OK。啊,有点绕,是不是返回结果,返回结果好,那现在我就开始来做,同样既然他跟这一个China read是一个被谁唤醒,我说一下是被这个China read。方法唤醒,因此这俩哥们呢,这两个哥们他是要进行一个同步控制的,所以说我在这呢,不用犹豫,不用彷徨,我们加也要加个。
10:02
加控制。好的,那现在呢,这个代码我要怎么写了呢,朋友们。我要这么去写。首先呢,我在这要把是不是在上面这个方法是第一个被调用的,大家还还有印象吧,这个该方法。该这个方法。这个方法是第一个被调用的,因此这个方法调用的时候呢,这个contact其实已经有内容了,因此我在用它发消息给我们的服务器。什么呢,Parameter?啊,这个就是我们不上讲了吗。用户端调用方法,使它传入参数。我要把这个程序,但是他这个肯定要提供一个方法了啊,待会再写这个方法发过去,发过去,这这个就是相当于说我们发送给服务器的那一个消息,准确的讲就这个东西我现在可以跟给你们找到,就是相于哈,相当于就是我们server端得到的这个玩意。
11:01
能理解了吧?就是这个东西。好的,回到这边继续写。那发过去过后他要干什么呢?因为这个结果现在没有马上返回,因此他他马上干什么呢?进行一个违停。哎,Waiting,这个我们在写编程学过这个对吧,Waiting。Waiting停,Waiting定完了过后,是不是这边结果就返回给China read把把你楼梯板唤醒,唤醒是不是下面有可以继续走了,而且他把你唤醒的时候,这个结果是不是已经拿到了,这时呢,不用犹豫,直接干什么呢,Return。这个服务器端返回的结果。这些话被唤醒啊,这个是要等待。等待。哪一个唤醒它呢?等待China。得到解,等待这个方法,等待这个方法,呃,获取到获取到慢呢,获取到服务器的结果后。唤醒我唤醒。缓刑。那唤醒完了过后,大家看,因为在这个结果已经给到这个result,说因为这个result是返回的结果,它是一个属性嘛,说当这个方法执行完毕过后,Result已经有结果了,就是服务器的结果,这个就是服务器。
12:13
服务器返或者叫服务方吧,服务方返回的结果,哪个结果呢?说的再具体一点,就这哥们儿。就这个地方。同学们看这。要么是这个,要么是这个,明白了吧,啊OK,好,继续继续。回到这边来,那现在呢,我们看看看着啊,这边靠也写完了一个方法,写完了,这边写完了这个地方我们就简单一点,直接关闭。可以了。如果真的有异常哈,那就call调用完了,这边也没问题了,这同步也做了,还差一个方法就是这个per。这个per parameter呢,这个地方你需要提供一个方法,让我去设置这个参数,对不对,如果你不给我这个方法,那没办法,所以说我还需要来编写这个set parameter方法。
13:06
我在这写到屁股后边吧。那就写什么呢?A VO set。好,你到时间给我再调方法,之后你把要发送的数据给我设置过来。怎么写呢?This parameter。等于啊,你传接的permit。好的,那各位同学,我们看这一个方法有了两个,三个,四个,五个,那么将来调用的顺序是什么顺序呢?我简单给大家梳理一下,这个顺序是这样子的,这是第一个被调用的。OK,然后呢,在启启动的时候,这个呢,是第二个被调用的,就是我们要设置参数。调用方法之前先把参数给到他,这是第二个被调用的,第三个被调用的呢,同学们。就是我们的。这一个第三个被调用的。
14:02
对第三,诶不是啊,不好意思,第三个调用的应该是他。应该是这个call,到时候我们第三个被调用,第三个被调用过后呢,这个是第四个被调用,而这个第四个被调用完了过后呢,他又回来继续再调用,继续回到这个call执行预示,因此它这个还会有一个下一个步骤。就他删完了过后呢,等待他会,他会waiting waiting,等待这个事执行完,执行完等待你唤醒我,然后呢,我又回到这,所以他这边还会继续执行这个瑞,因此它有三完了过后到四,四完了过后到五,如果出了异常就到这来。各位同学,关于我们这一个c handle写完了,我之所以要去写,为什么继承这个C接口,就是要用它的call方法。有点绕是不是?没关系,同学们,我写完了过后再把最后这个写完,我们一次是一马平川,大家稍微忍耐一点,下面就剩下一个ninety,还有一个P了。
15:03
好,那这两个内容我们下个视频讲解。
我来说两句