游戏聊天系统

聊天系统

一般要处理:聊天窗口的频繁信息刷新显示,黑名单屏蔽,私聊,语音信息处理等。

为了优化界面的显示性能,需要将界面里面的每一条信息item进行复用,从而减少聊天界面创建出来的item数量。

会用到一个简单的池ChatItemMgr

当界面滑动时,会触发scrollView位置改变,根据位置事件监听,界面调用getChatItem()方法

function ChatShowView:getChatItem(lastItemIndex, isUp, chatVo)
    local itemIndex
    if isUp then 
        itemIndex = lastItemIndex - 1
    else
        itemIndex = lastItemIndex + 1
    end
    itemIndex = itemIndex>self.maxChatItemNum and 1 or itemIndex
    itemIndex = itemIndex<1 and self.maxChatItemNum or itemIndex
    local item = ChatItemMgr.GetChatItem({
        itemIdx = itemIndex, -- 第几个
        tabIdx = self.nowChannelType, -- 频道类型
        chatVo = chatVo, -- 聊天信息
        pObj = self.chatScroll.gameObject, -- 滑动界面
        pItem = self.pItem[self.nowChannelType], -- 显示的聊天样式
        pIns = self,
    })
    item:setActive(true)
    return item, itemIndex
end

在ChatItemMgr里面进行item的创建和管理

function ChatItemMgr.GetChatItem(params)
    local params = params or {}
    local mgrIns = ChatItemMgr.getInstance()
    local key = mgrIns:getKey(params.tabIdx, params.chatVo)
    return mgrIns:getItemIns(key, params)
end

function ChatItemMgr.getItemIns(key, params)
    local items = self:getItems(key)
    local itemIdx = params.itemIdx
    local item = items[itemIdx]
    if not item then 
        item = self:getItemCls(key)
        items[itemIdx] = item
        local cls = self:getItemCls(key)
        item = cls.New(params.pIns, NGUITools.AddChild(params.pObj, params.pItem))
        items[itemIdx] = item    
    end 
    return item
end

 

一个用于Web游戏中的即时聊天代码 使用内存进行消息投递 支持私聊和供聊 支持统计在线人数 可开多个房间 注意:有人反映这个不能直接使用,在这里特做一下说明 =============================================== 这个程序是从游戏中拿出来的,并不是一个独立的应用程序 发上去的部分是不能直接运行的,发出来的目的只是想给有这方面兴趣的朋友做个参考,因为我自己才做这块的时候确实走了不少弯路 里面有类设计图,类设计图是用powerdesign 12.5设计的 可以通过类设计图看服务端的设计 客户端是一个demo html文件 要运行还需要配数据库,还需要微软的企业库开发包 不了解企业库的可以去这里看看 http://www.codeplex.com/entlib 你也可以修改一下代码让程序不需要访问数据库 访问数据库主要是加载房间信息,你可以在代码里弄几个模拟的房间信息 聊天消息的中专是不依赖数据库的 ====================================== 再次补充说明 这个代码的开发环境为:vs2008+sqlserver2005+微软企业库+net fwk3.5 其实用vs2005+2.0框架也可以,虽然使用的是3.5的框架,但是并没有使用3.5框架的新特性 经检查发现里面确实没有类设计图,也没有服务器端的源代码 现在传上去的这部分只是一个demo,包含客户端和编译过的服务器端代码 非常的抱歉,我将不上源代码和相关设计文件 =========================================================== 目录结构说明 ChatDemo-包含客户端和编译过的服务器端 ChatDemo/ChatDemo.HttpHandler-客户端http处理器(客户端和服务器端的交互就靠这些文件了) ChatDemo/ChatWebDemo-客户端的实现代码 ChatDemo/ChatWebDemo/ServerManager.aspx-此文件可控制服务器的启动和关闭(客户端和服务器端是存在于同一台电脑上测试的,所以在一个工程里) ChatDemo/ChatWebDemo/SelectChatRoom.aspx-可选择进入哪一个聊天室 ChatDemo/ChatWebDemo/Chat.aspx-聊天客户端界面 DinosaurEmpery-包含服务器端的源代码和相关设计文档-数据库文档等 DinosaurEmpery/src-服务端源代码和单元测试相关资料 DinosaurEmpery/src/Chat DinosaurEmpery/src/IChat 这两个才是聊天部分的代码,其它目录为游戏其它部分的代码(只是部分代码,是不能运行的) DinosaurEmpery/using-程序中用引用到到第3方dll(微软企业库)(由于压缩后的结果代码太大,所以删除了里面的内容)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值