登录模块相关代码分析

来源:互联网 发布:软件认定企业查询 编辑:程序博客网 时间:2024/05/16 19:54

登录服务器

一.登录模块loginserver流程

1、主函数

(1)取到端口PORTPORT2,分别是300018188

(2)新建服务器引导,服务器引导ServerBootstrap——服务器套接字管道工厂NioServerSocketChannelFactory——由实施者Executors来开启缓存的线程Executors.

newCachedThreadPool()。

ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));

(3)设置管道工厂bootstrap.setPipelineFactory(new ServerPipelineFactory());

(4)服务器引导绑定端口PORT

bootstrap.bind(new InetSocketAddress(PORT));

(5)重复上述步骤,绑定端口PORT+2和端口PORT2作为游戏服的管理端口

(6)使用init()函数进行初始化,并设置GM链接管理器的端口为(PORT+3),并打印listen on+端口PORT

GmServer.connect(PORT + 3);

2、init()初始化函数

(1)config.init()此函数主要是用于对配置文件server.xml的解析,拿到其中服务器列表的一些数据。1config.java中读取server.xml文件,解析该文件,并用document来拿到file文件内的元素。2、拿到versionloginversion和游戏IP,以及server服务器列表文件元素。3.取到服务器文件元素里面的游戏服信息,打印名字和IP,并把他们存入到服务器列表容器中。4.拿到最新的jar包对应的SDK文件元素,将SDK文件元素存放到map中,并打印出来。5.关闭file

(2)I18N.init()国际化的初始化

(3)GameProtocolHandler.parseOpConfig();协议解析器的初始化,主要是解析opclass.ini文件。输出一下内容:(ini文件后缀就是初始化文件)

0x00+0:C2SLogin

0x00+1:C2SRegUser

0x00+2:CSCheckRC

0x50+0x00:C2SCmdParser

0x50+0x01:C2SPlayerUpdate

0x50+0x02:C2SUpdatePassword

0x10+0x01:C2SAccountInfo

0x50+0x03:C2SCallOnline

0x50+0x04:C2SGetServerInfo

(4)new OnlineServer().start();启动在线的服务器

OnlineServer()run()——getOnline()

主要作用是启动所有的在线服务器,对服务器列表中的所有服务器地址IP1发送请求,若返回http状态码不为0,则服务器启动正常,为0,则启动失败。

启动完所有服务器,记录时间,自动推荐服务器。若用户连接等待时间小于5分钟,等到5分钟;若等待时间大于5分钟,等待5分钟。

(5)LoginLogs.startLogThread();//启动日志配置和守护线程

两个方法init()LogWorker(),其中init()主要是用于初始化日志文件的写入路径,

在D:\java-workspace\Gamelog/log_login_01/路径文件不存在的情况下,

将日志的路径设置为logsPath:D:\java-workspace\HunterLoginServer/log_login_01/。

而LogWorker()的作用是调用刷新方法flush(),在之前的日志路径下以时间为命名文件夹,以0-9的数字为日志文件,向文件中写入数据,以@作为分隔符。

二、各渠道登录接入口流程Meizu渠道 M360LoginImpl.java 

(1)actionLogin()函数返回值为loginBean

  1、先拿到账号,查询第三方SDK平台是否有登录的账号信息,若没有,则返回为空。若第三方登录平台有返回信息rc,则将返回的信息变成json的格式jb,拿到响应jb中的access_token参数   2、访问另外一个URL,得到响应,拿到响应中的id信息。通过“id+127_360”和渠道id在数据库中用SQL拿到loginBean的信息。如果数据库中loginBean信息不存在的话,就自己根据已传入的用户信息生成一个loginBean。最后拿到的loginBean不为空,且loginbean状态码正常为0,就返回。

2M360LoginImpl.java的主函数main会发送请求对appidappkeyappsecret等参数进行赋值。同时登录页面提交form表单的时候,就会调用actionLogin()来执行登录过程。

三、M360LoginImpl.java的父类absLoginImpl.java


 

ThridLoginService.java的作用是根据不同的渠道Id来调用不同渠道的登录接入口,并且重写父类抽象线程类absLoginImplactionLogin()方法。

ThridLoginService.login() 函数拿到第三方的unionid,调用loginAdt(),拿到对应渠道id的渠道接入口LenovoLoginImpl.java.启动这个文件,实现第三方的登录。

例如渠道为91010,代表要新建一个联想设备的接口。

else if ("91010".equals(unionId)) {

impl = new LenovoLoginImpl();// 联想

 

四、S2CLoginFail()函数主要的功能是给客户端发送登录失败的信息,发送完后断开连接。

支付服务器

一、本地渠道json包——unions.json

   主要用于存储渠道的相关属性,如果本地要取得渠道的属性值,就可以调用json包。比如支付服务器要构建渠道表单页面,就可以解析json包的params属性来得到有哪些文本项。

二、payserviceiTools.jsp

这个文件主要是对第三方支付服务器发送过来的请求进行验证。如果我们用MD5加密后得到的sign值与发送过来的签名内容一致的话,支付通过。这样主要是防止中间有修改支付发送json包的可能,避免刷单。


0 0
原创粉丝点击