基于Blue框架开发的flash聊天室

原创 2007年10月14日 12:15:00
如蒙转载,请注明文章出处:www.sujun.org   作者:弃天笑

软件名称:Flash聊天室
开发平台:Flash 8 + JAVA
采用框架:Blue框架
开发者:弃天笑
时间:2007年2月15号

了解了框架的一些基础,那么就综合起来开发一些东西了。因为我也就做了这么个简单的flash聊天室。
实现了公聊,私聊,以及表情的一些基本功能,纯粹是自己信手写的,花了几个小时,自己也想不到这么
快,主要是服务器那边只写一两个类就可以了。
这个聊天是提供了演示图片和源代码。下面是图片,如果觉得有兴趣就可以往下看代码了。
登陆界面


用户聊天界面







那么先做这里是代码部分,我只是重点讲一部分,一些连接服务器什么的,请大家参考
《Blue框架的基本教程》里的几个连续教程
先看下服务端的代码吧:
ClientMap.java,这个类主要是存放了一个用户列表,方便在其他地方获取
import java.util.*;
import org.sujun.blue.remote.Client;

public class ClientMap 
{
    private static Map map = new HashMap();

    public static void setMap(Map m) 
    {
        map = m;
    }
    
    public static Map getMap() 
    {
        return map;
    }

    public static Client getClient(String key)
    {
        return (Client)map.get(key);
    }
}

接下来是主类啦
ClientResponse.java这个类主要是存放了被客户端调用的方法,同时也负起了调用客户端方法的责任
/**
 * @(#).java
 * 
 * @author  soda  E-mail:sujun10@21cn.com
 * @version  1.0
 * <br>Copyright (C), 2007 soda.C
 * <br>This program is protected by copyright laws.
 * <br>Program Name:FlashSyncServer
 * <br>Date:2007.1
 */
import org.sujun.blue.remote.Client;
import java.util.*;

public class ClientResponse 
{
    /**
     * 当用户说话时,该方法被客户端呼叫
     * @param    userName:用户名
     * @param    face:表情
     * @param    toUser:说话接受对象
     * @param    msg:说话内容
     * @param    flag:是否是私聊
     */
    public void userSpeak(String userName,String face,String toUser,String msg,boolean flag)
    {
        Map map = ClientMap.getMap();
        int len = map.size();
        if(len > 0)
        {
            if(flag)
            {
                msg = userName + "偷偷地对你说:" + msg;
                Client temp = (Client)ClientMap.getClient(toUser);
                //呼叫特定客户端更新聊天信息的方法
                temp.call("chat","updateInfo");
                temp.setParam(msg);
                temp.send();
            }
            else
            {
                msg = userName + face + "地对" + toUser + "说:" + msg;
                for(Iterator it = map.values().iterator(); it.hasNext();)
                {
                    Client temp = (Client)it.next();
                    //禁止给自己再次发信息
                    if(ClientMap.getClient(userName) != temp)
                    {
                        //呼叫所有客户端更新聊天信息的方法
                        temp.call("chat","updateInfo");
                        temp.setParam(msg);
                        temp.send();
                    }
                }
            }
        }
    }
}
代码说明得很清楚,服务端其实就是这么简单,就实现了公聊和私聊的功能,逻辑很清晰,代码注释也完全,这里我就不多说了。
接下来就看客户端的代码了
ClientServer.as这个是客户端开始代码,记录客户端一些初始的工作
import org.sujun.blue.net.ConnectJavaServer;
import soda.ServerResponse;
/**
 * 聊天系统核心类,初始化服务器需要的类
 * 这里用到了Blue框架的核心ConnectJavaServer类
 */
class soda.ClientServer
{
    private var chat:MovieClip;
    private var conn:ConnectJavaServer
    private var userName:String;
    
    public function ClientServer(chat:MovieClip,userName:String)
    {
        this.chat = chat;
        this.userName = userName;
        //添加自己登陆
        chat.updateList(userName);
        trace("ServerResponse:" + userName);
        var client:ServerResponse = new ServerResponse(chat);
        conn = ConnectJavaServer.getConnectJavaServer();
        //连接服务器
        conn.connect("localhost",5000,userName);
        //注册被服务器调用的类
        conn.addServerCall("chat",new ServerResponse(chat));
        userSpeak();
    }
    
    /**
     * 用户聊天信息初始化
     */
    private function userSpeak()
    {
        var par = this;
        chat.userSpeak = function(msg:String)
        {
            var obj:Object = new Object();
            if(this.getObjectText() == par.userName)
            {
                this.updateInfo("不能自己跟自己说!");
            }
            else if(this.getIsPrivate() && this.getObjectText() != "所有人")
            {
                par.conn.call("ClientResponse","userSpeak",obj,par.userName,this.getFaceText(),
                        this.getObjectText(),msg,true);
                this.updateInfo("你偷偷地对" + this.getObjectText() + "说:" + msg);
            }
            else
            {
                //呼叫服务器的userSpeak方法
                par.conn.call("ClientResponse","userSpeak",obj,par.userName,this.getFaceText(),
                        this.getObjectText(),msg,false);
                this.updateInfo("你" + this.getFaceText() + "地对" + this.getObjectText() + "说:" + msg);
            }
            //接受服务器返回的结果
            obj.onResult = function(msg:String)
            {
                //par.updateInfo(msg);
            }
        }
    }
}

ServerResponse.as这个类主要是存放了被服务器调用的方法
public function ServerResponse(chat:MovieClip)
    {
        this.chat = chat;
    }
    
    /**
     * 更新用户聊天信息
     */
    public function updateInfo(msg:String):Void
    {
        trace("更新用户信息了");
        chat.updateInfo(msg);
    }

    /**
     * 用户退出
     */
    public function exitUser(userName:String)
    {
        chat.exitUser(userName);
    }
    
    /**
     * 更新用户列表
     */
    public function updateList(userName:String):Void
    {
        chat.updateList(userName);
    }

还有一个是客户端界面的类,ChatInterface.as。大家可以自己看源代码,都是界面功能的代码

代码就帖到这里了,其实什么都没有说,聊天室的原理我想大家都很明白,如果有哪为读职不明白或者
想要解释聊天室的整个流程的,在后面更帖,我会抽个时间再作详细说明

聊天室源代码下载:Flash聊天室  
版权声明:本文为博主原创文章,转载必须声明出处和作者。地址:http://blog.csdn.net/sujun10 作者:弃天笑

XMPP框架 微信项目开发之Socket聊天室的建立与登录

Socket就是为网络服务提供的一种机制。 通信的两端都是Socket。 网络通信其实就是Socket间的通信。 数据在两个Socket之间通过IO传输。 Socket服务器有两种一种是类似于...
  • u013087513
  • u013087513
  • 2015年11月04日 14:27
  • 1075

聊天室项目(一)框架搭建

聊天室项目框架搭建 经过不短的时间对Linux c 的学习,包括基本的c,系统编程,网络编程,数据库等,准备完成聊天室项目。 基本功能: 1.      采用Client/Server架构 2.   ...
  • ky_heart
  • ky_heart
  • 2016年11月08日 19:45
  • 1157

Netty网络聊天室之基础网关搭建

基本Netty通信框架开发一个模仿QQ的聊天室。使用Netty作为通信网关,使用JavaFX开发客户端界面,使用Spring作为IOC容器,使用MyBatics支持持久化。本文将着重介绍服务端客户端框...
  • littleschemer
  • littleschemer
  • 2016年02月17日 23:28
  • 10371

三、深入Javascript(1)_看智能社blue老师JS视频整理的笔记

1、函数返回值 ( return ) function show() { return 12; }; alert(show()); //弹出12 (1)return就是函数返回值...
  • cherry_vicent
  • cherry_vicent
  • 2014年12月24日 16:51
  • 5800

史上最全的手机聊天室开发经验分享上

先注明一下什么是手机聊天室,手机也就是立即通信的意思,简单的来说就是类似QQ一类的聊天室软件。而手机聊天室即是运用语音音频来接替保守文字交换的形式停止沟通交换,眼前市场上的手机聊天室依据聊天的形式又多...
  • qijizg
  • qijizg
  • 2014年12月04日 11:43
  • 1134

BlueDBM个人读感

BlueDBM个人读感     BlueDBM是麻省理工学院Sang-Woo Jun等人发表在2015年ISCA会议上的论文。该篇论文的启发点似乎来自于RAMCloud,该团队发现完全基于DRAM的系...
  • xiaorenzhi
  • xiaorenzhi
  • 2015年07月31日 13:56
  • 1663

Flash视频播放器开发经验总结

HTTP协议更优目前几乎所有的视频点播网站全部采用HTTP协议传输数据。因为相对于诸如RTMP等协议来说,HTTP协议是无状态的,数据传输完毕就断开连接,这样服务器就可以腾出资源来服务更多的用户。而R...
  • u014723529
  • u014723529
  • 2016年01月26日 17:55
  • 2871

Java 入门 之 聊天室项目思路 服务器端

项目思路: 1)先登录服务器,如果服务器没有登陆,那个各个客户端就不可以正常工作; 2)登陆各个客户端,实现各个客户端的输入,在客户端呈现,传输到服务器端。 3)所有客户端的输入在服务器上呈现,并...
  • u013630349
  • u013630349
  • 2016年02月20日 09:17
  • 1480

Hello,AS3!!(Flash开发环境搭建)

ActionScript 开发环境搭建 发表于 2013 年 6 月 14 日 1. 安装 Flex SDK 选择 Adobe Flex SDK 下载, 并解压到任何你愿意放置程...
  • cleverlzc
  • cleverlzc
  • 2014年08月14日 10:50
  • 8509

Java GUI编程——在线聊天室

引言综合应用Java的GUI编程和网络编程,实现一个能够支持多组用户同时使用的聊天室软件。该聊天室具有比较友好的GUI界面,并使用C/S模式,支持多个用户同时使用,用户可以自己选择加入或者创建房间,和...
  • qq_22187919
  • qq_22187919
  • 2017年03月05日 11:12
  • 722
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Blue框架开发的flash聊天室
举报原因:
原因补充:

(最多只允许输入30个字)