Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93476
  • 博文数量: 41
  • 博客积分: 1531
  • 博客等级: 上尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2005-05-17 10:15
文章分类

全部博文(41)

文章存档

2014年(2)

2012年(1)

2011年(2)

2008年(9)

2007年(2)

2006年(5)

2005年(20)

分类:

2008-07-02 22:52:42

    本软件提供类SNACC功能,完成抽象数据结构到网络字节流的编解码功能。与SNACC不一样的是CASN仅适用一份代码(SNACC根据每个抽象数据结构要生成一份不同的代码),将大大减小软件发布包大小;SNACC使用ASN.1文法来描述抽象数据,而CASN使用XML描述。
 
    目前提供C++/Java包;
    抽象数据结构由XML描述,CASN提供初始化接口读入此描述文件;
    本软件提供接口完成抽象数据结构的创建;
    提供Set、Get方法设置查询抽象数据结构;
    提供接口编码抽象数据结构为网络字节流,并提供解码接口;

 
如下是抽象数据结构的XML描述样例。



 
  student_t
  
   
    name
    string
   

   
    private_data
    binary
   

   
    age
    int
   

  

 

 
  student_list
  
   student_t
  

 

 


使用结构之前需要先用XML抽象类型描述文件初始化CASN,如下:

if (!NodeTypeMgr::Instance()->LoadNodeTypeInfo("a.xml"))
{
  cout << "load typedefine failed!" << endl;
  return -1;
}

创建抽象结构对象,如下:

char buf[3] = {'a', 'b', '\0'};
NodeType *student= CCAsnFactory::Create("student_t");
student->SetStr("name", "zhanglei");
student->SetInt("age", 27);
student->SetBin("private_data", buf, sizeof(buf));

NodeType *studentList = CCAsnFactory::Create("student_list");
studentList->GetList().Push(data);
NodeType *studentListBak = studentList->Clone(); //深拷贝

对象深拷贝,如下:

NodeType *studentListBak = studentList->Clone(); //深拷贝

编解码操作,如下:

char *buf = 0;
size_t len = 0;
NodeType *student2 = CCAsnFactory::Create("student_t");
buf = student->Encode(len);
student2->Decode(buf);

char *bufList = 0;
size_t lenList = 0;
NodeType *student2 = CCAsnFactory::Create("student_list");
bufList = studentlist->Encode(lenList);
studentlist2->Decode(bufList);

删除编码缓冲区,如下:

delete []buf;
buf = 0;
delete []bufList;
bufList = 0;

阅读(4186) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~