读pomelo的教程-2
下面从头到尾记录chat demo的Login的过程
- client:点击login按钮,取得username和rid两个值
- $("#login").click(function() {
- username = $("#loginUser").attr("value");
- rid = $('#channelList').val();
之后对username和rid验证
- $("#login").click(function() {
- client:连接gate服务器
- pomelo.init({
- host: host,
- port: port,
- log: true
- }
请求路由 'gate.gateHandler.queryEntry'。
- pomelo.request(route, {
- uid: uid
- }
- pomelo.init({
- server:gate服务器
- handler.queryEntry = function(msg, session, next) {
- var uid = msg.uid;
- if(!uid) {
- next(null, {
- code: 500
- });
- return;
- }
- // get all connectors
- var connectors = this.app.getServersByType('connector');
- if(!connectors || connectors.length === 0) {
- next(null, {
- code: 500
- });
- return;
- }
- // select connector
- var res = dispatcher.dispatch(uid, connectors);
- next(null, {
- code: 200,
- host: res.host,
- port: res.clientPort
- });
- };
主要就是分配一个connector服务器,返回它的host和port
- handler.queryEntry = function(msg, session, next) {
- client:连接connector服务器
- var route = "connector.entryHandler.enter";
- pomelo.request(route, {
- username: username,
- rid: rid
- }
- var route = "connector.entryHandler.enter";
- server:connector服务器
- handler.enter = function(msg, session, next) {
- var self = this;
- var rid = msg.rid;
- var uid = msg.username + '*' + rid
- var sessionService = self.app.get('sessionService');
- console.log("rid="+rid +" uid="+uid);
- //duplicate log in
- if( !! sessionService.getByUid(uid)) {
- next(null, {
- code: 500,
- error: true
- });
- return;
- }
- session.bind(uid);
- session.set('rid', rid);
- session.push('rid', function(err) {
- if(err) {
- console.error('set rid for session service failed! error is : %j', err.stack);
- }
- });
- session.on('closed', onUserLeave.bind(null, self.app));
- //put user into channel
- self.app.rpc.chat.chatRemote.add(session, uid, self.app.get('serverId'), rid, true, function(users){
- next(null, {
- users:users
- });
- });
- };
检测一下是否重复登陆了,把session与uid绑定,在setting里设置rid,注意需要push,session设置回调“closed”,rpc调用chat服务器
- handler.enter = function(msg, session, next) {
- server:chat服务器添加用户
- ChatRemote.prototype.add = function(uid, sid, name, flag, cb) {
- var channel = this.channelService.getChannel(name, flag);
- var username = uid.split('*')[0];
- var param = {
- route: 'onAdd',
- user: username
- };
- channel.pushMessage(param);
- if( !! channel) {
- channel.add(uid, sid);
- }
- cb(this.get(name, flag));
- };
这里的uid是“uid*rid”, sid是server id,name是rid,flag是true。向channel中所有用户发送onaAdd信息,再把uid加入channel
- ChatRemote.prototype.add = function(uid, sid, name, flag, cb) {
读pomelo的教程-2的更多相关文章
- 读pomelo的教程-1
pomelo教程的例子是一个聊天室,包括一个webserver客户端,和一个gameserver的pomelo服务器.这个例子挺好,一个聊天系统逻辑简单,还包括了用户管理,客户端request,服务器 ...
- 读w3c中文教程对键盘事件解释的感想 -遁地龙卷风
写这篇博文源于w3c中文教程对键盘事件的解释, onkeydown 某个键盘按键被按下 onkeypress 某个键盘按键被按下并松开 onkeyup 某个键盘按键被松开 可在实践中发现 只注册key ...
- 笔记-读官方Git教程(2)~安装与配置
小书匠 版本管理 教程内容基本来自git官方教程,认真都了系列的文章,然后对一些重点的记录下来,做了简单的归纳并写上自己的思考. 1.安装 在基于 Debian 的发行版上,使用 apt-get安装 ...
- 笔记-读官方Git教程(1)~认识Git
小书匠版本管理 教程内容基本来自git官方教程,认真都了系列的文章,然后对一些重点的记录下来,做了简单的归纳并写上自己的思考. 目录: 1.Git介绍 2.Git版本控制原理 3.Git特点 4.Gi ...
- python中global的用法——再读python简明教程
今天看了知乎@萧井陌的编程入门指南,想重温一下 <python简明教程>,对global的用法一直不太熟练,在此熟练一下,并实践一下python中list.tuple.set作为参数的区别 ...
- 读C#图解教程的笔记
第一章记录: 格式化字符串 Console.WriteLine("{0:D}", 123456789);//表示十进制字符串 Console.WriteLine("{0: ...
- [未读]angularjs权威教程
正在啃,赶脚不错...
- Mysql读写锁保姆级图文教程
摘要:读锁会阻塞写,但是不会阻塞读,而写锁会把杜希俄都阻塞. 本文分享自华为云社区<Mysql保姆级读写锁图文教程丨[绽放吧!数据库]>,作者:Code皮皮虾 . 准备 创建mylock表 ...
- NeHe OpenGL教程 第一课:OpenGL窗口
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
随机推荐
- Project Euler 100 : Arranged probability 安排概率
Arranged probability If a box contains twenty-one coloured discs, composed of fifteen blue discs and ...
- IT讲师韩顺平:我为什么辞去百万年薪,自己创业?
先自我介绍一下,我叫韩顺平,是一名IT讲师.国内很多自学PHP和Java的朋友都看过我的视频课程,算是有些知名度. 15年8月从传智辞职后,很多朋友非常关心我的去向,网上也流传各种说法,有的说我和某某 ...
- python list去重的方法
转载于:http://yxmhero1989.blog.163.com/blog/static/112157956201381443244790/ Python很简洁 我们喜欢简单有效的代码 一. ...
- Photoshop:热气球的制作方法
大致流程: 1.做等宽色块,加内发光 2.变形->膨化,弯曲20% 3.加高光和投影层,增加立体感 4.制作多列,合并后,滤镜->扭曲->球面化100%2次(注意放在在正方形画布中间 ...
- windows系统下Python环境的搭建
1.下载最新的Python版本3.5.0.
- EF 实体关系
基于共享主键的一对一: this.HasRequired(t => t.TRDConInfo) .WithOptional(t => t.TRDFoundationProjCheck); ...
- Java连接MySQL数据库及简单操作代码
1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...
- sh.exe": grunt: command not found
今天在git命令行工具中使用 grunt的时候,总是提示我找不到grunt命令,如: sh.exe": grunt: command not found 但是我运行 npm install ...
- Instruments-查看收集到的数据
由于Xcode调试工具Instruments指南篇幅太长,所以本篇blog继续上篇,介绍对Instruments收集到的数据去分析. 关于数据分析 Instruments不解决你代码中的任何问题,它帮 ...
- 解决魅族USB调试无法被电脑识别的问题(含Mac OS X、Win7)
每次打开豌豆荚或者360手机助手之类手机助手后Eclipse才会检测到mx4(实际上是豌豆荚关闭eclipse的adb使用自己的驱动连接的).解决方法就是在"adb_usb.ini&qu ...