基于Mozilla Thunderbird的扩展开发(五)---进程间通信之Socket篇(上)

     

20080506.bmp

Mozilla扩展系列链接:

1浅谈基于Mozilla Thunderbird的扩展开发

2基于Mozilla平台的扩展开发(续)----XPCOM组件篇

3基于Mozilla Thunderbird的扩展开发(三)---如何获取邮件的完整信息

4基于Mozilla Thunderbird的扩展开发(四)---修改源代码实现自动保存附件

5基于Mozilla Thunderbird的扩展开发(五)---进程间通信之Socket篇(上)

      这个系列的前两篇文章主要是根据自己的需求,对Thunderbird的源代码进行修改,改进了Thunderbird的现有功能,关注点都在Thunderbird的老本行---邮件客户端的实现上,那是否Thunderbird就仅仅是一个邮件客户端呢?在我看来,并非如此,它源自Mozilla内核,就继承了Mozilla平台的光荣传统,应该视为一个优秀的可扩展的开发平台,更进一步来看,Mozilla的文化深入其骨髓,可以看到后来AdobeFlex,MicroSoftWPF都吸收了Mozilla平台界面与逻辑相分离的思想,所以接下来几篇文章我想写一个比较有意思的方面----进程间通信。

      进程间通信的概念在操作系统中有过详细的介绍,方法很多,我主要关注其中两种:socket通信,Pipe(管道)通信。

      本文的目的就是开发一个扩展,展示TCP/IP socket技术在Mozilla扩展开发中的应用。

服务器端主代码:

  const tBirdBiffServerUi =
  
{
    tBirdBiffServerOnLoad: 
function()
    
{//启动服务器
      // remove to avoid duplicate initialization
      removeEventListener("load", tBirdBiffServerUi.tBirdBiffServerOnLoad, true);
      tBirdBiffCommon.setIconPosition();
//设置图标位置
    //创建服务器对象并初始化
      var server = Components.classes["@phinecos.cnblogs.com/TBbiff/server;1"].getService(Components.interfaces.nsISupports).wrappedJSObject;
      server.initialize();
      server.addWindow(window);
//保存当前窗口
      server = null;
    }
,
    tBirdBiffServerOnClose: 
function()
    
{//关闭服务器
      // remove to avoid duplicate initialization
      removeEventListener("close", tBirdBiffServerUi.tBirdBiffServerOnClose, true);

    
//移除当前窗口
      var server = Components.classes["@dpwhite.com/thunderbirdbiff/server;1"].getService(Components.interfaces.nsISupports).wrappedJSObject;
      server.removeWindow(window);
      server 
= null;
    }

  }


  addEventListener(
"load", tBirdBiffServerUi.tBirdBiffServerOnLoad, true);
  addEventListener(
"close", tBirdBiffServerUi.tBirdBiffServerOnClose, true);


服务器类,负责创建服务器端socket,并异步监听来自客户端的请求,管理邮箱状态的变化和来自客户端的连接。

服务器类