关于MailHub,MailBox与APP之间的关系

        “所有通过UI或协议栈发送的消息,都要先到达MailHub,MailHub按照UI层或协议栈发来的消息
调用合适的功能并发送给Mailboxes。这个功能一般默认是调用FindMailHandler, 这个函数用来查找在消息队列中已经分配好
的消息处理函数"
           VIA
UI架框的说明文档中的介绍,但具体到程序中又是如何体现与应用的,与我们的APP有什么关系呢:
        
如果说一个个APP是独立的模块,那么MailHub和MailBox就是联系它们之间的桥梁,通过消息来呼叫各APP,即使像打开一个窗口这样的动作。

            BEGIN_MAIL_MAP(ZjjguessAppC,
ApplicationC)
           ON_MAIL_NOARGS(ZJJGUESS_LAUNCH, ZjjguessAppC::OnLaunch)
          
 END_MAIL_MAP()

这是APP中定义的消息映射关系,当接收到消息ZJJGUESS_LAUNCH时,会执行OnLaunch这个方法。具体到MailHub与MailBox的实现方式,就更繁琐一些,与VAL和RTOS有关,但这并不防碍自己写的APP对他们调用的理解。以后有机会再对他们的内部实现原理与方法进行深入地介绍。
 

 

对飞鸽传书2.04中文版自动更新消息的屏蔽

公司里使用飞鸽传书做为内部交流的工具,此次修改自动屏蔽了飞鸽传书中那条烦人的2.04中文版的自动广播升级消息,只在Log文件中有记录。
      
在源代码中找到以下面红色开始的区域,蓝色的为修改后的,当收到消息时,对附件文件名进行判定,如果是则更变状态变量,使窗口不再弹出。

BOOL
newStatus=TRUE;
 
……
if (msg.command & IPMSG_FILEATTACHOPT)
 {
  if
((shareInfo = DecodeShareMsg(msg.msgBuf + msg.exOffset)) !=
NULL)
  {
      char *tName="IPMSG2.exe";
   const
char
*name=shareInfo->fileInfo[0]->Fname();
      if(strcmp(name,tName)==0)
     
{
    newStatus = FALSE;
      }

   fileObj = new
RecvFileObj;
   memset(fileObj, 0,
sizeof(RecvFileObj));
  }
 }
…….
status = newStatus;
要小心的是,避免传送以IPMSG2.exe为文件名的文件:)

 

添加一个新应用程序的详细步骤

在VIA平台上添加一个新的APP的详细步骤,总结的要比官方更详细些。
 1.要用与CBP相同的reseditor资源编译器,编辑出相应的资源(Dialog由Meunctrl和SoftKeyBar组成,其中的每一文字都是另一个资源,注意命名,要发送消息的控件都要定义Message ID)

2.编写新的相应的 .h
与 .cpp的源文件,并在更改此目录下的makefile文件,添加此文件的依赖关系

然后一定要定义该消息对应的函数(.h声明一下
.cpp
文件中添加对应关系):例:

   .h 文件中最后添加:DECLARE_MAIL_MAP()        
  .cpp文件中添加:
 BEGIN_MAIL_MAP(ZjjguessAppC, ApplicationC)

 ON_MAIL_NOARGS(ZJJGUESS_LAUNCH,ZjjguessAppC::OnLaunch)

 END_MAIL_MAP()

最后GetGroup成员必须实现,其返回值为在appmids.h中定义的消息关系参数如:ZJJGUESS

3.在appmids.h的文件中添加Message ID触发的消息的对应关系
如: ZJJGUESS_LAUNCH = APPCAT(ZJJGUESS,1),

然后在MAX_NUM_OF_APP之前添加上 ZJJGUESS 以使最大值加+1

4.在uitask.cpp中添加 #include<xxxxx.h>文件引用此新源文件的头文件

然后在PartInit 中添加此新App的实例化:如:

ApplicationC * ZjjguessApp=ZjjguessAppC::GetInstance();

ApplicationManagerP->AddApplication(ZjjguessApp);

 

VIA平台中短信与呼叫建立的过程

 

1.短信正常发送过程:

<1>OnNewMessageEditMessage[输入信息] —-> (send)—->OnNewMessageEditMessageDone—–>[输入电话号码]OnNewMessageEditAddress—->(send)OnNewMessageSend()——>
PushPendingMessage(uiSMSMessageP)
在这里处理发送(uiSMSMessageP为包括电话号码在内的所有信息)—–>SendPendingMessage()从LinkList中发送—–>UISMSSendMessage()—->ValSmsSendTxtMessage()[VAl]

其中<1>设置如下参数通过调用GetSettingvalueFromSidb():
          {
mToSave = TRUE;
mToDelete =TRUE;
mPriority = UISMS_PRIORITY_NORMAL;
 mDeferred = 0;
 mValidity = 0;
mDeliverAck = FALSE;
         }
2.呼叫建立过程:
Appidle.cpp 1090 调用 AsyncOriginateCall[appcallprocess.cpp]——->OnOriginateCall—->ProcessOriginateCall——>PswFInitiateCall[valpsawapi.c(val)]

 

WCF与Socket的区别

WCF与Socket的区别,在低层实现上WCF是用Socket技术进行链接的,可以理解为WCF是Socket的一个超级封装版,帮你实现了好多的链接,传输,安全等方面的细节,从而让你专注于业务上的实践.

以下引用一段经验之谈:

With WCF you’ll get plumbing and serialization and such. 
The Protocol is already figured out for you: request/response message passing. 
The lowest level transport details are already implemented for you.

Socket code will require much more work and testing on your part, but can
potentially be faster.  You’ll have to create your own protocol, decide how
messages are serialized and so forth.  In my experience so far, I’ve used WCF or
REST APIs for everything except for a chat application I wrote, where it made
sense to go down to sockets.

Edit: one other reason why I used Sockets for the Chat application is that
while WCF has a "duplex" notion, sockets are naturally read/write, and it seemed
more natural.  If any event occurs on the server it can truly push a
message down to the client immediately using the socket and the client will read
this assuming the various async read code is set up. 

你可以到这里查看原文.

 

趋势

表现力强的富客户端和各系统间的分布集成应用,应该是未来发展的方向,Microsoft的WPF和WCF在这两个方面做着积极的努力,以后无论在什么平台上,都能用具有流畅绚丽UI的客户端(或浏览器)享受各网络为我们所提供的服务。最近在VIA的平台上植入了第一个程序,不过要想也能使用WPF和WCF,还有好多工作要做:) 

最近的工作

计划最近把这里再改版一下,增加两个模块,嵌入式和分布式系统两个专题,是我在工作和学习中的经验和总结,希望能与大家分享,相互学习。另外还准备筹办“太龊论坛”具体细节暂时保密,呵呵。Spaces Reader进度也比较缓慢,这个基于WPF的专用Live Spaces Reader的雏形己经出现,现正编写相关代码。现在工作基于VIA平台,也渐渐进入正轨,不久也会参于到项目当中,时间可能会更紧。