GS踢玩家下线功能】的更多相关文章

GS踢玩家下线功能 //key:userId, val:nChannelId (当前在线用户) std::map<int, int> m_mapOnLineUserByUid; ///< 当前在线用户,用户Id,对应ChannelId //所有在线的玩家通道 std::vector<GameChannel*> m_vecChannel; ///< 所有在线玩家连接 主要就是通过这两个容器实现 == strncmp(User.m_szUserPwd, m_pUserInf…
玩家下线,之前一直感觉这个过程有点复杂 else if (stat == link_stat::link_disconnected || stat == link_stat::link_connect_failed ) { GameChannel* pDisconnectGC = m_vecChannel[rPkt.channel_id]; if(pDisconnectGC) { //如果进入了地图,保存人物信息时会调用push_freeQueue + 滞空m_Channels[channel_…
强制下线功能算是比较常见的了,很多的应用程序都具备这个功能,比如你的QQ号在别处登录了,就会将你强制挤下线.实现强制下线功能的思路比较简单,只需要在界面上弹出一个对话框,让用户无法进行任何操作,必须要点击对话框中的确定按钮,然后回到登录界面即可.下面我们就来一步一步的实现这个功能: 第一步:创建一个活动管理器ActivityCollector,用于管理所有的活动 第二步:创建所有活动的父类BaseActivity,继承AppCompatActivity 因为所有的活动都是继承该活动,所有我们在该…
强制下线功能应该算是比较常见的了,很多的应用程序都具备这个功能,比如你的 QQ 号在别处登录了,就会将你强制挤下线.其实实现强制下线功能的思路也比较简单,只需要 在界面上弹出一个对话框,让用户无法进行任何其他操作,必须要点击对话框中的确定按钮, 然后回到登录界面即可.可是这样就存在着一个问题,因为我们被通知需要强制下线时可能 正处于任何一个界面,难道需要在每个界面上都编写一个弹出对话框的逻辑?如果你真的这 么想,那思维就偏远了,我们完全可以借助本章中所学的广播知识,来非常轻松地实现这一 功能.新…
一.基本概念 强制下线功能功能应该算是比较常见的了,很多应用程序都具备这个功能,比如你的QQ号或者微信号在别处登录了,就会将你强制挤下线.只需要在界面上弹出一个对话框,让用户无法进行任何其他的操作,必须要点击对话框中的确定按钮,然后回到登录界面即可.可是这样就存在着一个问题,因为我们被通知需要强制下线时可能正处于任何一个界面,难道需要在每一个界面都编写一个弹出对话框的逻辑吗?如果真的是这样想那么思维就偏远了,我们完全可以借助所学的广播知识来实现这一个功能. 二.代码之旅 强制下线功能需要先关闭所…
参考自<第一行代码>——郭霖 强制下线功能需要先关闭掉所有的活动(Activity),然后回到登录界面.先创建一个ActivityCollector类用于管理所有的活动,代码如下所示: public class ActivityCollector { public static List<Activity> activities = new ArrayList<Activity>(); public static void addActivity(Activity ac…
目录 思路:强制下线功能需要先关闭掉所有的活动,然后回到登录界面. 步骤 1.关闭所有活动 2.创建BaseActivity类作为所有活动的父类,因为需要用ActivityCollector管理所有活动代码如下: 3.创建登录界面活动,新建LoginActivity,编辑其布局文件: 4.修改activity_main.xml中的代码和MainActivity(所有的活动都要继承BaseActivity)中的代码,加入强制下线功能 5.创建广播接收器 6.修改AndroidManifest.xm…
最近一口气买了好几本书,其中Android的<第一行代码>觉得真心不错,学到这个内容,顺便做个总结,加深印象. 强制下线的基本思想就是在界面上弹出一个对话框,让用户必须点击确定按钮跳转到登录界面,这里就有一个问题,通知强制下线时可能处于任何一个界面,我们总不能在每个界面都要实现弹出对话框的逻辑,所以这里可以利用广播来实现. 首先强制下线需要关闭所有活动,然后回到登录界面,所以我们这里创建一个ActivityCollector集合类来管理所有的活动,代码如下: package com.examp…
struct LiveMgr { private: int m_nCount; ///< 管理数量 std::vector<int> m_vecChannels; ///< 所有channel std::shared_ptr<I_Timer> m_spTimer; ///< 定时器 public: std::function<void(int channel)> m_fnTimeOutDisconnect; void Init(int nMaxGcNu…
与网络打交道 在GS,GC,Share都与网络打交道,但还是GC最多 GC打交道过程 send_stat BaseChannel::SendCmdTry() { if (!m_queCmd.size()) return send_stat::send_succeed; for(;;) { if (m_queCmd.empty()) break; DataPkt pkt = m_queCmd.front(); { send_stat hr = m_pDataLayer->SendData(m_nC…
GS与数据库打交道 link_stat stat = (link_stat)rPkt.size; if (stat == link_stat::link_connected) { GameChannel* pNewGC = new GameChannel(); pNewGC->m_nChannelId = rPkt.channel_id;//客户端唯一标识 pNewGC->m_pDataLayer = m_spDataLayer.get();//GC直接发包到客户端 pNewGC->m_…
再看GS线程 void GameServer::ProcessThreadTry() { ; packet rcvPkt; rcvPkt.data = * ]; //该事件工厂主要创建了两个定时器1.livemgr的检测(即是否是有效的连接)2.道具帮会差异更新数据的获取即定时从道具帮会容器中获取差异需要保存到数据库的这个数据 //3.释放队列的处理,现在玩家下线不是直接把channel删除掉而是放到释放队列中等没有数据库访问时在删除,防止数据库回调出现野指针 I_TimerFactory* p…
一 相关表介绍 1 mysql_user 列表配置    1 username && password 账号密码    2 default_hostgroup 默认的组ID2 mysql_servers DB列表配置    1 hostgroup_id       1 不同功能不同hostgroup_id       2 主库提供读设置2条件不同的hostgroup_id    2 status 集群健康情况    3 max_replication_lag 设置延迟判断,踢出下线   …
这个功能我可以不用,但你不能没有 前几篇文章实现了对物理机.虚拟机以及Kubernetes中Pod的WebSSH操作,可以方便的在web端对系统进行管理,同时也支持对所有操作进行全程录像,以方便后续的查看与审计 这一篇文章接着实现一个看起来很炫酷,但实际上你可能不会经常使用,又必须要存在的功能:实时监控用户操作,在必要的时候将用户踢下线 实时查看操作 django通过channels实现websocket中有一个非常重要的概念叫layer,layer可以将多个channel合并成一个group,…
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 实现强制下线功能的思路也比较简单,只需要在界面上弹出一个对话框, 让用户无法进行任何其他操作, 必须要点击对话框中的确定按钮,然后回到登录界面即可.我们被通知需要强制下线时可能正处于任何一个界面, 但我们不需要在每个界面上都编写一个弹出对话框的逻辑,可以使用广播来轻松地实现这一功能. 一.创建一个 ActivityCollector 类用于管理所有的活动: public class ActivityCollector…
数据表分析 wp_users wp_usermeta 用户系统就是靠着这两张表来实现的. 具体事例分析 添加用户 添加成功后,我们会分别在wp_users及wp_usermeta表中分别看到test001的数据. wp_users wp_usermeta wp_users表字段分析:ID(用户ID)user_login(用户登录账户名)user_pass(用户密码)user_nicename(用户昵称)user_email(用户邮箱)user_url(用户博客URL)user_registere…
有段时间没看map里面的东西了,刚才看发现功能上增加了一些,在来复习了一次流程初始化每个map建立线程,这个线程有两个功能,1.处理GS发过来的包 2.驱动map里面的定时器GS发过来的包是存在m_gs2msPkts2这个无锁的单消费者,单生产者队列中,只要是GS中不处理的包都要发到MAP中然后每个线程thrTransData::thread()就从m_gs2msPkts2中取包调用Map::process_pkt由于map继承了thrTransData,然后根据绑定调用对于的函数那如果map里…
没想到写了个前言就受到很多朋友的支持,大家的推荐就是我最大的动力(推荐得我热血沸腾,大家就用推荐来猛砸我吧O^-^O),谢谢大家支持. 其实框架开发大家都知道,不过要想写得通俗点,我个人觉得还是挺吃力的.在本系列中,我不会很深入的去讲述那些映射啊关系啊(绕得我头都晕了,这些请大家去查看相关的文档学习吧)......概念上的东西会少讲,直接上实例,讲实际应用.当然如果您觉得这样很不尊重面向对象什么的,那也没办法,只能说我们不在一个频道上. 本人是个技术宅,第一次写长篇连载经验不足,有时候会词不达意…
本章内容虽然叫“需求分析”,实际上关于具体的需求分析操作步骤并没有深入去写,因为细化的话那将是一本厚厚的书,而需求分析在本系列中,是帮助大家了解项目的基本要求(主要针对本项目而已).而写本章的主要目的想告诉初学者们一些常识与重要性,顺便写一写本项目的开发需求与需求文档格式,而不是具体的需求分析步骤.由于个人水平有限,文笔也并不怎么样,为了加快进度早点进入编码阶段所以写得有点水,大家先将就将就吧. 慢工出细活,磨刀不误砍材工.计划将要做的事情,按计划内容去做计划中的事情. 前言 需求分析文档按正常…
还是老规矩先吐下槽,在规范的开发过程中,这个时候应该是编写总体设计(概要设计)的时候,不过对于中小型项目来说,过于规范的遵守软件工程,编写太多文档也会拉长进度,一般会将它与详细设计合并到一起来处理,所以本文档看起来会怪怪的,不是很符合规范,它只是从实用角度出发来编写,以指导后面功能的设计与开发. 从零开始编写自己的C#框架 后台管理系统功能设计文档 文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: C#框架 当前版本: 0.1 作    者: 陈焕(AllEmpty)…
dbMgr主要是玩家数据的读取和保存的,例如在bigworld源码分析(3)中,玩家在认证的时候,loginApp需要通过dbMgr来验证玩家数据是否合法,这就是针对玩家的账号数据进行查询.本篇中,我们主要针对以下几个问题来分析dbMgr工作原理. (1) dbMgr如何验证玩家的账号合法性 (2) dbMgr是如何读取玩家的游戏数据的 (3) dbMgr如何通知baseAppMgr创建entity (4) dbMgr是如何保存玩家的游戏数据的 1. dbMgr验证玩家账号 dbMgr验证玩家账…
share到底干什么的 //--------------------打开GameServer,share中加载------------------------- .加载nBodyID //玩家的nBodyID表([职业][性别][nboduid]) std::vector<std::vector<int> > m_nbodyid_table; if(!load_nbodyid()) Plug::PlugMessageBox("加载nBodyID表失败啊!");…
转自:http://www.cnblogs.com/EmptyFS/p/3653934.html 本章内容虽然叫“需求分析”,实际上关于具体的需求分析操作步骤并没有深入去写,因为细化的话那将是一本厚厚的书,而需求分析在本系列中,是帮助大家了解项目的基本要求(主要针对本项目而已).而写本章的主要目的想告诉初学者们一些常识与重要性,顺便写一写本项目的开发需求与需求文档格式,而不是具体的需求分析步骤.由于个人水平有限,文笔也并不怎么样,为了加快进度早点进入编码阶段所以写得有点水,大家先将就将就吧. 慢…
首先个人说说题外话,Unity3d使用的网络库核心是用C++实现的一款商业网络游戏引擎库. RakNet.所以对于移动设备来说,用Unity3d来写server是全然能够的,而且内建网络库的各项功能封装完好. 对于一款ARGP都能够轻松的上手来写server,游戏对象的处理或者同步对象使用RPC. 对于一般的手游来说省了不少的麻烦事. 其网络性能也不亚于普通的HTTP传输协议 Unity3d中的内建网络核心是使用Network函数.使用Network能够创建一个server. 也能够建立一个到s…
王桢珍 王兵 侯志强 苑红 中国移动研究院 网络技术研究所, 北京100053 摘要   本文详细介绍了WLAN国际漫游的WISPr1.0技术规范并探讨其具体实现,包括基于WISPr1.0的WLAN国际漫游模型.网络架构和漫游实现过程所需关注的问题.通过对各种实现方法的比对,为运营商开展WLAN国际漫游合作提供了技术借鉴. 1.      概述 WLAN(Wireless Local Area Networks)利用射频技术构建局域网络,较数据蜂窝网络高速便利投资小,是当前无线通信领域最有发展前…
spring集成mina: 在学习mina这块时,在网上找了很多资料,只有一些demo,只能实现客户端向服务端发送消息.建立长连接之类.但是实际上在项目中,并不简单实现这些,还有业务逻辑之类的处理以及消息的推送之类的.于是就单独建立了一个工程项目,能够实现客户端和服务端相互之间发送消息.建立长连接.实现心跳检测等功能. 例如:可以实现客户端A向服务端发送消息,服务端将消息转发给客户端B. 效果实现图: 服务端启动成功后, 客户端A绑定服务端. 客户端B向服务端发送信息,请求服务端向客户端A推送消…
准备域名和证书 任务时间:20min ~ 40min 小程序后台服务需要通过 HTTPS 访问,在实验开始之前,我们要准备域名和 SSL 证书. 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可以参考下面的视频. 视频 - 在腾讯云上购买域名 域名解析 域名购买完成后, 需要将域名解析到实验云主机上,实验云主机的 IP 为: <您的 CVM IP 地址> 在腾讯云购买的域名,可以到控制台添加解析记录,过程可参考下面的视频: 视频 - 如何在腾讯云上解析域名 域名设置解析后需要过一段时间才…
原因 TCP是一种有连接的协议,但是这个连接并不是指有一条实际的电路,而是一种虚拟的电路.TCP的建立连接和断开连接都是通过发送数据实现的,也就是我们常说的三次握手.四次挥手.TCP两端保存了一种数据的状态,就代表这种连接,TCP两端之间的路由设备只是将数据转发到目的地,并不知道这些数据实际代表了什么含义,也并没有在其中保存任何的状态信息,也就是说中间的路由设备没有什么连接的概念,只是将数据转发到目的地,只有数据的发送者和接受者两端真正的知道传输的数据代表着一条连接. 但是这就说明了一点,如果不…
1.大话websocket及课程介绍 简介: websocket介绍.使用场景分享.学习课程需要什么基础 笔记: websocket介绍: WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端 websocket使用场景分享 如弹幕,网页聊天系统,实时监控,股票行情推送等 学习课程需要什么基础: javaweb基础, html, js, http协议 2.课程技术选型和浏览器兼容讲解 简介: 简单介绍什…
准备域名和证书 任务时间:20min ~ 40min 小程序后台服务需要通过 HTTPS 访问,在实验开始之前,我们要准备域名和 SSL 证书. 域名注册 如果您还没有域名,可以在腾讯云上选购,过程可以参考下面的视频: 视频 - 在腾讯云上购买域名 域名解析 域名购买完成后, 需要将域名解析到实验云主机上,实验云主机的 IP 为: <您的 CVM IP 地址> 在腾讯云购买的域名,可以到控制台添加解析记录,过程可参考下面的视频: 视频 - 如何在腾讯云上解析域名 域名设置解析后需要过一段时间才…