一种远程重定向方法和装置的制造方法_2

文档序号:9814387阅读:来源:国知局

[0028]第一种方法需要对现有游戏客户端进行修改,在云游戏的现有逻辑代码中加入键盘鼠标消息的接收和处理模块,不具有通用性。
[0029]第二种方法在服务器的系统层进行,对系统全局的键盘鼠标状态都有影响,当服务器上运行多个Tracer端时,多个Tracer端会相互影响,导致每台服务器只能提供一个Tracer端,不能充分利用服务器资源。
[0030]为解决上述问题,本发明实施例提供一种远程重定向方法和装置,用于支持在服务器上运行多个Trace端且不用修改Trace端的现有逻辑代码。下面通过具体实施例,分别进行详细的说明。
[0031](实施例一、)
[0032]请参考图4,本发明实施例提供的一种远程重定向方法,所述方法应用于云交互系统,所述云交互系统包括服务器和用户设备,所述服务器中运行有至少一个交互式应用的至少一个Tracer端,第一Tracer端是所述至少一个Tracer端中的任一Tracer端;所述云交互系统运行的交互式应用可以是云游戏,此时云交互系统也可以称为云游戏系统,本文以云游戏系统为例进行说明。
[0033]所述方法可以包括:
[0034]110、所述服务器获取所述用户设备侧的输入装置的控制操作。
[0035]所述服务器可以通过接收所述用户设备发送的、封装有所述用户设备侧的输入装置的控制操作的消息,并解析收到的消息,来获取所述用户设备侧的输入装置的控制操作。所述输入装置可以包括键盘、鼠标、手柄、触摸屏等装置中的一种或多种。
[0036]120、根据所述控制操作更新第一状态表,所述第一状态表用于所述第一 Tracer端记录所述用户设备侧的输入装置的操作状态。
[0037]本发明实施例中,在每个Tracer端增加一个状态表,该状态表专门用于记录所述用户设备侧的输入装置的操作状态。以第一Tracer端为例,增加的状态表记为第一状态表。第一 Tracer端每次获取到用户设备侧的输入装置的控制操作,都对第一状态表进行更新,使得Tracer端和Retracer端各自记录的输入装置例如键盘鼠标的操作状态同步。该第一状态表可以是仅用于记录用户设备侧的输入装置的操作状态,而不记录其它输入装置的操作状态。
[0038]130、根据所述控制操作生成相应的控制消息,将所述控制消息传递给所述第一Tracer^Mo
[0039]服务器每次获取到用户设备侧的输入装置的控制操作,除了更新第一状态表,同时,还根据所述控制操作生成相应的控制消息,将所述控制消息传递给所述第一 Tracer端,具体的,可以传递给所述第一Tracer端的消息处理函数,用于被第一Tracer端的处理逻辑处理。
[°04°] 140、将所述第一 Tracer端的用于获取输入装置的操作状态的指令,采用Hook技术重定向到所述第一状态表,以便所述第一Tracer端根据所述控制消息和所述第一状态表进行逻辑处理。
[0041]本发明实施例中,对第一Tracer端的用于获取输入装置例如键盘鼠标的操作状态的指令采用Hook技术进行重定向到所述第一状态表。第一Tracer端进行逻辑处理时,根据所述控制消息和所述第一状态表进行。
[0042]其中,所说的指令具体可以是API(Applicat1n Programming Interface,应用程序编程接口)。所说的Hook技术是指:把原本的函数执行过程替换成自定义的函数,Hook可以接触到需要修改的Api函数入口点,改变它的地址指向新的自定义的函数。
[0043]为了实现将获取输入装置的操作状态的指令Hook到第一状态表,可以采用双重重定向,首先Hook到游戏的主线程中,再Hook到用于获取输入装置的操作状态的API。于是,一些实施例中,本步骤具体可以包括:
[0044]采用Hook技术注入到所述第一 Tracer端的主线程;
[0045]在所述主线程中,再对所述第一Tracer端的用于获取输入装置的操作状态的API进行Hook,使得所述第一 Tracer端的用于获取输入装置的操作状态的指令被重定向到所述第一状态表。其中,所述系统API例如可以是用于显示鼠标的API,或者也可以采用其它的API。
[0046]其中,采用Hook技术注入到第一Tracer端的主线程的步骤具体可以包括:对所述第一Tracer端的主线程会调用的一个系统API进行Hook;当所述系统API被调用时,注入到所述主线程。
[0047]值得说明的是,这里可以有两次Hook,第一次Hook是对游戏主线程会调用的系统API进行Hook,目的是注入游戏主线程;第二次Hook是当成功注入游戏主线程之后,在游戏主线程中对调用的系统获取输入装置的操作状态例如获取键鼠状态的API进行Hook,目的是重定向到Tracer端保存的第一状态表。
[0048]这里所说的系统API是指游戏主线程一定会调用到的系统API,这是因为不掌握游戏主进程的源代码的基础上,要注入到游戏主线程中,只能预判游戏主线程一定会调用到什么系统API,通过对该系统API的HOOK,进而注入游戏主线程,达到对游戏主线程的控制。
[0049]举例来说,所述系统API可以是用于显示光标的API,即ShowCursor API;或者用于创建窗口的API,即,CreateWindow API。但必须注意,并不限于以上列举的两种API。
[0050]由上可见,本发明实施例中,提供了一种远程重定向方法,该方法采用Hook技术实现重定向,不用修改Trace端的现有逻辑代码;各个Tracer端使用各自的键盘鼠标状态表,且重定向过程在Tracer端内部完成,因此,各个Tracer端的远程重定向操作不会互相影响,从而支持在服务器上运行多个交互式应用的多个Tracer端。
[0051 ]请参考图5,是本发明实施例中一种云交互系统的架构图。云交互式系统可以理解为是云游戏系统。
[0052]下面,结合系统架构图对本发明实施例技术方案做进一步详细的说明:
[0053]如图5所示,用户设备上运行有Retracer端,服务器上可运行有多个Tracer端。用户设备和服务器都有各自的输入装置,所述输入装置可以包括键盘、鼠标、手柄、触摸屏等装置中的一种或多种。下面以输入装置包括键盘和鼠标为例,用“键盘鼠标”指代输入装置,“键盘鼠标”可以理解为键盘和/或鼠标。但需要说明的是,“键盘鼠标”也可以替换成其它任意的输入装置。
[0054]在用户设备侧,Retracer端可以通过消息处理函数,从系统消息队列中,获取和记录用户对Re tracer端的键盘鼠标控制操作。Retracer端可以通过消息封装函数例如键鼠消息封装函数,将获取的键盘鼠标控制操作,封装成消息,并发送到Tracer端。
[0055]在服务器侧,Tracer端可以通过键鼠消息解析函数,接收并解析Retracer端发送的消息,获取用户设备侧的键盘鼠标控制操作,并重新生成对应的控制消息传递给消息处理函数。
[0056]本发明实施例中,在Tracer端利用一个专用的状态表来记录所述用户设备侧的键盘鼠标的操作状态,即上文所述的第一状态表,Tracer端每次获取到用户设备侧的键盘鼠标控制操作,都对第一状态表进行更新,保证该第一状态表和用户设备侧的键盘鼠标的操作状态同步。
[0057]在服务器侧,还对Tracer端的用于获取键盘鼠标状态的API进行Hook,将Tracer端处理逻辑中获取键盘鼠标的操作状态重定向到Tracer端保存的第一状态表记录的用户设备侧的键盘鼠标的操作状态。
[0058]于是,Trac
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1