anchor.diff:   */
   Future downloadMsg(msgId) {
     Completer cmpl = new Completer();
  -  var ok = (response) => cmpl.complete(response);
  +  var ok = (response) => cmpl.complete(new Massage(response['isFile'], response['content'],
  +      response['sendname'], response['sendemail'], response['recvname'], response['recvemail']));
     var fail = (error) => cmpl.completeError(error);
     
     js.context.callMethod('downloadMsg', [msgId, ok, fail]);
     return cmpl.future;
  +}
  +
  +class Massage {
  +   bool isFile;
  +   File content;
  +   String sendname;
  +   String sendemail;
  +   String recvname;
  +   String recvemail;
  +   
  +   Massage(this.isFile, this.content, this.sendname, this.sendemail, this.recvname, this.recvemail);
   }
positive.code:  * @param  {func}    onFailure function(string errmsg)
   * @return {void}
   */
  Future uploadMsg(email, isFile, content, filename) {
    Completer cmpl = new Completer();
    var ok = (response) => cmpl.complete(response);
    var fail = (error) => cmpl.completeError(error);
    
    js.context.callMethod('uploadMsg', [email, isFile, content, filename, fail]);
    return cmpl.future;
  }
  
  
negative.code:  * @param  {func  }   onFailure functoin(string errmsg)
   * @return {void  }
   */
  Future isDone(String msgId) {
      Completer cmpl = new Completer();
      var ok = (response) => cmpl.complete(response);
      var fail = (error) => cmpl.completeError(error);
  