软件名称: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聊天室