轻松搭建Flash Media Server聊天室

From:http://www.flashxm.com/?p=70

这个模型比前面的超级HelloWorld稍微简单一点。客户端预定义talk函数响应来自服务器端的消息,服务器端用application.broadcastMsg来广播客户端用户的someoneTalk。换句话说,客户端的someoneTalk实际上是触发了服务器端的application.broadcastMsg,同时再回调客户端预定义的talk函数并显示消息,便搭成了聊天室。
服务器端代码如下:

  1. function broadcast (msg)
  2. {
  3.     //trace(msg);
  4.     application.broadcastMsg('talk', msg);
  5. }
  6.  
  7. application.onConnect = function (client)
  8. {
  9.     this.acceptConnection(client);
  10.     broadcast('__ ' + client.ip + ' 进来了 __');
  11. }
  12.  
  13. application.onDisconnect = function (client)
  14. {
  15.     broadcast('__ ' + client.ip + ' 出去了 __');
  16. }
  17.  
  18. Client.prototype.someoneTalk = function (n, w)
  19. {
  20.     broadcast(n + '(' + this.ip + ') 说道: ' + w);
  21. }

客户端代码如下:

  1. _nc = new NetConnection();
  2. _nc.talk = function(msg)
  3. {
  4.     msg_txt.text += msg + '\n';
  5. };
  6. _nc.connect('rtmp://x/chat');
  7.  
  8. talk_btn.onRelease = function()
  9. {
  10.     _nc.call('someoneTalk', null, name_txt.text, send_txt.text);
  11. };
  12.  
  13. onKeyDown = function ()
  14. {
  15.     if(Key.isDown(Key.ENTER)){
  16.         _nc.call('someoneTalk', null, name_txt.text, send_txt.text);
  17.     }
  18. }
  19. Key.addListener(this);

源文件打包下载download
ps: 也可以用SharedObject的send方法向所有订阅此so的客户端发送消息以达到聊天的效果,但她无法有效地将当前聊天者的ip地址等信息广播出去。我已经试过了,谁要有兴趣的话也不妨试一试。

Share

0 条评论

留下评论