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

如蒙转载,请注明文章出处: 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聊天室  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值