diff --git a/READEME.md b/READEME.md index a89629d..92a1cab 100644 --- a/READEME.md +++ b/READEME.md @@ -1,5 +1,26 @@ # StormChat +## 目录 +* 简介 +* 设计思路 + * 通信流程 + * 通信数据包结构 +* 环境配置 + * 开发环境 + * 运行环境 +* 程序配置 + * 服务器端 + * 客户端(Go) + * 客户端(C#) +* 如何编译 + * 服务器端 + * 客户端(Go) + * 客户端(C#) +* 注意事项 +* 目录结构 +* 使用截图 + + ## 简介   前段时间心血来潮想学习最近的明星编程语言Golang。于是想做个聊天小程序实践一下。程序基于TCP协议通信,更详细的设计见设计思路 @@ -8,15 +29,19 @@   在朋友([@Billows](https://github.com/KaniuBillows))的鼓励下,我们决定用C#写一个客户端程序,正好他在学习WPF编程,于是界面采用了WPF编写。我负责后台数据交互,他负责前台界面逻辑。   **C#客户端还使用到了JSON格式化库Newtonsoft.Json,特此说明。** + + ## 设计思路 + ### 通信流程 1. 发送方(客户端或者服务器)发送数据包; 2. 接收方(服务器或者客户端)处理数据; 3. 如果需要反馈,接收方发送反馈数据包; 4. 发送方处理反馈数据(如果有)。 + ### 通信数据包结构 数据通信基于TCP协议,每次通信的数据包应包含【包头域+数据域】。包头域总是JSON格式、UTF-8编码的字符串,数据域由包头决定,可以为空。通信数据包结构如图。 @@ -32,27 +57,35 @@ Operation参数指定本次通信的请求。它决定了数据包的其他数 本来做了设计图表,不过第一次用starUML,画了一半才发现完全是鬼画桃符,没有掌握正确的作图方式,也没什么热情重新画了。因此这里不展示完整的设计文件了(本来也不完整),上面的链接是截取的关键部分(才知道starUML可以导出html文档)。 -至于原文件...留着权当做个纪念,当作自己学习的见证吧(我也很无奈啊(* ̄︿ ̄))。实在是不嫌弃不怕被误导的话,也可以看看。文件是starUML3的设计文件(.mdj),需要starUML软件打开(付费的,不过可以免费使用)。这是设计文件。 +至于原文件...留着权当做个纪念,当作自己学习的见证吧(我也很无奈啊(* ̄︿ ̄))。实在是不嫌弃不怕被误导的话,也可以看看。文件是starUML3的设计文件(.mdj),需要starUML软件打开(付费的,不过可以免费使用)。这是设计文件。 哦,还有服务器端的数据库结构,见文件stormchat-server/res/stormchat.sql。 + + + ## 环境配置 -1. ### 开发配置 + +1. ### 开发环境 服务器端:Windows/Linux Golang 1.11 客户端-Go:Windows x64,C++,Golang 1.11 - 客户端-C#:.NET4.0,WPF,Newtonsoft.Json for .NET4.0 + 客户端-C#:Windows,.NET4.0,WPF,Newtonsoft.Json for .NET4.0 -2. ### 运行配置 + +2. ### 运行环境 服务器端:Linux/Windows, MySQL5.5+/MariaDB10.0+ - 客户端:Windows 7以上 + 客户端:Windows10 x64(其他平台没测试过) + + ## 程序配置 由于懒癌发作,一些参数设置只能在编译时指定好,没有运行中指定参数的功能。 Go语言的部分(服务器程序和golang客户端程序)这块都在control.go文件中,C#客户端这边也没什么可配置的,也就是连接服务器的地址和端口。下面列出部分配置参数: + ### 服务器端 * **serveMode** 服务(后台)模式。如果此参数为true,日志输出到str_log_file参数指定的文件中,且Debug()函数将不输出内容。如果为false,日志输出和Debug()函数都将直接向控制台或终端输出。 @@ -75,10 +108,12 @@ Go语言的部分(服务器程序和golang客户端程序)这块都在contro * **str_db_conn_str** MySQL数据库连接字符串。 + ### 客户端(Go) * server_addr 服务器地址和端口。 + ### 客户端(C#) 资源定义在StormChat解决方案,Interact项目的属性->资源中。 * RemoteServerAddr @@ -88,6 +123,8 @@ Go语言的部分(服务器程序和golang客户端程序)这块都在contro 服务器端口。 + + ## 如何编译 首先安装git和golang,这一步请自行解决; @@ -98,6 +135,7 @@ Go语言的部分(服务器程序和golang客户端程序)这块都在contro > `cd DIR/stormchat` + 1. ### 服务器端 #### 切换到服务器端工程目录: > `cd stormchat-server` @@ -144,22 +182,28 @@ Linux下执行下列命令以守护进程运行: Windows请自行探索。 + 2. ### 客户端-Go > `cd DIR/stormchat/stormchat-client-golang/src` > `go build` 注意,**客户端运行时需要conctrl_x64.dll在运行目录**下,此文件在stormchat-client-golang/res/目录下。 + 3. ### 客户端-C# Visual Studio 2015以上版本打开项目,直接编译即可。 + + ## 注意事项 * 没有设计注册账户的API,只能在强插数据库。emmmm,这个坑懒得填了。 * 服务器端的日志文件不会自动清除(反正也没什么日志要写)。 * 其他的,想到再补充。 + + ## 目录结构(主要部分)
 stormchat
@@ -171,7 +215,7 @@ stormchat
 ├─design            //设计文件
 │    message.png
 │    operations.svg
-│    stormchat.mdj       //starUML设计文件
+│    stormchat.zip       //starUML设计文件
 │      
 │
 ├─stormchat-server  //服务器端工程目录
@@ -224,6 +268,9 @@ stormchat
    └─StormChatWPF               //数据表现和用户交互模块*
 
+ + + ## 使用截图 ### Golang客户端 diff --git a/design/stormchat.mdj b/design/stormchat.mdj deleted file mode 100644 index 1403604..0000000 --- a/design/stormchat.mdj +++ /dev/null @@ -1,15078 +0,0 @@ -{ - "_type": "Project", - "_id": "AAAAAAFF+h6SjaM2Hec=", - "name": "stormchat", - "ownedElements": [ - { - "_type": "UMLModel", - "_id": "AAAAAAFF+qBWK6M3Z8Y=", - "_parent": { - "$ref": "AAAAAAFF+h6SjaM2Hec=" - }, - "name": "server", - "ownedElements": [ - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFm+G3MId0ghoE=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "storm-server", - "ownedViews": [ - { - "_type": "UMLClassView", - "_id": "AAAAAAFm+LRASuNkAdE=", - "_parent": { - "$ref": "AAAAAAFm+G3MId0ghoE=" - }, - "model": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFm+LRASuNlAdM=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNkAdE=" - }, - "model": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFm+LRASuNmzYA=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNlAdM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 32, - "top": -48, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFm+LRASuNnrf0=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNlAdM=" - }, - "font": "Arial;13;1", - "left": 301, - "top": 151, - "width": 390, - "height": 13, - "text": "StormServer" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFm+LRASuNo+YA=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNlAdM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 32, - "top": -48, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFm+LRASuNpL9Q=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNlAdM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 32, - "top": -48, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 296, - "top": 144, - "width": 400, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFm+LRASuNmzYA=" - }, - "nameLabel": { - "$ref": "AAAAAAFm+LRASuNnrf0=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFm+LRASuNo+YA=" - }, - "propertyLabel": { - "$ref": "AAAAAAFm+LRASuNpL9Q=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFm+LRAS+NqEJk=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNkAdE=" - }, - "model": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFm+LoO8+ORHu4=", - "_parent": { - "$ref": "AAAAAAFm+LRAS+NqEJk=" - }, - "model": { - "$ref": "AAAAAAFm+LoOseOOhqY=" - }, - "font": "Arial;13;0", - "left": 301, - "top": 174, - "width": 390, - "height": 13, - "text": "+ChatMap[]: StormChat", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 296, - "top": 169, - "width": 400, - "height": 23 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFm+LRAS+NrDlI=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNkAdE=" - }, - "model": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFm+LojluOXF1w=", - "_parent": { - "$ref": "AAAAAAFm+LRAS+NrDlI=" - }, - "model": { - "$ref": "AAAAAAFm+LojWOOU4vE=" - }, - "font": "Arial;13;0", - "left": 301, - "top": 197, - "width": 390, - "height": 13, - "text": "+Destroy()", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 296, - "top": 192, - "width": 400, - "height": 23 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFm+LRAS+NsLsE=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNkAdE=" - }, - "model": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 16, - "top": -24, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFm+LRAS+Ntj4E=", - "_parent": { - "$ref": "AAAAAAFm+LRASuNkAdE=" - }, - "model": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 16, - "top": -24, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 296, - "top": 144, - "width": 400, - "height": 248, - "nameCompartment": { - "$ref": "AAAAAAFm+LRASuNlAdM=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFm+LRAS+NqEJk=" - }, - "operationCompartment": { - "$ref": "AAAAAAFm+LRAS+NrDlI=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFm+LRAS+NsLsE=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFm+LRAS+Ntj4E=" - } - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFm+G804d1aFHo=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "session", - "ownedViews": [ - { - "_type": "UMLClassView", - "_id": "AAAAAAFnEWVvaYWDNMI=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "model": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnEWVvaYWEvNM=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "model": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnEWVvaYWFQ48=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWEvNM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -208, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnEWVvaYWGa8U=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWEvNM=" - }, - "font": "Arial;13;1", - "left": 245, - "top": 127, - "width": 391, - "height": 13, - "text": "StormChat" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnEWVvaYWH67o=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWEvNM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -208, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnEWVvaoWIAy0=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWEvNM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -208, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 240, - "top": 120, - "width": 401, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnEWVvaYWFQ48=" - }, - "nameLabel": { - "$ref": "AAAAAAFnEWVvaYWGa8U=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnEWVvaYWH67o=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnEWVvaoWIAy0=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnEWVvaoWJSV8=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "model": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnEWnZuIWu4k8=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnEWnZiIWryTE=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 150, - "width": 391, - "height": 13, - "text": "+Sender: UserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnEWyr3YYLWDo=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnEWyrloYIf2g=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 165, - "width": 391, - "height": 13, - "text": "+Receiver: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnEWznUIYSe8c=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnEWznDoYPN0I=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 180, - "width": 391, - "height": 13, - "text": "+Addr: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnEWz5VoYZQ9o=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnEWz5PYYWY/c=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 195, - "width": 391, - "height": 13, - "text": "+Conn: net.TCPConn", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnEW141YYh7Jo=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnEW14k4Ye2rE=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 210, - "width": 391, - "height": 13, - "text": "+Status", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnSakoDABAPV4=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnSaknzQA9h10=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 225, - "width": 391, - "height": 13, - "text": "+WriteChan", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnSaeIlPzlSEA=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "model": { - "$ref": "AAAAAAFnSaeIUPziNPs=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 240, - "width": 391, - "height": 13, - "text": "+StopChan", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 240, - "top": 145, - "width": 401, - "height": 113 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnEWVvaoWKnDU=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "model": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXFVPIdhRko=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXFU9odeVIE=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 263, - "width": 391, - "height": 13, - "text": "+ReceiveLoop()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXF4xoeG8/s=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXF4d4eDYps=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 278, - "width": 391, - "height": 13, - "text": "+SendLoop()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXJj+YgFy2A=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXJjtIgC21E=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 293, - "width": 391, - "height": 13, - "text": "+PingHandler()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXKIWogqe3s=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXKIBognOsg=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 308, - "width": 391, - "height": 13, - "text": "+LoginHandler(headInfo: HeadInfo)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnvB8JN99v6ag=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnvB8I/99sBJY=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 323, - "width": 391, - "height": 13, - "text": "+Login2Handler(headInfo: HeadInfo)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXKo6ohGQYg=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXKo04hDb4A=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 338, - "width": 391, - "height": 13, - "text": "+LogoutHandler(HeadInfo)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXLkG4hi+ac=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXLkBIhfO7A=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 353, - "width": 391, - "height": 13, - "text": "+MessageHandler(HeadInfo)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNJrkCs+fRlk=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnNJrjwc+cZXA=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 368, - "width": 391, - "height": 13, - "text": "+GetUserListHandler()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNJx3l9BwN+Q=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnNJx3VtBtnX4=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 383, - "width": 391, - "height": 13, - "text": "+GetUserPhotoHandler()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNEUs4sNNKas=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnNEUsocNKo78=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 398, - "width": 391, - "height": 13, - "text": "+UpdateUserInfoHandler(head, data)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnvB+A/+B99ho=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnvB+AzuB6Egg=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 413, - "width": 391, - "height": 13, - "text": "+GetUsersHandler()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXaxnIpTtYI=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXaxZopQL7c=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 428, - "width": 391, - "height": 13, - "text": "+TransMessage(msg: Message)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnHQDeUcF39L8=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnHOHLVLx/3c8=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 443, - "width": 391, - "height": 13, - "text": "+TransUnreadedMessages(user: UserInfo)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXYsYYogyBw=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXYsG4odrxk=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 458, - "width": 391, - "height": 13, - "text": "+Offline(oldChat: StormChat)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXWjvYnNnY8=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXWjeInK3VY=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 473, - "width": 391, - "height": 13, - "text": "+SendData(HeadInfo, data []byte)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXSNEomVoYs=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXSMy4mSlKM=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 488, - "width": 391, - "height": 13, - "text": "+SendPanic(curOperation: string, err: string)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXPIjokF61M=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXPIW4kCkf0=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 503, - "width": 391, - "height": 13, - "text": "-send(byte[*], []byte)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXGVXIeiwzs=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXGVR4efI0Q=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 518, - "width": 391, - "height": 13, - "text": "-waitData()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnEXOCAojXmGU=", - "_parent": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "model": { - "$ref": "AAAAAAFnEXOBu4jUIMs=" - }, - "font": "Arial;13;0", - "left": 245, - "top": 533, - "width": 391, - "height": 13, - "text": "-readDataWithLength(maxLength: int16)", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 240, - "top": 258, - "width": 401, - "height": 293 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnEWVvaoWLRA0=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "model": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -112, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnEWVvaoWMG6E=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "model": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -112, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 240, - "top": 120, - "width": 401, - "height": 681, - "nameCompartment": { - "$ref": "AAAAAAFnEWVvaYWEvNM=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnEWVvaoWJSV8=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnEWVvaoWKnDU=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnEWVvaoWLRA0=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnEWVvaoWMG6E=" - } - }, - { - "_type": "UMLEnumerationView", - "_id": "AAAAAAFnEW3HG4Yn2uw=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnEW3HG4YowBo=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnEW3HG4YpU54=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4YowBo=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 125, - "width": 151, - "height": 13, - "text": "«enumeration»" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnEW3HG4YqruA=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4YowBo=" - }, - "font": "Arial;13;1", - "left": 21, - "top": 140, - "width": 151, - "height": 13, - "text": "ChatStatus" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnEW3HG4YrANU=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4YowBo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1808, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnEW3HG4YsudY=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4YowBo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1808, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 16, - "top": 120, - "width": 161, - "height": 38, - "stereotypeLabel": { - "$ref": "AAAAAAFnEW3HG4YpU54=" - }, - "nameLabel": { - "$ref": "AAAAAAFnEW3HG4YqruA=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnEW3HG4YrANU=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnEW3HG4YsudY=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnEW3HG4Yt1ZQ=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -904, - "width": 10, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnEW3HG4YuReM=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -904, - "width": 10, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnEW3HG4YvUCk=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -904, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnEW3HG4YwyUg=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -904, - "width": 10, - "height": 10 - }, - { - "_type": "UMLEnumerationLiteralCompartmentView", - "_id": "AAAAAAFnEW3HHIYx9Bc=", - "_parent": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "model": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "subViews": [ - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnEW53C4ZdZic=", - "_parent": { - "$ref": "AAAAAAFnEW3HHIYx9Bc=" - }, - "model": { - "$ref": "AAAAAAFnEW52y4Zawso=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 163, - "width": 151, - "height": 13, - "text": "Created", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnEW6k5IZkTT8=", - "_parent": { - "$ref": "AAAAAAFnEW3HHIYx9Bc=" - }, - "model": { - "$ref": "AAAAAAFnEW6ksIZhQUw=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 178, - "width": 151, - "height": 13, - "text": "Running", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnEW62zYZra8g=", - "_parent": { - "$ref": "AAAAAAFnEW3HHIYx9Bc=" - }, - "model": { - "$ref": "AAAAAAFnEW62tYZoR1g=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 193, - "width": 151, - "height": 13, - "text": "Stopped", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnEW8SL4Zy0wI=", - "_parent": { - "$ref": "AAAAAAFnEW3HHIYx9Bc=" - }, - "model": { - "$ref": "AAAAAAFnEW8R8oZvC94=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 208, - "width": 151, - "height": 13, - "text": "RecvClosed", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnEW/+Z4Z7+tI=", - "_parent": { - "$ref": "AAAAAAFnEW3HHIYx9Bc=" - }, - "model": { - "$ref": "AAAAAAFnEW/+IoZ4QEo=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 223, - "width": 151, - "height": 13, - "text": "Destroyed", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 16, - "top": 158, - "width": 161, - "height": 83 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 16, - "top": 120, - "width": 161, - "height": 153, - "nameCompartment": { - "$ref": "AAAAAAFnEW3HG4YowBo=" - }, - "suppressAttributes": true, - "suppressOperations": true, - "attributeCompartment": { - "$ref": "AAAAAAFnEW3HG4Yt1ZQ=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnEW3HG4YuReM=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnEW3HG4YvUCk=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnEW3HG4YwyUg=" - }, - "enumerationLiteralCompartment": { - "$ref": "AAAAAAFnEW3HHIYx9Bc=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF5+zJ/7OaVE=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 120, - "width": 333.751953125, - "height": 25, - "text": "StormChat,一个session,处理一个客户的事务" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6ENK//d+34=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 168, - "width": 333.751953125, - "height": 25, - "text": "Sender,消息发送者(客户身份)" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6Hr2AAf67s=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 192, - "width": 333.751953125, - "height": 25, - "text": "Receiver,消息接收者" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6KV2ACdnAQ=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 216, - "width": 333.751953125, - "height": 25, - "text": "Addr,远程客户端地址" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6MOVAEKugk=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 240, - "width": 333.751953125, - "height": 25, - "text": "Conn,与客户的TCP连接" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6NiewE0GSE=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 264, - "width": 333.751953125, - "height": 25, - "text": "Status,当前Session状态" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6Pb7QFi4aE=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 352, - "width": 333.751953125, - "height": 25, - "text": "ReceiveLoop(),消息接收循环线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6RUcwGVIQQ=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 376, - "width": 333.751953125, - "height": 25, - "text": "SendLoop(),消息发送循环线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6TqyAHObCE=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 400, - "width": 333.751953125, - "height": 25, - "text": "PingHandler(),心跳包到达事件处理函数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6VrhwIB0Cg=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 424, - "width": 333.751953125, - "height": 25, - "text": "LoginHandler(),登录请求处理函数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6X5OAJEG9U=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 472, - "width": 333.751953125, - "height": 25, - "text": "LogoutHandler(),登出请求处理函数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6ZBQAJo5+k=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 496, - "width": 333.751953125, - "height": 25, - "text": "MessageHandler(),消息到达处理函数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF6asewKS0sI=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 616, - "width": 333.751953125, - "height": 25, - "text": "TransMessage(),转发消息到目标客户" - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnF6x5vANWYps=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "model": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnF6x5vANXN80=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANWYps=" - }, - "model": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnF6x5vANYfYI=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANXN80=" - }, - "visible": false, - "font": "Arial;13;0", - "top": -48, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF6x5vANZHJk=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANXN80=" - }, - "font": "Arial;13;1", - "left": 21, - "top": 295, - "width": 151, - "height": 13, - "text": "HeadInfo" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF6x5vANae7A=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANXN80=" - }, - "visible": false, - "font": "Arial;13;0", - "top": -48, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF6x5vANblg4=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANXN80=" - }, - "visible": false, - "font": "Arial;13;0", - "top": -48, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 16, - "top": 288, - "width": 161, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnF6x5vANYfYI=" - }, - "nameLabel": { - "$ref": "AAAAAAFnF6x5vANZHJk=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnF6x5vANae7A=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnF6x5vANblg4=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnF6x5vANcRXM=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANWYps=" - }, - "model": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnF64oJAWmnmw=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANcRXM=" - }, - "model": { - "$ref": "AAAAAAFnF64n4gWgwPM=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 318, - "width": 151, - "height": 13, - "text": "+map[string]string", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 16, - "top": 313, - "width": 161, - "height": 23 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnF6x5vQNdv24=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANWYps=" - }, - "model": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "font": "Arial;13;0", - "left": 16, - "top": 336, - "width": 161, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnF6x5vQNeSmU=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANWYps=" - }, - "model": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "visible": false, - "font": "Arial;13;0", - "top": -24, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnF6x5vQNfrqg=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANWYps=" - }, - "model": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "visible": false, - "font": "Arial;13;0", - "top": -24, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 16, - "top": 288, - "width": 161, - "height": 105, - "nameCompartment": { - "$ref": "AAAAAAFnF6x5vANXN80=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnF6x5vANcRXM=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnF6x5vQNdv24=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnF6x5vQNeSmU=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnF6x5vQNfrqg=" - } - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnF6yirgOTEb0=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 16, - "top": 352, - "width": 160.9599609375, - "height": 32, - "text": "解析JSON得到的map数据" - }, - { - "_type": "UMLAssociationView", - "_id": "AAAAAAFnF63FfgTH+e0=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTDJrc=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTILqA=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTDJrc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 202, - "top": 387, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTJkX8=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTDJrc=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 197, - "top": 401, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTKgWc=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTDJrc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 213, - "top": 358, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTLMCU=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTEm/8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 209, - "top": 389, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTMg6c=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTEm/8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 202, - "top": 401, - "height": 13, - "alpha": 0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTNPVI=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTEm/8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 222, - "top": 364, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTOy8Y=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTFJFk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 196, - "top": 384, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTPuOs=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTFJFk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 194, - "top": 398, - "height": 13, - "alpha": -0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnF63FfgTQfZM=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTFJFk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 201, - "top": 357, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - } - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnF63FfgTR3cE=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTEm/8=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 10, - "height": 10 - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnF63FfgTS0WM=", - "_parent": { - "$ref": "AAAAAAFnF63FfgTH+e0=" - }, - "model": { - "$ref": "AAAAAAFnF63FfQTFJFk=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnF6x5vANWYps=" - }, - "tail": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "lineStyle": 1, - "points": "239:390;177:368", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnF63FfgTILqA=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnF63FfgTJkX8=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnF63FfgTKgWc=" - }, - "tailRoleNameLabel": { - "$ref": "AAAAAAFnF63FfgTLMCU=" - }, - "tailPropertyLabel": { - "$ref": "AAAAAAFnF63FfgTMg6c=" - }, - "tailMultiplicityLabel": { - "$ref": "AAAAAAFnF63FfgTNPVI=" - }, - "headRoleNameLabel": { - "$ref": "AAAAAAFnF63FfgTOy8Y=" - }, - "headPropertyLabel": { - "$ref": "AAAAAAFnF63FfgTPuOs=" - }, - "headMultiplicityLabel": { - "$ref": "AAAAAAFnF63FfgTQfZM=" - }, - "tailQualifiersCompartment": { - "$ref": "AAAAAAFnF63FfgTR3cE=" - }, - "headQualifiersCompartment": { - "$ref": "AAAAAAFnF63FfgTS0WM=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF7W+vguHgVA=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 664, - "width": 333.751953125, - "height": 25, - "text": "Offline(),勒令用户下线" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF7ab/AvV55A=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 688, - "width": 333.751953125, - "height": 25, - "text": "SendData(),发送数据到客户端" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF7gWbA6pwnE=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 712, - "width": 333.751953125, - "height": 25, - "text": "SendPanic(),发送Panic消息到客户端,断开连接" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF7jcJQ9AuyM=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 768, - "width": 333.751953125, - "height": 25, - "text": "waitData(),等待客户端数据,并监控Status变化" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF7swshEZ84s=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 744, - "width": 333.751953125, - "height": 25, - "text": "send(),将要发送给客户端的数据发送到写循环线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF75+CBdmdQM=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 792, - "width": 333.751953125, - "height": 25, - "text": "readDataWinthLength(),从TCP连接中读出数据" - }, - { - "_type": "UMLAssociationView", - "_id": "AAAAAAFnHGiwobHwLWA=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHsuQA=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobHx8bY=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHsuQA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 198, - "top": 287, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobHyv+o=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHsuQA=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 189, - "top": 299, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobHzaZA=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHsuQA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 217, - "top": 264, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobH0Pu8=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHtB+k=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 209, - "top": 295, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobH1mwk=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHtB+k=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 199, - "top": 305, - "height": 13, - "alpha": 0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobH2emA=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHtB+k=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 229, - "top": 276, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobH38DY=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHuup8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 188, - "top": 279, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobH47Y8=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHuup8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 182, - "top": 291, - "height": 13, - "alpha": -0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGiwobH5v4M=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHuup8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 201, - "top": 255, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - } - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnHGiwobH6SAQ=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHtB+k=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 10, - "height": 10 - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnHGiwobH7Acc=", - "_parent": { - "$ref": "AAAAAAFnHGiwobHwLWA=" - }, - "model": { - "$ref": "AAAAAAFnHGiwoLHuup8=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnEW3HG4Yn2uw=" - }, - "tail": { - "$ref": "AAAAAAFnEWVvaYWDNMI=" - }, - "lineStyle": 1, - "points": "239:306;177:258", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnHGiwobHx8bY=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnHGiwobHyv+o=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnHGiwobHzaZA=" - }, - "tailRoleNameLabel": { - "$ref": "AAAAAAFnHGiwobH0Pu8=" - }, - "tailPropertyLabel": { - "$ref": "AAAAAAFnHGiwobH1mwk=" - }, - "tailMultiplicityLabel": { - "$ref": "AAAAAAFnHGiwobH2emA=" - }, - "headRoleNameLabel": { - "$ref": "AAAAAAFnHGiwobH38DY=" - }, - "headPropertyLabel": { - "$ref": "AAAAAAFnHGiwobH47Y8=" - }, - "headMultiplicityLabel": { - "$ref": "AAAAAAFnHGiwobH5v4M=" - }, - "tailQualifiersCompartment": { - "$ref": "AAAAAAFnHGiwobH6SAQ=" - }, - "headQualifiersCompartment": { - "$ref": "AAAAAAFnHGiwobH7Acc=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHOKpEL3X7TU=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 640, - "width": 333.751953125, - "height": 25, - "text": "TransUnreadedMessages(),用户登录时转发未读消息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEYMi8SAYDA=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 568, - "width": 333.751953125, - "height": 25, - "text": "UpdateUserInfoHandler(),更新用户信息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNJzn+dG8VUo=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 520, - "width": 333.751953125, - "height": 25, - "text": "GetUserListHandler(),请求好友列表处理函数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNJz2kdHx7Fc=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 544, - "width": 333.751953125, - "height": 25, - "text": "GetUserPhotoHandler(),请求用户头像处理函数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnSagt6f+Wz7c=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 288, - "width": 333.751953125, - "height": 25, - "text": "WriteChan,数据发送通道" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnSah+Zf/YZG8=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 312, - "width": 333.751953125, - "height": 25, - "text": "StopChan,写消息循环终止通道,由读循环控制" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvB0JrN2oGL0=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 592, - "width": 333.751953125, - "height": 25, - "text": "GetUsersHandler(),获取(特定/所有)用户信息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvB6LNt6HInk=", - "_parent": { - "$ref": "AAAAAAFm+G804d1aFHo=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 448, - "width": 333.751953125, - "height": 25, - "text": "Login2Handler(),登录请求处理函数(新版)" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFm+LRASeNiRy4=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "StormServer", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFm+LoOseOOhqY=", - "_parent": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "name": "ChatMap[]", - "type": "StormChat" - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFm+LojWOOU4vE=", - "_parent": { - "$ref": "AAAAAAFm+LRASeNiRy4=" - }, - "name": "Destroy" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnEWVvaYWB2bQ=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "StormChat", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnEXBQR4Z/6/w=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnEXBQR4aA5pk=", - "_parent": { - "$ref": "AAAAAAFnEXBQR4Z/6/w=" - }, - "reference": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnEXBQR4aBFak=", - "_parent": { - "$ref": "AAAAAAFnEXBQR4Z/6/w=" - }, - "reference": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnF63FfQTDJrc=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnF63FfQTEm/8=", - "_parent": { - "$ref": "AAAAAAFnF63FfQTDJrc=" - }, - "reference": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnF63FfQTFJFk=", - "_parent": { - "$ref": "AAAAAAFnF63FfQTDJrc=" - }, - "reference": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGiwoLHsuQA=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGiwoLHtB+k=", - "_parent": { - "$ref": "AAAAAAFnHGiwoLHsuQA=" - }, - "reference": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGiwoLHuup8=", - "_parent": { - "$ref": "AAAAAAFnHGiwoLHsuQA=" - }, - "reference": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "aggregation": "composite" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWnZiIWryTE=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Sender", - "type": { - "$ref": "AAAAAAFnEWqAz4W4XMc=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWyrloYIf2g=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Receiver", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWznDoYPN0I=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Addr", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWz5PYYWY/c=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Conn", - "type": "net.TCPConn" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEW14k4Ye2rE=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Status", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnSaknzQA9h10=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "WriteChan", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnSaeIUPziNPs=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "StopChan", - "type": "" - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXFU9odeVIE=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "ReceiveLoop" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXF4d4eDYps=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "SendLoop" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXJjtIgC21E=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "PingHandler" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXKIBognOsg=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "LoginHandler", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnF6u02AMcEJA=", - "_parent": { - "$ref": "AAAAAAFnEXKIBognOsg=" - }, - "name": "headInfo", - "type": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - } - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnvB8I/99sBJY=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Login2Handler", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnvB9WDN+RXos=", - "_parent": { - "$ref": "AAAAAAFnvB8I/99sBJY=" - }, - "name": "headInfo", - "type": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - } - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXKo04hDb4A=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "LogoutHandler", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnF6wF9AMxgrc=", - "_parent": { - "$ref": "AAAAAAFnEXKo04hDb4A=" - }, - "name": "HeadInfo", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXLkBIhfO7A=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "MessageHandler", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnF65/QQYCBK4=", - "_parent": { - "$ref": "AAAAAAFnEXLkBIhfO7A=" - }, - "name": "HeadInfo", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNJrjwc+cZXA=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "GetUserListHandler" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNJx3VtBtnX4=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "GetUserPhotoHandler" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNEUsocNKo78=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "UpdateUserInfoHandler", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnNEW7gcOBER4=", - "_parent": { - "$ref": "AAAAAAFnNEUsocNKo78=" - }, - "name": "head", - "type": "" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnNEb1DMTUXeY=", - "_parent": { - "$ref": "AAAAAAFnNEUsocNKo78=" - }, - "name": "data", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnvB+AzuB6Egg=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "GetUsersHandler" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXaxZopQL7c=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "TransMessage", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXbd94pviZ0=", - "_parent": { - "$ref": "AAAAAAFnEXaxZopQL7c=" - }, - "name": "msg", - "type": "Message" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnHOHLVLx/3c8=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "TransUnreadedMessages", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHOI8aLy2EFo=", - "_parent": { - "$ref": "AAAAAAFnHOHLVLx/3c8=" - }, - "name": "user", - "type": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - } - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXYsG4odrxk=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "Offline", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXZ9u4o8Ohc=", - "_parent": { - "$ref": "AAAAAAFnEXYsG4odrxk=" - }, - "name": "oldChat", - "type": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - } - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXWjeInK3VY=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "SendData", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXX3eonpuE0=", - "_parent": { - "$ref": "AAAAAAFnEXWjeInK3VY=" - }, - "name": "HeadInfo", - "type": "" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXX3eonqcX0=", - "_parent": { - "$ref": "AAAAAAFnEXWjeInK3VY=" - }, - "name": "data []byte", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXSMy4mSlKM=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "SendPanic", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXUtBomxzxc=", - "_parent": { - "$ref": "AAAAAAFnEXSMy4mSlKM=" - }, - "name": "curOperation", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXUtB4myJGA=", - "_parent": { - "$ref": "AAAAAAFnEXSMy4mSlKM=" - }, - "name": "err", - "type": "string" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXPIW4kCkf0=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "send", - "visibility": "private", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXQAw4kfUOM=", - "_parent": { - "$ref": "AAAAAAFnEXPIW4kCkf0=" - }, - "name": "byte", - "type": "", - "multiplicity": "*" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnEXQAxIkgaG8=", - "_parent": { - "$ref": "AAAAAAFnEXPIW4kCkf0=" - }, - "name": "[]byte", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXGVR4efI0Q=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "waitData", - "visibility": "private" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnEXOBu4jUIMs=", - "_parent": { - "$ref": "AAAAAAFnEWVvaYWB2bQ=" - }, - "name": "readDataWithLength", - "visibility": "private", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnF79TahiTxxE=", - "_parent": { - "$ref": "AAAAAAFnEXOBu4jUIMs=" - }, - "name": "maxLength", - "type": "int16" - } - ] - } - ] - }, - { - "_type": "UMLEnumeration", - "_id": "AAAAAAFnEW3HGoYlYQQ=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "ChatStatus", - "literals": [ - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnEW52y4Zawso=", - "_parent": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "name": "Created" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnEW6ksIZhQUw=", - "_parent": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "name": "Running" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnEW62tYZoR1g=", - "_parent": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "name": "Stopped" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnEW8R8oZvC94=", - "_parent": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "name": "RecvClosed" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnEW/+IoZ4QEo=", - "_parent": { - "$ref": "AAAAAAFnEW3HGoYlYQQ=" - }, - "name": "Destroyed" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnF6x5vANUQRA=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "HeadInfo", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnF64n4gWgwPM=", - "_parent": { - "$ref": "AAAAAAFnF6x5vANUQRA=" - }, - "name": "map[string]string", - "type": "" - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFnF7Co3Af+aBY=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "message", - "ownedViews": [ - { - "_type": "UMLClassView", - "_id": "AAAAAAFnF7DtHggQ1Is=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "model": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnF7DtHggRKdA=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggQ1Is=" - }, - "model": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnF7DtHggSnPM=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggRKdA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -144, - "top": -16, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF7DtHggTdq0=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggRKdA=" - }, - "font": "Arial;13;1", - "left": 269, - "top": 79, - "width": 319, - "height": 13, - "text": "Message" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF7DtHggUd1Q=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggRKdA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -144, - "top": -16, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF7DtHggVoG8=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggRKdA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -144, - "top": -16, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 264, - "top": 72, - "width": 329, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnF7DtHggSnPM=" - }, - "nameLabel": { - "$ref": "AAAAAAFnF7DtHggTdq0=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnF7DtHggUd1Q=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnF7DtHggVoG8=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnF7DtHggWJFs=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggQ1Is=" - }, - "model": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnF7ET+wg78tY=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggWJFs=" - }, - "model": { - "$ref": "AAAAAAFnF7ETugg4dHY=" - }, - "font": "Arial;13;0", - "left": 269, - "top": 102, - "width": 319, - "height": 13, - "text": "+When: Time", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnF7GenQhHUsk=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggWJFs=" - }, - "model": { - "$ref": "AAAAAAFnF7GeYwhE1Wo=" - }, - "font": "Arial;13;0", - "left": 269, - "top": 117, - "width": 319, - "height": 13, - "text": "+From UserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnF8T6shvg9Co=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggWJFs=" - }, - "model": { - "$ref": "AAAAAAFnF8T6gRvdDz0=" - }, - "font": "Arial;13;0", - "left": 269, - "top": 132, - "width": 319, - "height": 13, - "text": "+To: UserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnF7HqxghOHIY=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggWJFs=" - }, - "model": { - "$ref": "AAAAAAFnF7HqighLw+E=" - }, - "font": "Arial;13;0", - "left": 269, - "top": 147, - "width": 319, - "height": 13, - "text": "+Msg: byte", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 264, - "top": 97, - "width": 329, - "height": 68 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnF7DtHggXvzQ=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggQ1Is=" - }, - "model": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnF9MLJRwARgM=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggXvzQ=" - }, - "model": { - "$ref": "AAAAAAFnF9MK8Bv967Y=" - }, - "font": "Arial;13;0", - "left": 269, - "top": 170, - "width": 319, - "height": 13, - "text": "+Save()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnHQDeYsGA+2Y=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggXvzQ=" - }, - "model": { - "$ref": "AAAAAAFnHME3IbpNHo0=" - }, - "font": "Arial;13;0", - "left": 269, - "top": 185, - "width": 319, - "height": 13, - "text": "+QuerySavedMessages(user: UserInfo): Messages", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 264, - "top": 165, - "width": 329, - "height": 38 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnF7DtHggYF1Q=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggQ1Is=" - }, - "model": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -72, - "top": -8, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnF7DtHggZjZg=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggQ1Is=" - }, - "model": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -72, - "top": -8, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 264, - "top": 72, - "width": 329, - "height": 265, - "nameCompartment": { - "$ref": "AAAAAAFnF7DtHggRKdA=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnF7DtHggWJFs=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnF7DtHggXvzQ=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnF7DtHggYF1Q=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnF7DtHggZjZg=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF85QHRvogp0=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 72, - "width": 329, - "height": 25, - "text": "定义一条客户消息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF86clhvxXrY=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 120, - "width": 329, - "height": 25, - "text": "When,服务器接收消息的时间" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF87o0xv3ZVY=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 144, - "width": 329, - "height": 25, - "text": "From,消息发送者" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF9NEixwEDYg=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 168, - "width": 329, - "height": 25, - "text": "To,消息接收者" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF9RGQRwPf98=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 192, - "width": 329, - "height": 27, - "text": "\nMsg,消息内容" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnF9S+txwY94A=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 232, - "width": 329, - "height": 27, - "text": "\nSave(),将消息存储到数据库,标准Base64编码" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHMF+ALpXrHw=", - "_parent": { - "$ref": "AAAAAAFnF7Co3Af+aBY=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 256, - "width": 355.1689453125, - "height": 27, - "text": "QuerySavedMessages(),查询用户未读消息,解码后返回" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnF7DtHggOpZA=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "Message", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnF7ETugg4dHY=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "name": "When", - "type": "Time" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnF7GeYwhE1Wo=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "name": "From UserInfo", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnF8T6gRvdDz0=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "name": "To", - "type": { - "$ref": "AAAAAAFnEWqAz4W4XMc=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnF7HqighLw+E=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "name": "Msg", - "type": "byte" - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFnF9MK8Bv967Y=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "name": "Save" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnHME3IbpNHo0=", - "_parent": { - "$ref": "AAAAAAFnF7DtHggOpZA=" - }, - "name": "QuerySavedMessages", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHMFu0rpUNtw=", - "_parent": { - "$ref": "AAAAAAFnHME3IbpNHo0=" - }, - "type": "Messages", - "direction": "return" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHMO1lbpeGTs=", - "_parent": { - "$ref": "AAAAAAFnHME3IbpNHo0=" - }, - "name": "user", - "type": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - } - } - ] - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFnF+LbDx2rrJU=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "user", - "ownedViews": [ - { - "_type": "UMLClassView", - "_id": "AAAAAAFnF+MPOh3Ah9c=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "model": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnF+MPOh3B2qU=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3Ah9c=" - }, - "model": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnF+MPOh3C2a4=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3B2qU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -32, - "top": -432, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF+MPOh3D3b4=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3B2qU=" - }, - "font": "Arial;13;1", - "left": 365, - "top": 111, - "width": 279, - "height": 13, - "text": "UserInfo" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF+MPOx3ETNU=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3B2qU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -32, - "top": -432, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnF+MPOx3FORU=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3B2qU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -32, - "top": -432, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 360, - "top": 104, - "width": 289, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnF+MPOh3C2a4=" - }, - "nameLabel": { - "$ref": "AAAAAAFnF+MPOh3D3b4=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnF+MPOx3ETNU=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnF+MPOx3FORU=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnF+MPOx3GT1E=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3Ah9c=" - }, - "model": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnHF0praQxI8w=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3GT1E=" - }, - "model": { - "$ref": "AAAAAAFnHF0paKQue3s=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 134, - "width": 279, - "height": 13, - "text": "+User: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnHF1NBKQ400o=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3GT1E=" - }, - "model": { - "$ref": "AAAAAAFnHF1M0qQ1ZdQ=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 149, - "width": 279, - "height": 13, - "text": "+NickName: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnHF1+GqQ//bo=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3GT1E=" - }, - "model": { - "$ref": "AAAAAAFnHF196qQ8FaI=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 164, - "width": 279, - "height": 13, - "text": "+Motto: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnHF2SQaRGd3c=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3GT1E=" - }, - "model": { - "$ref": "AAAAAAFnHF2SJqRDyZg=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 179, - "width": 279, - "height": 13, - "text": "+UGroup: UserGroup", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 360, - "top": 129, - "width": 289, - "height": 68 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnF+MPOx3Hu30=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3Ah9c=" - }, - "model": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnHGxn7rUX64A=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnHGxntrUUPQI=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 202, - "width": 279, - "height": 13, - "text": "+QueryUserInfo(username: string): UserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNIovKMvDK10=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnNIou5svA2E0=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 217, - "width": 279, - "height": 13, - "text": "+GetUserPhoto()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnHG5RNLW9Kno=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnHG5RCrW6s4U=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 232, - "width": 279, - "height": 13, - "text": "+Login(user: string, pwd: string): UserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnHH+oP7efH7c=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnHH+oB7ec5iI=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 247, - "width": 279, - "height": 13, - "text": "+GetUserList(): UserInfos", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNEGSN8EFdBs=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnNEGR78EC40I=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 262, - "width": 279, - "height": 13, - "text": "+UpdateNickName(nickname: string)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNEIlysFIRF0=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnNEIllsFFV4Q=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 277, - "width": 279, - "height": 13, - "text": "+UpdatePassword(pwd: string)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnNELSRMGCeG4=", - "_parent": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "model": { - "$ref": "AAAAAAFnNELSC8F/wmA=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 292, - "width": 279, - "height": 13, - "text": "+UpdateMotto(motto: string)", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 360, - "top": 197, - "width": 289, - "height": 113 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnF+MPOx3Ir0E=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3Ah9c=" - }, - "model": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -24, - "top": -216, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnF+MPOx3Jv6A=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh3Ah9c=" - }, - "model": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -24, - "top": -216, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 360, - "top": 104, - "width": 289, - "height": 329, - "nameCompartment": { - "$ref": "AAAAAAFnF+MPOh3B2qU=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnF+MPOx3GT1E=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnF+MPOx3Hu30=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnF+MPOx3Ir0E=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnF+MPOx3Jv6A=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGDD3KZXhY4=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 104, - "width": 329, - "height": 25, - "text": "UserInfo,用户信息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGFaC6i8nvI=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 152, - "width": 329, - "height": 25, - "text": "User,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGHrcqlz90c=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 176, - "width": 329, - "height": 25, - "text": "NickName,昵称(12字以内)" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGWkYa2qj6A=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 200, - "width": 329, - "height": 25, - "text": "Motto,签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGXYu63OCGk=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 224, - "width": 329, - "height": 25, - "text": "UGroup,用户组,标识用户类型" - }, - { - "_type": "UMLEnumerationView", - "_id": "AAAAAAFnHGdeda68Fuw=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnHGdeda69+eQ=", - "_parent": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnHGdeda6+3AQ=", - "_parent": { - "$ref": "AAAAAAFnHGdeda69+eQ=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 485, - "width": 279, - "height": 13, - "text": "«enumeration»" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnHGdeda6/zHE=", - "_parent": { - "$ref": "AAAAAAFnHGdeda69+eQ=" - }, - "font": "Arial;13;1", - "left": 365, - "top": 500, - "width": 279, - "height": 13, - "text": "UserGroup" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnHGdeda7ANxU=", - "_parent": { - "$ref": "AAAAAAFnHGdeda69+eQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1184, - "top": 165, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnHGdeda7BDws=", - "_parent": { - "$ref": "AAAAAAFnHGdeda69+eQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1184, - "top": 165, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 360, - "top": 480, - "width": 289, - "height": 38, - "stereotypeLabel": { - "$ref": "AAAAAAFnHGdeda6+3AQ=" - }, - "nameLabel": { - "$ref": "AAAAAAFnHGdeda6/zHE=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnHGdeda7ANxU=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnHGdeda7BDws=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnHGdeda7C104=", - "_parent": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -384, - "top": 184, - "width": 10, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnHGdeda7D46s=", - "_parent": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -384, - "top": 184, - "width": 10, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnHGdeda7E8ZA=", - "_parent": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -384, - "top": 184, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnHGdeda7F6Gw=", - "_parent": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -384, - "top": 184, - "width": 10, - "height": 10 - }, - { - "_type": "UMLEnumerationLiteralCompartmentView", - "_id": "AAAAAAFnHGdeda7G6+Y=", - "_parent": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "subViews": [ - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnHGdeda7HkwI=", - "_parent": { - "$ref": "AAAAAAFnHGdeda7G6+Y=" - }, - "model": { - "$ref": "AAAAAAFnHF5YU6R71+g=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 523, - "width": 279, - "height": 13, - "text": "User", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnHGdeda7IVxk=", - "_parent": { - "$ref": "AAAAAAFnHGdeda7G6+Y=" - }, - "model": { - "$ref": "AAAAAAFnHF5rxaSCsIQ=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 538, - "width": 279, - "height": 13, - "text": "Vip", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnHGdeda7JbWM=", - "_parent": { - "$ref": "AAAAAAFnHGdeda7G6+Y=" - }, - "model": { - "$ref": "AAAAAAFnHF6LOaSJQiU=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 553, - "width": 279, - "height": 13, - "text": "Admin", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnHGdeda7KWwU=", - "_parent": { - "$ref": "AAAAAAFnHGdeda7G6+Y=" - }, - "model": { - "$ref": "AAAAAAFnHGZJBa4BuKs=" - }, - "font": "Arial;13;0", - "left": 365, - "top": 568, - "width": 279, - "height": 13, - "text": "Group", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 360, - "top": 518, - "width": 289, - "height": 68 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 360, - "top": 480, - "width": 289, - "height": 137, - "nameCompartment": { - "$ref": "AAAAAAFnHGdeda69+eQ=" - }, - "suppressAttributes": true, - "suppressOperations": true, - "attributeCompartment": { - "$ref": "AAAAAAFnHGdeda7C104=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnHGdeda7D46s=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnHGdeda7E8ZA=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnHGdeda7F6Gw=" - }, - "enumerationLiteralCompartment": { - "$ref": "AAAAAAFnHGdeda7G6+Y=" - } - }, - { - "_type": "UMLAssociationView", - "_id": "AAAAAAFnHGh+SbFiJxY=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFeoFk=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SbFjvfk=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFeoFk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 518, - "top": 449, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SbFkqZ8=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFeoFk=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 533, - "top": 449, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SbFlV7U=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFeoFk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 489, - "top": 450, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SbFmLxU=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFfN6M=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 519, - "top": 452, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SrFn/wE=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFfN6M=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 532, - "top": 455, - "height": 13, - "alpha": 0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SrFomvc=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFfN6M=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 491, - "top": 448, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SrFpw9Q=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFgji0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 519, - "top": 447, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SrFq3kM=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFgji0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 532, - "top": 444, - "height": 13, - "alpha": -0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnHGh+SrFr8No=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFgji0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 491, - "top": 451, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - } - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnHGh+SrFsUKg=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFfN6M=" - }, - "visible": false, - "font": "Arial;13;0", - "top": 32, - "width": 10, - "height": 10 - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnHGh+SrFtPHI=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFiJxY=" - }, - "model": { - "$ref": "AAAAAAFnHGh+SbFgji0=" - }, - "visible": false, - "font": "Arial;13;0", - "top": 32, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnHGdeda68Fuw=" - }, - "tail": { - "$ref": "AAAAAAFnF+MPOh3Ah9c=" - }, - "lineStyle": 1, - "points": "504:433;504:479", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnHGh+SbFjvfk=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnHGh+SbFkqZ8=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnHGh+SbFlV7U=" - }, - "tailRoleNameLabel": { - "$ref": "AAAAAAFnHGh+SbFmLxU=" - }, - "tailPropertyLabel": { - "$ref": "AAAAAAFnHGh+SrFn/wE=" - }, - "tailMultiplicityLabel": { - "$ref": "AAAAAAFnHGh+SrFomvc=" - }, - "headRoleNameLabel": { - "$ref": "AAAAAAFnHGh+SrFpw9Q=" - }, - "headPropertyLabel": { - "$ref": "AAAAAAFnHGh+SrFq3kM=" - }, - "headMultiplicityLabel": { - "$ref": "AAAAAAFnHGh+SrFr8No=" - }, - "tailQualifiersCompartment": { - "$ref": "AAAAAAFnHGh+SrFsUKg=" - }, - "headQualifiersCompartment": { - "$ref": "AAAAAAFnHGh+SrFtPHI=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGnbWbLtmq8=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 480, - "width": 329, - "height": 25, - "text": "UserGroup,用户组,定义用户类型" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGpPErNQ2i4=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 520, - "width": 329, - "height": 25, - "text": "User,普通用户" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGqEWbODSNc=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 544, - "width": 329, - "height": 25, - "text": "Vip,氪金用户" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGras7P82O8=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 568, - "width": 329, - "height": 25, - "text": "Admin,管理员账户" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHGsWyLQqk6Q=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 591, - "width": 329, - "height": 25, - "text": "Group,群组" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHHXINLb8A6g=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 264, - "width": 329, - "height": 25, - "text": "QueryUserInfo(),查询指定用户信息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHHaBXbdgsYw=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 312, - "width": 329, - "height": 25, - "text": "Login(),根据用户名和密码匹配用户" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHH/wxLfQ018=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 336, - "width": 329, - "height": 25, - "text": "GetUserList(),获取用户信息列表(不含头像)" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEMmRcHOXrg=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 360, - "width": 329, - "height": 25, - "text": "UpdateNickName(),更改昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEOn2cJCCEc=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 384, - "width": 329, - "height": 25, - "text": "UpdatePassword(),更改密码" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEP1AMKWAUo=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 408, - "width": 329, - "height": 25, - "text": "UpdateMotto(),更改签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNIsE08yc2Sg=", - "_parent": { - "$ref": "AAAAAAFnF+LbDx2rrJU=" - }, - "font": "Arial;13;0", - "left": 712, - "top": 288, - "width": 329, - "height": 25, - "text": "GetUserPhoto(),获取用户头像数据" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnF+MPOh2+3go=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "UserInfo", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGBztaUBOxE=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGBztaUC6+4=", - "_parent": { - "$ref": "AAAAAAFnHGBztaUBOxE=" - }, - "reference": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGBztaUD/Io=", - "_parent": { - "$ref": "AAAAAAFnHGBztaUBOxE=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGgCGq/1DQc=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGgCGq/25C8=", - "_parent": { - "$ref": "AAAAAAFnHGgCGq/1DQc=" - }, - "reference": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGgCGq/3BGY=", - "_parent": { - "$ref": "AAAAAAFnHGgCGq/1DQc=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGgnQrA+bvw=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGgnQrA/+r4=", - "_parent": { - "$ref": "AAAAAAFnHGgnQrA+bvw=" - }, - "reference": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGgnQrBAN7c=", - "_parent": { - "$ref": "AAAAAAFnHGgnQrA+bvw=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGhKdbD0b70=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGhKdbD1Kts=", - "_parent": { - "$ref": "AAAAAAFnHGhKdbD0b70=" - }, - "reference": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGhKdbD2cz4=", - "_parent": { - "$ref": "AAAAAAFnHGhKdbD0b70=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "aggregation": "shared" - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGh+SbFeoFk=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGh+SbFfN6M=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFeoFk=" - }, - "reference": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGh+SbFgji0=", - "_parent": { - "$ref": "AAAAAAFnHGh+SbFeoFk=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "aggregation": "composite" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnHF0paKQue3s=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "User", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnHF1M0qQ1ZdQ=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "NickName", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnHF196qQ8FaI=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "Motto", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnHF2SJqRDyZg=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "UGroup", - "type": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFnHGxntrUUPQI=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "QueryUserInfo", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHGyi1rUzAYA=", - "_parent": { - "$ref": "AAAAAAFnHGxntrUUPQI=" - }, - "name": "username", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHG4/4rWmb6M=", - "_parent": { - "$ref": "AAAAAAFnHGxntrUUPQI=" - }, - "type": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "direction": "return" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNIou5svA2E0=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "GetUserPhoto" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnHG5RCrW6s4U=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "Login", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHHWJYLa+/wc=", - "_parent": { - "$ref": "AAAAAAFnHG5RCrW6s4U=" - }, - "name": "user", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHHWJYba/1zw=", - "_parent": { - "$ref": "AAAAAAFnHG5RCrW6s4U=" - }, - "name": "pwd", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHHWlbbbYpcc=", - "_parent": { - "$ref": "AAAAAAFnHG5RCrW6s4U=" - }, - "type": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "direction": "return" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnHH+oB7ec5iI=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "GetUserList", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnHH/iw7e7VoA=", - "_parent": { - "$ref": "AAAAAAFnHH+oB7ec5iI=" - }, - "type": "UserInfos", - "direction": "return" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNEGR78EC40I=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "UpdateNickName", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnNEH+EcEol1I=", - "_parent": { - "$ref": "AAAAAAFnNEGR78EC40I=" - }, - "name": "nickname", - "type": "string" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNEIllsFFV4Q=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "UpdatePassword", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnNEK/7MFrhaw=", - "_parent": { - "$ref": "AAAAAAFnNEIllsFFV4Q=" - }, - "name": "pwd", - "type": "string" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnNELSC8F/wmA=", - "_parent": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - }, - "name": "UpdateMotto", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnNEMMh8Gpufg=", - "_parent": { - "$ref": "AAAAAAFnNELSC8F/wmA=" - }, - "name": "motto", - "type": "string" - } - ] - } - ] - }, - { - "_type": "UMLEnumeration", - "_id": "AAAAAAFnHF4MoqRKqMY=", - "_parent": { - "$ref": "AAAAAAFF+qBWK6M3Z8Y=" - }, - "name": "UserGroup", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnHGBdzaSXm54=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGBdzaSYh5Q=", - "_parent": { - "$ref": "AAAAAAFnHGBdzaSXm54=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnHGBdzaSZ3dg=", - "_parent": { - "$ref": "AAAAAAFnHGBdzaSXm54=" - }, - "reference": { - "$ref": "AAAAAAFnF+MPOh2+3go=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnr9dVuBWlpUo=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnr9dVuBWmjPo=", - "_parent": { - "$ref": "AAAAAAFnr9dVuBWlpUo=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnr9dVuBWnHJg=", - "_parent": { - "$ref": "AAAAAAFnr9dVuBWlpUo=" - }, - "reference": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnr9eGThYZPw8=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnr9eGVxYaV1o=", - "_parent": { - "$ref": "AAAAAAFnr9eGThYZPw8=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnr9eGVxYbDBk=", - "_parent": { - "$ref": "AAAAAAFnr9eGThYZPw8=" - }, - "reference": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "aggregation": "composite" - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFn1TBcaRoBYXc=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFn1TBcahoCC4w=", - "_parent": { - "$ref": "AAAAAAFn1TBcaRoBYXc=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFn1TBcahoDot8=", - "_parent": { - "$ref": "AAAAAAFn1TBcaRoBYXc=" - }, - "reference": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "aggregation": "composite" - } - } - ], - "literals": [ - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnHF5YU6R71+g=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "name": "User" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnHF5rxaSCsIQ=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "name": "Vip" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnHF6LOaSJQiU=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "name": "Admin" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnHGZJBa4BuKs=", - "_parent": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "name": "Group" - } - ] - } - ] - }, - { - "_type": "UMLModel", - "_id": "AAAAAAFm+GxoNtz31qw=", - "_parent": { - "$ref": "AAAAAAFF+h6SjaM2Hec=" - }, - "name": "common", - "ownedElements": [ - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFm+MaskuOd1fg=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "message", - "ownedViews": [ - { - "_type": "RectangleView", - "_id": "AAAAAAFm+Mkj7uPlg1g=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 192, - "top": 96, - "width": 193, - "height": 160 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFm+MlnGuPqOjg=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 472, - "top": 96, - "width": 497, - "height": 160 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFm+MmMQePuImY=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 104, - "top": 96, - "width": 89, - "height": 160 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFm+MmpIuPyTfg=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 384, - "top": 96, - "width": 89, - "height": 160 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+MvNo+QZPxE=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 120, - "top": 144, - "width": 62, - "height": 25, - "text": "包头长度" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+M16N+Rtz70=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 112, - "top": 168, - "width": 75, - "height": 25, - "text": "大端字节序" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+M6X5eR+smY=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;18;0", - "left": 104, - "top": 56, - "width": 187.029296875, - "height": 32, - "text": "Server-Client通信规则" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+M7NY+SCBUo=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 120, - "top": 192, - "width": 60, - "height": 25, - "text": "len = 4B" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+M7/vOSHrTA=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 216, - "top": 176, - "width": 145.0908203125, - "height": 25, - "text": "包头,由Operation决定" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+M/douSPDWk=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 400, - "top": 144, - "width": 62, - "height": 25, - "text": "数据长度" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+NBTleSW4TE=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 392, - "top": 168, - "width": 75, - "height": 25, - "text": "大端字节序" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+NB4g+ScPhM=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 400, - "top": 192, - "width": 60, - "height": 25, - "text": "len = 4B" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFm+NCc4eSgILE=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 648, - "top": 152, - "width": 127, - "height": 25, - "text": "长数据,由包头决定" - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnB/GmZ0LPano=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnB/GmZ0LQBBs=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LPano=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnB/GmZ0LRJ6M=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LQBBs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 293, - "top": 373, - "width": 303, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/GmZ0LSVCc=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LQBBs=" - }, - "font": "Arial;13;1", - "left": 293, - "top": 375, - "width": 303, - "height": 13, - "text": "Head" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/GmZ0LTQeA=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LQBBs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 688, - "top": -32, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/GmZ0LUJKU=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LQBBs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 293, - "top": 390, - "width": 303, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 368, - "width": 313, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnB/GmZ0LRJ6M=" - }, - "nameLabel": { - "$ref": "AAAAAAFnB/GmZ0LSVCc=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnB/GmZ0LTQeA=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnB/GmZ0LUJKU=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnB/GmZ0LVtTs=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LPano=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnB/JpT0MDDSE=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LVtTs=" - }, - "model": { - "$ref": "AAAAAAFnB/JpGUMAMdM=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 398, - "width": 303, - "height": 13, - "text": "+Token: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCFqg47NT+9g=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LVtTs=" - }, - "model": { - "$ref": "AAAAAAFnCFqgsLNQb/0=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 413, - "width": 303, - "height": 13, - "text": "+Operation: Operations", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFn1T+c0Bv9wMY=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LVtTs=" - }, - "model": { - "$ref": "AAAAAAFn1T+cnRv6m1U=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 428, - "width": 303, - "height": 13, - "text": "+Attribute1", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 393, - "width": 313, - "height": 53 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnB/GmZ0LWxMU=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LPano=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "font": "Arial;13;0", - "left": 288, - "top": 446, - "width": 313, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnB/GmZ0LXX6I=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LPano=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 344, - "top": -16, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnB/GmZ0LYnUE=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LPano=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 344, - "top": -16, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 288, - "top": 368, - "width": 313, - "height": 113, - "nameCompartment": { - "$ref": "AAAAAAFnB/GmZ0LQBBs=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnB/GmZ0LVtTs=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnB/GmZ0LWxMU=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnB/GmZ0LXX6I=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnB/GmZ0LYnUE=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnB/O8SUMbArk=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 368, - "width": 492.3798828125, - "height": 25, - "text": "Token,消息编号,由发送方生成,接受方处理后返回相同Token(如有返回数据)", - "wordWrap": false - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnB/P+CUM2h7g=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnB/P+CUM3vHo=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM2h7g=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnB/P+CUM4y5Q=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM3vHo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 197, - "top": 101, - "width": 183, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/P+CUM5z8U=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM3vHo=" - }, - "font": "Arial;13;1", - "left": 197, - "top": 103, - "width": 183, - "height": 13, - "text": "Head" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/P+CUM6qjE=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM3vHo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 332, - "top": -877, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/P+CUM7jUU=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM3vHo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 197, - "top": 118, - "width": 183, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 192, - "top": 96, - "width": 193, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnB/P+CUM4y5Q=" - }, - "nameLabel": { - "$ref": "AAAAAAFnB/P+CUM5z8U=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnB/P+CUM6qjE=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnB/P+CUM7jUU=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnB/P+CUM8ppM=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM2h7g=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnB/P+CUM9svo=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM8ppM=" - }, - "model": { - "$ref": "AAAAAAFnB/JpGUMAMdM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -47, - "top": -335, - "width": 183, - "height": 13, - "text": "+Token: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCFqg5bNWuWQ=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM8ppM=" - }, - "model": { - "$ref": "AAAAAAFnCFqgsLNQb/0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -64, - "top": 32, - "width": 135.4970703125, - "height": 13, - "text": "+Operation: Operations", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFn1T+c0hwAvDE=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM8ppM=" - }, - "model": { - "$ref": "AAAAAAFn1T+cnRv6m1U=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 63.2353515625, - "height": 13, - "text": "+Attribute1", - "horizontalAlignment": 0 - } - ], - "visible": false, - "font": "Arial;13;0", - "left": 176, - "top": -52, - "width": 193, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnB/P+CUM+Zno=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM2h7g=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "font": "Arial;13;0", - "left": 192, - "top": 121, - "width": 193, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnB/P+CUM/eUo=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM2h7g=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 256, - "top": -461, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnB/P+CUNAz/E=", - "_parent": { - "$ref": "AAAAAAFnB/P+CUM2h7g=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 256, - "top": -461, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 192, - "top": 96, - "width": 193, - "height": 52, - "nameCompartment": { - "$ref": "AAAAAAFnB/P+CUM3vHo=" - }, - "suppressAttributes": true, - "attributeCompartment": { - "$ref": "AAAAAAFnB/P+CUM8ppM=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnB/P+CUM+Zno=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnB/P+CUM/eUo=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnB/P+CUNAz/E=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnB/tAVUOm4D4=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnB/tAVUOnI0Q=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOm4D4=" - }, - "model": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnB/tAVUOoWDA=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOnI0Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 64, - "top": 640, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/tAVUOp+wk=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOnI0Q=" - }, - "font": "Arial;13;1", - "left": 293, - "top": 991, - "width": 303, - "height": 13, - "text": "SenderHead" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/tAVUOqri4=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOnI0Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 64, - "top": 640, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnB/tAVUOr28U=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOnI0Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 64, - "top": 640, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 984, - "width": 313, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnB/tAVUOoWDA=" - }, - "nameLabel": { - "$ref": "AAAAAAFnB/tAVUOp+wk=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnB/tAVUOqri4=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnB/tAVUOr28U=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnB/tAVUOsNNw=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOm4D4=" - }, - "model": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCIXVL+CtL9A=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOsNNw=" - }, - "model": { - "$ref": "AAAAAAFnCIXU/uCqkk0=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 1014, - "width": 303, - "height": 13, - "text": "+Params", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 1009, - "width": 313, - "height": 23 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnB/tAVUOtW20=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOm4D4=" - }, - "model": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "font": "Arial;13;0", - "left": 288, - "top": 1032, - "width": 313, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnB/tAVUOuwQk=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOm4D4=" - }, - "model": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 48, - "top": 320, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnB/tAVUOv+r8=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOm4D4=" - }, - "model": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 48, - "top": 320, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 288, - "top": 984, - "width": 313, - "height": 89, - "nameCompartment": { - "$ref": "AAAAAAFnB/tAVUOnI0Q=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnB/tAVUOsNNw=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnB/tAVUOtW20=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnB/tAVUOuwQk=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnB/tAVUOv+r8=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnB/0/FUeAUnk=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 1160, - "width": 376, - "height": 25, - "text": "Results,参数,由Operation决定,详见operation说明图" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCFwRObRss6c=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 392, - "width": 377, - "height": 25, - "text": "Operation,执行的操作名称" - }, - { - "_type": "UMLEnumerationView", - "_id": "AAAAAAFnCGJSWraVVWw=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnCGJSWraWeX0=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnCGJSWraX+5U=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraWeX0=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 541, - "width": 303, - "height": 13, - "text": "«enumeration»" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCGJSWraYxS0=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraWeX0=" - }, - "font": "Arial;13;1", - "left": 293, - "top": 556, - "width": 303, - "height": 13, - "text": "Operations" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCGJSWraZCrA=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraWeX0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 592, - "top": 320, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCGJSWraatYo=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraWeX0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 592, - "top": 320, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 536, - "width": 313, - "height": 38, - "stereotypeLabel": { - "$ref": "AAAAAAFnCGJSWraX+5U=" - }, - "nameLabel": { - "$ref": "AAAAAAFnCGJSWraYxS0=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnCGJSWraZCrA=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCGJSWraatYo=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnCGJSWrab6Y0=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 296, - "top": 160, - "width": 10, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnCGJSWracy6Q=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 296, - "top": 160, - "width": 10, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnCGJSWradov4=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 296, - "top": 160, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnCGJSWraeG3M=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 296, - "top": 160, - "width": 10, - "height": 10 - }, - { - "_type": "UMLEnumerationLiteralCompartmentView", - "_id": "AAAAAAFnCGJSWraf2OI=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "subViews": [ - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnCPW051mphr4=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnCPW0mFmm2/k=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 579, - "width": 303, - "height": 13, - "text": "Panic", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnCGRXaLy+43g=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnCGRXMLy4Bb0=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 594, - "width": 303, - "height": 13, - "text": "TransMessage", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnCL6ID+w8dgI=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnCL6HzOw5F3o=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 609, - "width": 303, - "height": 13, - "text": "SendMessage", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnvAowT9Z4jvo=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnvAowIdZ1zwM=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 624, - "width": 303, - "height": 13, - "text": "Login2", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnCGSpwr0xHDQ=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnCGSpgr0r+FQ=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 639, - "width": 303, - "height": 13, - "text": "Login", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnDdBFkNOsZjY=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnDdBFTdOpQvw=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 654, - "width": 303, - "height": 13, - "text": "Logout", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnD9vlwak+Cbg=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnD9vlbKk7PfU=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 669, - "width": 303, - "height": 13, - "text": "Offline", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnCGlEQMcS6QI=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnCGlD8scMQVU=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 684, - "width": 303, - "height": 13, - "text": "GetUserList", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnHQCFLsBXRWg=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnHPTor7+hW/0=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 699, - "width": 303, - "height": 13, - "text": "UpdateUserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnvBqhN9o5JZM=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnvBqg/9o2cxE=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 714, - "width": 303, - "height": 13, - "text": "GetUsers", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnDNSmwM7I+lg=", - "_parent": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - }, - "model": { - "$ref": "AAAAAAFnDNSmdc7FPgA=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 729, - "width": 303, - "height": 13, - "text": "Ping", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 574, - "width": 313, - "height": 173 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 288, - "top": 536, - "width": 313, - "height": 345, - "nameCompartment": { - "$ref": "AAAAAAFnCGJSWraWeX0=" - }, - "suppressAttributes": true, - "suppressOperations": true, - "attributeCompartment": { - "$ref": "AAAAAAFnCGJSWrab6Y0=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnCGJSWracy6Q=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnCGJSWradov4=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnCGJSWraeG3M=" - }, - "enumerationLiteralCompartment": { - "$ref": "AAAAAAFnCGJSWraf2OI=" - } - }, - { - "_type": "UMLAssociationView", - "_id": "AAAAAAFnCGPW5bvAfB4=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu8hGY=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvBz4Y=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu8hGY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 458, - "top": 501, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvCF+E=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu8hGY=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 473, - "top": 501, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvDfyg=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu8hGY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 429, - "top": 502, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvEnkk=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu9YGY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 459, - "top": 500, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvFnag=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu9YGY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 472, - "top": 503, - "height": 13, - "alpha": 0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvGn/A=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu9YGY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 431, - "top": 496, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvHNo8=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu+SVM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 459, - "top": 503, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvIh9I=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu+SVM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 472, - "top": 500, - "height": 13, - "alpha": -0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCGPW5bvJvew=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu+SVM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 431, - "top": 507, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - } - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnCGPW5bvKA6U=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu9YGY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -24, - "width": 10, - "height": 10 - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnCGPW5bvLgIM=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bvAfB4=" - }, - "model": { - "$ref": "AAAAAAFnCGPW5bu+SVM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -24, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnCGJSWraVVWw=" - }, - "tail": { - "$ref": "AAAAAAFnB/GmZ0LPano=" - }, - "lineStyle": 1, - "points": "444:481;444:535", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnCGPW5bvBz4Y=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnCGPW5bvCF+E=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCGPW5bvDfyg=" - }, - "tailRoleNameLabel": { - "$ref": "AAAAAAFnCGPW5bvEnkk=" - }, - "tailPropertyLabel": { - "$ref": "AAAAAAFnCGPW5bvFnag=" - }, - "tailMultiplicityLabel": { - "$ref": "AAAAAAFnCGPW5bvGn/A=" - }, - "headRoleNameLabel": { - "$ref": "AAAAAAFnCGPW5bvHNo8=" - }, - "headPropertyLabel": { - "$ref": "AAAAAAFnCGPW5bvIh9I=" - }, - "headMultiplicityLabel": { - "$ref": "AAAAAAFnCGPW5bvJvew=" - }, - "tailQualifiersCompartment": { - "$ref": "AAAAAAFnCGPW5bvKA6U=" - }, - "headQualifiersCompartment": { - "$ref": "AAAAAAFnCGPW5bvLgIM=" - } - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCGvzbctSDBs=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 184, - "top": 368, - "width": 101, - "height": 25, - "text": "消息头基本信息" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCGx4ZMws6lo=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 224, - "top": 536, - "width": 62, - "height": 25, - "text": "执行操作" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCGzWJcxlsI4=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 616, - "width": 377, - "height": 25, - "text": "TransMessage,服务器转发消息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCG7yz81miW0=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 688, - "width": 377, - "height": 25, - "text": "Login,客户端登录,服务器返回用户基本数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCG9uVs2olKQ=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 760, - "width": 377, - "height": 25, - "text": "GetUserList,客户端获取好友列表" - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnCHRdb9B4LG8=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnCHRdb9B5wws=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B4LG8=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnCHRdb9B6ngw=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B5wws=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 29, - "top": 989, - "width": 183, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHRdb9B77AQ=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B5wws=" - }, - "font": "Arial;13;1", - "left": 29, - "top": 991, - "width": 183, - "height": 13, - "text": "Head" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHRdb9B8w74=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B5wws=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -248, - "top": 233, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHRdb9B9Jmc=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B5wws=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 29, - "top": 1006, - "width": 183, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 24, - "top": 984, - "width": 193, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnCHRdb9B6ngw=" - }, - "nameLabel": { - "$ref": "AAAAAAFnCHRdb9B77AQ=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnCHRdb9B8w74=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCHRdb9B9Jmc=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnCHRdb9B+MO0=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B4LG8=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCHRdb9B/e9M=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B+MO0=" - }, - "model": { - "$ref": "AAAAAAFnB/JpGUMAMdM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -627, - "top": 775, - "width": 183, - "height": 13, - "text": "+Token: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCHRdb9CAowY=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B+MO0=" - }, - "model": { - "$ref": "AAAAAAFnCFqgsLNQb/0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -644, - "top": 1142, - "width": 135.4970703125, - "height": 13, - "text": "+Operation: Operations", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFn1T+c1BwGLxY=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B+MO0=" - }, - "model": { - "$ref": "AAAAAAFn1T+cnRv6m1U=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 63.2353515625, - "height": 13, - "text": "+Attribute1", - "horizontalAlignment": 0 - } - ], - "visible": false, - "font": "Arial;13;0", - "left": 24, - "top": 868, - "width": 193, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnCHRdb9CBdQg=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B4LG8=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 1009, - "width": 193, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnCHRdb9CC8ww=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B4LG8=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 104, - "top": 459, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnCHRdb9CDibY=", - "_parent": { - "$ref": "AAAAAAFnCHRdb9B4LG8=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 104, - "top": 459, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 24, - "top": 984, - "width": 193, - "height": 73, - "nameCompartment": { - "$ref": "AAAAAAFnCHRdb9B5wws=" - }, - "suppressAttributes": true, - "attributeCompartment": { - "$ref": "AAAAAAFnCHRdb9B+MO0=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnCHRdb9CBdQg=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnCHRdb9CC8ww=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnCHRdb9CDibY=" - } - }, - { - "_type": "UMLGeneralizationView", - "_id": "AAAAAAFnCHSVXtFJVnQ=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnCHSVXtFHBsE=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCHSVXtFKsUc=", - "_parent": { - "$ref": "AAAAAAFnCHSVXtFJVnQ=" - }, - "model": { - "$ref": "AAAAAAFnCHSVXtFHBsE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 251, - "top": 1031, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnCHSVXtFJVnQ=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCHSVXtFLCpg=", - "_parent": { - "$ref": "AAAAAAFnCHSVXtFJVnQ=" - }, - "model": { - "$ref": "AAAAAAFnCHSVXtFHBsE=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 251, - "top": 1046, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnCHSVXtFJVnQ=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCHSVXtFMXC8=", - "_parent": { - "$ref": "AAAAAAFnCHSVXtFJVnQ=" - }, - "model": { - "$ref": "AAAAAAFnCHSVXtFHBsE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 252, - "top": 1002, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnCHSVXtFJVnQ=" - }, - "edgePosition": 1 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnCHRdb9B4LG8=" - }, - "tail": { - "$ref": "AAAAAAFnB/tAVUOm4D4=" - }, - "lineStyle": 1, - "points": "287:1024;217:1022", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnCHSVXtFKsUc=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnCHSVXtFLCpg=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCHSVXtFMXC8=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnCHpyXtg9Qx4=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnCHpyXtg+Spc=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg9Qx4=" - }, - "model": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnCHpyXtg/PF4=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg+Spc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -64, - "top": 464, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHpyXthAkss=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg+Spc=" - }, - "font": "Arial;13;1", - "left": 293, - "top": 1167, - "width": 303, - "height": 13, - "text": "ResponseHead" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHpyXthB47s=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg+Spc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -64, - "top": 464, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHpyXthCc6A=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg+Spc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -64, - "top": 464, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 1160, - "width": 313, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnCHpyXtg/PF4=" - }, - "nameLabel": { - "$ref": "AAAAAAFnCHpyXthAkss=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnCHpyXthB47s=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCHpyXthCc6A=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnCHpyXthDhbA=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg9Qx4=" - }, - "model": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCIVMS99wDZg=", - "_parent": { - "$ref": "AAAAAAFnCHpyXthDhbA=" - }, - "model": { - "$ref": "AAAAAAFnCIVMEt9qVYo=" - }, - "font": "Arial;13;0", - "left": 293, - "top": 1190, - "width": 303, - "height": 13, - "text": "+Results", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 288, - "top": 1185, - "width": 313, - "height": 23 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnCHpyXthE9Nk=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg9Qx4=" - }, - "model": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "font": "Arial;13;0", - "left": 288, - "top": 1208, - "width": 313, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnCHpyXthFg68=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg9Qx4=" - }, - "model": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -32, - "top": 232, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnCHpyX9hGqpQ=", - "_parent": { - "$ref": "AAAAAAFnCHpyXtg9Qx4=" - }, - "model": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -32, - "top": 232, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 288, - "top": 1160, - "width": 313, - "height": 97, - "nameCompartment": { - "$ref": "AAAAAAFnCHpyXtg+Spc=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnCHpyXthDhbA=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnCHpyXthE9Nk=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnCHpyXthFg68=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnCHpyX9hGqpQ=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnCHtq1Nmoepc=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnCHtq1NmpLYE=", - "_parent": { - "$ref": "AAAAAAFnCHtq1Nmoepc=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnCHtq1NmqtFk=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmpLYE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 29, - "top": 1165, - "width": 183, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHtq1NmrAp0=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmpLYE=" - }, - "font": "Arial;13;1", - "left": 29, - "top": 1167, - "width": 183, - "height": 13, - "text": "Head" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHtq1Nms9gE=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmpLYE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -644, - "top": 510, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnCHtq1NmtYQg=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmpLYE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 29, - "top": 1182, - "width": 183, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 24, - "top": 1160, - "width": 193, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnCHtq1NmqtFk=" - }, - "nameLabel": { - "$ref": "AAAAAAFnCHtq1NmrAp0=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnCHtq1Nms9gE=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCHtq1NmtYQg=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnCHtq1NmuIhc=", - "_parent": { - "$ref": "AAAAAAFnCHtq1Nmoepc=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCHtq1NmvWeU=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmuIhc=" - }, - "model": { - "$ref": "AAAAAAFnB/JpGUMAMdM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1023, - "top": 1052, - "width": 183, - "height": 13, - "text": "+Token: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnCHtq1Nmw/Iw=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmuIhc=" - }, - "model": { - "$ref": "AAAAAAFnCFqgsLNQb/0=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1040, - "top": 1419, - "width": 135.4970703125, - "height": 13, - "text": "+Operation: Operations", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFn1T+c1hwJzsA=", - "_parent": { - "$ref": "AAAAAAFnCHtq1NmuIhc=" - }, - "model": { - "$ref": "AAAAAAFn1T+cnRv6m1U=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 63.2353515625, - "height": 13, - "text": "+Attribute1", - "horizontalAlignment": 0 - } - ], - "visible": false, - "font": "Arial;13;0", - "left": 24, - "top": 1044, - "width": 193, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnCHtq1NmxuiI=", - "_parent": { - "$ref": "AAAAAAFnCHtq1Nmoepc=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 1185, - "width": 193, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnCHtq1NmywIQ=", - "_parent": { - "$ref": "AAAAAAFnCHtq1Nmoepc=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 104, - "top": 635, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnCHtq1Nmzeqc=", - "_parent": { - "$ref": "AAAAAAFnCHtq1Nmoepc=" - }, - "model": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 104, - "top": 635, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 24, - "top": 1160, - "width": 193, - "height": 73, - "nameCompartment": { - "$ref": "AAAAAAFnCHtq1NmpLYE=" - }, - "suppressAttributes": true, - "attributeCompartment": { - "$ref": "AAAAAAFnCHtq1NmuIhc=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnCHtq1NmxuiI=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnCHtq1NmywIQ=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnCHtq1Nmzeqc=" - } - }, - { - "_type": "UMLGeneralizationView", - "_id": "AAAAAAFnCHu3ltoLyoU=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "model": { - "$ref": "AAAAAAFnCHu3ltoJx+Q=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCHu3ltoMpaY=", - "_parent": { - "$ref": "AAAAAAFnCHu3ltoLyoU=" - }, - "model": { - "$ref": "AAAAAAFnCHu3ltoJx+Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 251, - "top": 1209, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnCHu3ltoLyoU=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCHu3ltoNEFE=", - "_parent": { - "$ref": "AAAAAAFnCHu3ltoLyoU=" - }, - "model": { - "$ref": "AAAAAAFnCHu3ltoJx+Q=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 251, - "top": 1224, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnCHu3ltoLyoU=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnCHu3ltoODbY=", - "_parent": { - "$ref": "AAAAAAFnCHu3ltoLyoU=" - }, - "model": { - "$ref": "AAAAAAFnCHu3ltoJx+Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 252, - "top": 1180, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnCHu3ltoLyoU=" - }, - "edgePosition": 1 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnCHtq1Nmoepc=" - }, - "tail": { - "$ref": "AAAAAAFnCHpyXtg9Qx4=" - }, - "lineStyle": 1, - "points": "287:1202;217:1200", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnCHu3ltoMpaY=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnCHu3ltoNEFE=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnCHu3ltoODbY=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCIYd1+DZTto=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 984, - "width": 377, - "height": 25, - "text": "Params,参数,由Operation决定,详见operation说明图" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCL7PSOyLyF0=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 640, - "width": 377, - "height": 25, - "text": "SendMessage,客户端发送消息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCPX1bFozJBo=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 592, - "width": 377, - "height": 25, - "text": "Panic,数据异常,服务器断开连接" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnDNTq8M8Ih7M=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 832, - "width": 377, - "height": 25, - "text": "Ping,客户端发送心跳包" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnDdBv+NPfi2w=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 712, - "width": 377, - "height": 25, - "text": "Logout,用户登出" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnD9xsB6sDcxo=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 736, - "width": 377, - "height": 25, - "text": "Offline,服务器勒令下线(账号被另一客户登录)" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnF7K3iAicAxA=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 200, - "width": 96.6708984375, - "height": 25, - "text": "JSON序列化" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHPbAnr/QD2g=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 784, - "width": 377, - "height": 25, - "text": "UpdateUserInfo,客户端请求更改昵称、密码、签名或头像" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnbjBn64PCDXo=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 192, - "top": 224, - "width": 192.78076171875, - "height": 25, - "text": "至少包含Operation和Token字段" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnbjOHRYdgvm0=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 536, - "width": 377, - "height": 33, - "text": "Operation决定包头需要携带的信息,详细定义见operation图" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnrTfiTu07lXc=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 120, - "top": 120, - "width": 62, - "height": 25, - "text": "【必须】" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnrTjqte4Jxjk=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 400, - "top": 120, - "width": 62, - "height": 25, - "text": "【必须】" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnrTkHfe5HC1g=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 256, - "top": 152, - "width": 62, - "height": 25, - "text": "【必须】" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnr8EKbxH4UTI=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 104, - "top": 264, - "width": 319.8291015625, - "height": 25, - "text": "注:数据传输中文本数据一律采用UTF-8编码" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAezD9XQN6w=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 664, - "width": 377, - "height": 25, - "text": "Login2,客户端登录,服务器返回用户信息数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBtCtts2F1w=", - "_parent": { - "$ref": "AAAAAAFm+MaskuOd1fg=" - }, - "font": "Arial;13;0", - "left": 632, - "top": 808, - "width": 377, - "height": 25, - "text": "GetUsers,获取(特定/所有)用户数据" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnB/GmZ0LNVTQ=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "Head", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnCGN4oro+bt4=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGN4oro/ibw=", - "_parent": { - "$ref": "AAAAAAFnCGN4oro+bt4=" - }, - "reference": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGN4orpAZYU=", - "_parent": { - "$ref": "AAAAAAFnCGN4oro+bt4=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnCGPW5bu8hGY=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGPW5bu9YGY=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bu8hGY=" - }, - "reference": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGPW5bu+SVM=", - "_parent": { - "$ref": "AAAAAAFnCGPW5bu8hGY=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - } - } - } - ], - "stereotype": "", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnB/JpGUMAMdM=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "name": "Token", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnCFqgsLNQb/0=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "name": "Operation", - "type": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFn1T+cnRv6m1U=", - "_parent": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - }, - "name": "Attribute1", - "type": "" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnB/tAVUOkVvY=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "SenderHead", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnB/vJKEPQqWY=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnB/vJKEPRo7U=", - "_parent": { - "$ref": "AAAAAAFnB/vJKEPQqWY=" - }, - "reference": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnB/vJKEPSV0g=", - "_parent": { - "$ref": "AAAAAAFnB/vJKEPQqWY=" - }, - "reference": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - } - } - }, - { - "_type": "UMLGeneralization", - "_id": "AAAAAAFnCHSVXtFHBsE=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "source": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "target": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnCIXU/uCqkk0=", - "_parent": { - "$ref": "AAAAAAFnB/tAVUOkVvY=" - }, - "name": "Params", - "type": "" - } - ] - }, - { - "_type": "UMLEnumeration", - "_id": "AAAAAAFnCGJSWbaTRcY=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "Operations", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnCGLvQ7e8Mpo=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGLvQ7e9Hdc=", - "_parent": { - "$ref": "AAAAAAFnCGLvQ7e8Mpo=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGLvQ7e+EGs=", - "_parent": { - "$ref": "AAAAAAFnCGLvQ7e8Mpo=" - }, - "reference": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnCGMW/rhNFjE=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGMW/rhOFig=", - "_parent": { - "$ref": "AAAAAAFnCGMW/rhNFjE=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGMW/rhPte8=", - "_parent": { - "$ref": "AAAAAAFnCGMW/rhNFjE=" - }, - "reference": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnCGNg27mt690=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGNg27mu7bQ=", - "_parent": { - "$ref": "AAAAAAFnCGNg27mt690=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnCGNg27mvtaU=", - "_parent": { - "$ref": "AAAAAAFnCGNg27mt690=" - }, - "reference": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - } - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnsPLr+JLzefQ=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnsPLr+JL0FuM=", - "_parent": { - "$ref": "AAAAAAFnsPLr+JLzefQ=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnsPLr+JL1UJA=", - "_parent": { - "$ref": "AAAAAAFnsPLr+JLzefQ=" - }, - "reference": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "aggregation": "shared" - } - } - ], - "literals": [ - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnCPW0mFmm2/k=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "Panic" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnCGRXMLy4Bb0=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "TransMessage" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnCL6HzOw5F3o=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "SendMessage" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnvAowIdZ1zwM=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "Login2" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnCGSpgr0r+FQ=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "Login" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnDdBFTdOpQvw=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "Logout" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnD9vlbKk7PfU=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "Offline" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnCGlD8scMQVU=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "GetUserList" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnHPTor7+hW/0=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "UpdateUserInfo" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnvBqg/9o2cxE=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "GetUsers" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnDNSmdc7FPgA=", - "_parent": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "name": "Ping" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnCHpyXdg7Uic=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "ResponseHead", - "ownedElements": [ - { - "_type": "UMLGeneralization", - "_id": "AAAAAAFnCHu3ltoJx+Q=", - "_parent": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "source": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "target": { - "$ref": "AAAAAAFnB/GmZ0LNVTQ=" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnCIVMEt9qVYo=", - "_parent": { - "$ref": "AAAAAAFnCHpyXdg7Uic=" - }, - "name": "Results", - "type": "" - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFnCJD5xebaqTo=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "operation", - "ownedViews": [ - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCJGmiedYJb0=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;18;0", - "left": 24, - "top": 48, - "width": 125.048828125, - "height": 30, - "text": "Operation说明" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCJIDWedeuHw=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 544, - "width": 209, - "height": 41 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCJKzvudvTus=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 544, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCJNpH+d+vBI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 648, - "width": 401, - "height": 97 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCJyFDOgUMVg=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 552, - "width": 201, - "height": 25, - "text": "【SERVER】TransMessage" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCJ+wH+ip1tE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 544, - "width": 393, - "height": 25, - "text": "When,消息产生时间;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCKW2gOizfRI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 568, - "width": 393, - "height": 25, - "text": "From,消息发送者ID;" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLIN3+riI2I=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 544, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLOol+r+kR0=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 648, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLV/M+sVeJM=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 111, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCLXuoOskTHA=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;15;0", - "left": 24, - "top": 120, - "width": 145, - "height": 27, - "text": "【发送方】操作名称" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLbkZus6M2w=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 111, - "width": 401, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCLbkZus78Xk=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;15;0", - "left": 240, - "top": 120, - "width": 257, - "height": 27, - "text": "Head域 请求参数列表" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLhGTutSdcs=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 111, - "width": 345, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCLhGTutTjgA=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;15;0", - "left": 644, - "top": 119, - "width": 145, - "height": 27, - "text": "Data域,请求数据" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLouX+uLBdE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 175, - "width": 401, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCLouX+uMFHQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;15;0", - "left": 240, - "top": 184, - "width": 257, - "height": 27, - "text": "Head域 反馈参数列表" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCLouX+uN8K8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 175, - "width": 345, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCLouX+uOEoA=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;15;0", - "left": 644, - "top": 183, - "width": 145, - "height": 27, - "text": "Data域,反馈数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCLs2L+ujcrY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 544, - "width": 337, - "height": 25, - "text": "消息内容数据" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCL1FP+vDJAQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 783, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCL1FP+vEWck=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 887, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCL1FP+vFcG4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 783, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCL1FP+vG6Eo=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 887, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCL1FP+vHvyU=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 783, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCL1FP+vIYdo=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 791, - "width": 209, - "height": 25, - "text": "【CLIENT】SendMessage" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCL/HJ+0bmLY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 784, - "width": 393, - "height": 25, - "text": "To,消息接收者ID;若省略则发送到上一接收对象" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCMCIJu0j+fQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 784, - "width": 337, - "height": 25, - "text": "消息内容数据" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCMKEJe0wR3s=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 88, - "width": 75, - "height": 25, - "text": "请求数据:" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCMOW7e1FzZc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 152, - "width": 75, - "height": 25, - "text": "反馈数据:" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNFtCe7IU4k=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1343, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNFtCe7JFyY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1447, - "width": 401, - "height": 106 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNFtCe7KrTY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1343, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNFtCe7LZvA=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1447, - "width": 345, - "height": 106 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNFtCe7MmKI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 1343, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCNFtCe7NUqs=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 1351, - "width": 209, - "height": 25, - "text": "【CLIENT】Login" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNFtCe7OEHg=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1344, - "width": 393, - "height": 25, - "text": "User,用户名;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNI1he7g/Ow=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1368, - "width": 393, - "height": 25, - "text": "Pwd,密码;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNQJbe7tzk0=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1448, - "width": 393, - "height": 25, - "text": "Error,错误文本,登陆成功为空;" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNUJRe78V98=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 2095, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNUJRe79Zm4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 2200, - "width": 401, - "height": 169 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNUJRe7+nDQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2095, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNUJRe7/QCU=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2199, - "width": 345, - "height": 170 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCNUJRe8A+UE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 2095, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCNUJRe8BBVI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 2103, - "width": 209, - "height": 25, - "text": "【CLIENT】GetUserList" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNUJRe8Eh88=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 2224, - "width": 393, - "height": 25, - "text": "Error,错误文本,成功为空;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNcftO8eCos=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 2200, - "width": 393, - "height": 25, - "text": "Count,获取到的用户个数;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNoGre81BBc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2224, - "width": 337, - "height": 25, - "text": "User,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNu9de88WCY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2248, - "width": 337, - "height": 25, - "text": "NickName,昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCNz89+9C904=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2200, - "width": 337, - "height": 25, - "text": "0...*" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCN5Itu9LpX8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2272, - "width": 337, - "height": 25, - "text": "Motto,签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCN68ju9RKkc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 2296, - "width": 337, - "height": 25, - "text": "UGroup,用户组" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCOvQU++gsU0=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;14;0", - "left": 240, - "top": 224, - "width": 323.4619140625, - "height": 26, - "text": "注:有结构的数据皆为json编码数据,[]为可选数据" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCPH85FlGy4g=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 303, - "width": 209, - "height": 42 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCPH85FlH4r0=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 303, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCPH85FlIvME=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 407, - "width": 401, - "height": 97 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnCPH85FlJ4VI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 28, - "top": 311, - "width": 201, - "height": 25, - "text": "【SERVER】Panic" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCPH85FlKpJE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 303, - "width": 393, - "height": 25, - "text": "Job,正在执行的操作" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnCPH85FlL00s=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 327, - "width": 393, - "height": 25, - "text": "Error,错误原因" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCPH85FlMK5Y=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 303, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnCPH85FlNvNc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 407, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDNXnP8/e/SY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 943, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDNXnP8/fYLM=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 1047, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDNXnP8/g4Vo=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1668, - "top": 943, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDNXnP8/hCwA=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1668, - "top": 1047, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDNXnP8/iLT4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1052, - "top": 943, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnDNXnP8/jd70=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1052, - "top": 951, - "width": 209, - "height": 25, - "text": "【CLIENT】Ping" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDc7JK9LgFsc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 241, - "top": 1849, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDc7JK9LhMF4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 241, - "top": 1953, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDc7JLdLilC8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 641, - "top": 1849, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDc7JLdLjpxE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 641, - "top": 1953, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDc7JLdLkks4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 25, - "top": 1849, - "width": 209, - "height": 41 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDdK1O9TScWI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 241, - "top": 1598, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDdK1O9TTkCE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 241, - "top": 1702, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDdK1O9TUhic=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 641, - "top": 1598, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDdK1O9TV4Nc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 641, - "top": 1702, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnDdK1O9TWrIY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 25, - "top": 1598, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnDdK1O9TXGpE=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 25, - "top": 1856, - "width": 209, - "height": 25, - "text": "【SERVER】Offline" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnDdK1O9TYSas=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 241, - "top": 1848, - "width": 393, - "height": 25, - "text": "Error,勒令下线原因" - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnD94Nt6todGc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 1608, - "width": 209, - "height": 25, - "text": "【Client】Logout" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnD+Va8Ktugac=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1872, - "width": 393, - "height": 25, - "text": "Addr,新客户端的地址(如果有)" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnD+0dQqt0An8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 888, - "width": 393, - "height": 25, - "text": "[Error],当NeedResult存在时返回错误内容,成功为空" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnHQLERFeSNiU=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 111, - "width": 401, - "height": 105 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnHQLERFeTygY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 232, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnHQLERFeUHMU=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1668, - "top": 111, - "width": 345, - "height": 105 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnHQLERFeV5Ts=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1668, - "top": 232, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnHQLERFeWElM=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1052, - "top": 112, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnHQLERFeXiyY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1052, - "top": 119, - "width": 209, - "height": 25, - "text": "【Client】UpdateUserInfo" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHQLERFeYSAk=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 111, - "width": 393, - "height": 25, - "text": "[NickName],新昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnHQRMh1euW+c=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 232, - "width": 393, - "height": 25, - "text": "Error,执行结果,为空则修改成功" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnND+1cMCMi0w=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 136, - "width": 393, - "height": 25, - "text": "[Password],新密码" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEEGJsCTawo=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 160, - "width": 393, - "height": 25, - "text": "[Motto],新签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEj138eeNg8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1268, - "top": 184, - "width": 393, - "height": 25, - "text": "Photo,头像数据长度" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnNEoaOceqiEY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1668, - "top": 111, - "width": 333, - "height": 25, - "text": "头像数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnq49swuujVy8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 808, - "width": 393, - "height": 25, - "text": "NeedResullt,当此字段不为0时要求服务器返回处理结果" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu/aCZNMr80g=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 24, - "top": 2136, - "width": 121.50537109375, - "height": 25, - "text": "Deprecated" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnu/sWMNNLHc4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1052, - "top": 415, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnu/sWMNNM+W4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1052, - "top": 422, - "width": 209, - "height": 25, - "text": "【Client】GetUsers" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnu/uZltNaOC4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 415, - "width": 401, - "height": 105 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnu/uZltNbF/E=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 535, - "width": 401, - "height": 290 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnu/uZltNcDw8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1670, - "top": 415, - "width": 345, - "height": 105 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnu/uZltNd53k=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1670, - "top": 535, - "width": 345, - "height": 202 - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu/wvPdNopbU=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 535, - "width": 393, - "height": 25, - "text": "Error,错误文本,如果非空其他数据将不存在" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu/2rlNN2c7Y=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1451, - "width": 337, - "height": 25, - "text": "User,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu/2rlNN3BTY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1475, - "width": 337, - "height": 25, - "text": "NickName,昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu/2rlNN4K+o=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1499, - "width": 337, - "height": 25, - "text": "Motto,签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu/2rlNN5vRQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1523, - "width": 337, - "height": 25, - "text": "UGroup,用户组" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnu//q9tOQqwc=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 415, - "width": 393, - "height": 25, - "text": "[User],用户名,如果指定了此参数,则仅返回对应用户的信息" - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnvAq/eNccJf4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1015, - "width": 401, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnvAq/eNcdS/w=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1119, - "width": 401, - "height": 162 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnvAq/eNceDMI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 642, - "top": 1015, - "width": 345, - "height": 97 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnvAq/eNcf9bg=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 642, - "top": 1119, - "width": 345, - "height": 162 - }, - { - "_type": "RectangleView", - "_id": "AAAAAAFnvAq/eNcgiLQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 26, - "top": 1015, - "width": 209, - "height": 41 - }, - { - "_type": "UMLTextView", - "_id": "AAAAAAFnvAq/eNchCrs=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 26, - "top": 1023, - "width": 209, - "height": 25, - "text": "【CLIENT】Login2" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNciSFk=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1016, - "width": 393, - "height": 25, - "text": "User,用户名;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNcjJmQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1040, - "width": 393, - "height": 25, - "text": "Pwd,密码;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNckv6o=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1119, - "width": 393, - "height": 25, - "text": "Error,错误文本,登陆成功为空;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNclRZ4=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1147, - "width": 393, - "height": 25, - "text": "User,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNcmAgs=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1171, - "width": 393, - "height": 25, - "text": "NickName,昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNcn3SI=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1195, - "width": 393, - "height": 25, - "text": "Motto,签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvAq/eNcontQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 242, - "top": 1219, - "width": 393, - "height": 25, - "text": "UGroup,用户组" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvA5u3ddUbgk=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 240, - "top": 1240, - "width": 393, - "height": 25, - "text": "Photo,头像数据长度" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvA/XXNdmAfY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 1120, - "width": 337, - "height": 25, - "text": "头像数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBLyndd44Jo=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 559, - "width": 393, - "height": 25, - "text": "Total,总用户数" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBNcDtd/KG8=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 584, - "width": 393, - "height": 25, - "text": "Count,当前数据序号" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBTLRNeJ17c=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 752, - "width": 393, - "height": 25, - "text": "Photo,头像数据长度" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBTLRNeKCi0=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 729, - "width": 393, - "height": 25, - "text": "UGroup,用户组" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBTLRNeLZ8c=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 705, - "width": 393, - "height": 25, - "text": "Motto,签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBTLRdeMLdQ=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 681, - "width": 393, - "height": 25, - "text": "NickName,昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBTLRdeN5CY=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1270, - "top": 657, - "width": 393, - "height": 25, - "text": "User,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvBakXNefJXw=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1672, - "top": 536, - "width": 333, - "height": 25, - "text": "头像数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvE9vhOFyodw=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1289.080078125, - "top": 608, - "width": 373.919921875, - "height": 25, - "text": "从1开始递增;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnvE+VU+F3e0s=", - "_parent": { - "$ref": "AAAAAAFnCJD5xebaqTo=" - }, - "font": "Arial;13;0", - "left": 1289.080078125, - "top": 632, - "width": 373.919921875, - "height": 25, - "text": "最后一个包值为-1,仅作结束封包而不包含数据;" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnEWqAz4W4XMc=", - "_parent": { - "$ref": "AAAAAAFm+GxoNtz31qw=" - }, - "name": "UserInfo", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWqu5oXimAI=", - "_parent": { - "$ref": "AAAAAAFnEWqAz4W4XMc=" - }, - "name": "User", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWsfIoXwLj8=", - "_parent": { - "$ref": "AAAAAAFnEWqAz4W4XMc=" - }, - "name": "NickName", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWtJUoX3EUs=", - "_parent": { - "$ref": "AAAAAAFnEWqAz4W4XMc=" - }, - "name": "Motto", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnEWrYd4Xp700=", - "_parent": { - "$ref": "AAAAAAFnEWqAz4W4XMc=" - }, - "name": "UGroup", - "type": "" - } - ] - } - ] - }, - { - "_type": "UMLModel", - "_id": "AAAAAAFnzmBkZ12L4iE=", - "_parent": { - "$ref": "AAAAAAFF+h6SjaM2Hec=" - }, - "name": "client-C#", - "ownedElements": [ - { - "_type": "UMLModel", - "_id": "AAAAAAFnp7Q36fVR840=", - "_parent": { - "$ref": "AAAAAAFnzmBkZ12L4iE=" - }, - "name": "Interact", - "ownedElements": [ - { - "_type": "UMLEnumeration", - "_id": "AAAAAAFnr9ZqNhTx5eA=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "UserGroup", - "literals": [ - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnr9bCvxUhVCM=", - "_parent": { - "$ref": "AAAAAAFnr9ZqNhTx5eA=" - }, - "name": "User" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnsOF0roya30o=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "Packet", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsOH+b42O/1o=", - "_parent": { - "$ref": "AAAAAAFnsOF0roya30o=" - }, - "name": "Head", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsOOYe42ngLw=", - "_parent": { - "$ref": "AAAAAAFnsOF0roya30o=" - }, - "name": "Data", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsOO36I2umgg=", - "_parent": { - "$ref": "AAAAAAFnsOF0roya30o=" - }, - "name": "Callback", - "type": "" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnsOuL+43sqcU=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "BaseHead", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnsPMMupNdKCE=", - "_parent": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnsPMMupNeAIo=", - "_parent": { - "$ref": "AAAAAAFnsPMMupNdKCE=" - }, - "reference": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "navigable": false - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnsPMMvpNfy8Q=", - "_parent": { - "$ref": "AAAAAAFnsPMMupNdKCE=" - }, - "reference": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - } - } - }, - { - "_type": "UMLGeneralization", - "_id": "AAAAAAFnsPPysJRAUmU=", - "_parent": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "source": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "target": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsOwFTY5BrAg=", - "_parent": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "name": "Token", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsOyo5I5JH1Y=", - "_parent": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "name": "Operation", - "type": "string" - } - ] - }, - { - "_type": "UMLEnumeration", - "_id": "AAAAAAFnsO+FF451S20=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "Operations" - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnsPO66JPy0oQ=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "ResultHead", - "ownedElements": [ - { - "_type": "UMLGeneralization", - "_id": "AAAAAAFnsPQSvJSAhyQ=", - "_parent": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "source": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "target": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsPQ4WpT62vE=", - "_parent": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "name": "Error", - "type": "string" - } - ] - }, - { - "_type": "UMLEnumeration", - "_id": "AAAAAAFnzkz+TxyfrCs=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "ClientStatus", - "literals": [ - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnzk1CRRzON0w=", - "_parent": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "name": "Uninitialized" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnzk10khzVNiA=", - "_parent": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "name": "Running" - }, - { - "_type": "UMLEnumerationLiteral", - "_id": "AAAAAAFnzk2CXBzc3Fw=", - "_parent": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "name": "Stopped" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnr8Qm+hLRI9k=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "User", - "ownedElements": [ - { - "_type": "UMLAssociation", - "_id": "AAAAAAFnr9ed4BaDT+g=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnr9ed4BaEQOY=", - "_parent": { - "$ref": "AAAAAAFnr9ed4BaDT+g=" - }, - "reference": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFnr9ed4BaFpjg=", - "_parent": { - "$ref": "AAAAAAFnr9ed4BaDT+g=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "aggregation": "composite" - } - }, - { - "_type": "UMLAssociation", - "_id": "AAAAAAFn1TBGwRmQGqs=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "end1": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFn1TBGwRmRsXM=", - "_parent": { - "$ref": "AAAAAAFn1TBGwRmQGqs=" - }, - "reference": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - }, - "end2": { - "_type": "UMLAssociationEnd", - "_id": "AAAAAAFn1TBGwRmSJX0=", - "_parent": { - "$ref": "AAAAAAFn1TBGwRmQGqs=" - }, - "reference": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "aggregation": "composite" - } - } - ], - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzm3g9mH6cuk=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "Users", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr8RZVxL7Cr4=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "Me", - "type": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmz/ymGwrvs=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "DefaultPhoto", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr8UJDhMGjKw=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "Name", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr9XURxTioew=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "NickName", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr9YNXxTqmO4=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "Motto", - "type": "string" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr9fdLhb5Ct0=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "Group", - "type": { - "$ref": "AAAAAAFnr9ZqNhTx5eA=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnznKWLGXL/cI=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "Photo", - "type": "Image" - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFnznDaKWTA3VQ=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "name": "FromUserName", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnznEMbmToMe0=", - "_parent": { - "$ref": "AAAAAAFnznDaKWTA3VQ=" - }, - "name": "username", - "type": "string" - } - ] - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnp7WMX/VycEU=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "StormClient", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr7CKIxB3kro=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnDisconnect", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnscqUXXp9khQ=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnPanic", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnscrsBHqFWxc=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnOffline", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnscsMgHqMhpc=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnMessage", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnscsivnqT/q0=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnSendMessageDone", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsctOLXqaI5Q=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnUpdateUserInfoDone", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr7EXRBB+XvI=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnLoginDone", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnscttN3qhUIQ=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "event OnGetUserListDone", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnsgarpnyDHjs=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "DoesSendMessageReturn", - "type": "bool" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzkx7pByTqx8=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "Status", - "type": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr7MFkRCjl/U=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "tcpClient", - "visibility": "private", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr7NYIhCrWDg=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "sendQueue", - "visibility": "private", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr7OQQRCyG4Q=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "readLoopThread", - "visibility": "private", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnr7PGUxC5YyU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "sendLoopThread", - "visibility": "private", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzkYEqBxoDdg=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "workingDictionary", - "type": "" - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFnp768IvXdZko=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "Initialize" - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnp8DShvXnMlE=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "QueueLogin", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnp8FQqfXuyEU=", - "_parent": { - "$ref": "AAAAAAFnp8DShvXnMlE=" - }, - "name": "user", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnp8FQqvXv45c=", - "_parent": { - "$ref": "AAAAAAFnp8DShvXnMlE=" - }, - "name": "password", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnp8HDPvXzyKo=", - "_parent": { - "$ref": "AAAAAAFnp8DShvXnMlE=" - }, - "name": "callback", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnsgqsQHzr9t0=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "QueueSendMessage", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnsgrhyXzyR5Q=", - "_parent": { - "$ref": "AAAAAAFnsgqsQHzr9t0=" - }, - "name": "Message message", - "type": "" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnsgrhyXzzIp8=", - "_parent": { - "$ref": "AAAAAAFnsgqsQHzr9t0=" - }, - "name": "callback ", - "type": "", - "defaultValue": "null" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnsgsDdnz4B8w=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "QueueLogout", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnsgs4oXz/O+g=", - "_parent": { - "$ref": "AAAAAAFnsgsDdnz4B8w=" - }, - "name": "callback", - "type": "", - "defaultValue": "null" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnsgtHZX0BC2k=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "QueueGetUserList", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnsguEP30ISq8=", - "_parent": { - "$ref": "AAAAAAFnsgtHZX0BC2k=" - }, - "name": "callback", - "type": "", - "defaultValue": "null" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnsguS1X0KYI8=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "QueueUpdateUserInfo", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnsgu7G30Rc7g=", - "_parent": { - "$ref": "AAAAAAFnsguS1X0KYI8=" - }, - "name": "callback", - "type": "", - "defaultValue": "null" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnr76c/BEU+cs=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "HandleAll", - "visibility": "private", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnr77kWREcONc=", - "_parent": { - "$ref": "AAAAAAFnr76c/BEU+cs=" - }, - "name": "head", - "type": "" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnr77kWREdGAA=", - "_parent": { - "$ref": "AAAAAAFnr76c/BEU+cs=" - }, - "name": "data", - "type": "" - } - ] - }, - { - "_type": "UMLOperation", - "_id": "AAAAAAFnp8vRhPYPjkU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "name": "Send", - "visibility": "private", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnp8xaYPYXzF8=", - "_parent": { - "$ref": "AAAAAAFnp8vRhPYPjkU=" - }, - "name": "head", - "type": "" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnp8xaYPYYnrY=", - "_parent": { - "$ref": "AAAAAAFnp8vRhPYPjkU=" - }, - "name": "data", - "type": "" - } - ] - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFnr6FF9A/7VxI=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "User", - "ownedViews": [ - { - "_type": "UMLClassView", - "_id": "AAAAAAFnr8Qm+hLTl68=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "model": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnr8Qm+xLU/SA=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLTl68=" - }, - "model": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnr8Qm+xLVONA=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLU/SA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -112, - "top": -32, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnr8Qm+xLW9IE=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLU/SA=" - }, - "font": "Arial;13;1", - "left": 285, - "top": 95, - "width": 342, - "height": 13, - "text": "User" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnr8Qm+xLXdf4=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLU/SA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -112, - "top": -32, - "width": 86.67724609375, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnr8Qm+xLY/1I=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLU/SA=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -112, - "top": -32, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 280, - "top": 88, - "width": 352, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnr8Qm+xLVONA=" - }, - "nameLabel": { - "$ref": "AAAAAAFnr8Qm+xLW9IE=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnr8Qm+xLXdf4=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnr8Qm+xLY/1I=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnr8Qm+xLZ5IM=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLTl68=" - }, - "model": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzm3hJWH9Ixo=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnzm3g9mH6cuk=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 118, - "width": 342, - "height": 13, - "text": "+Users", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr8RZlRL+968=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnr8RZVxL7Cr4=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 133, - "width": 342, - "height": 13, - "text": "+Me: User", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzm0AD2Gz7nI=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnzmz/ymGwrvs=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 148, - "width": 342, - "height": 13, - "text": "+DefaultPhoto", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr8UJShMJhDc=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnr8UJDhMGjKw=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 163, - "width": 342, - "height": 13, - "text": "+Name: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr9XUfRTl1tQ=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnr9XURxTioew=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 178, - "width": 342, - "height": 13, - "text": "+NickName: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr9YNlxTtV9w=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnr9YNXxTqmO4=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 193, - "width": 342, - "height": 13, - "text": "+Motto: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr9fdXxb8Rcw=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnr9fdLhb5Ct0=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 208, - "width": 342, - "height": 13, - "text": "+Group: UserGroup", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznKWaWXOR30=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "model": { - "$ref": "AAAAAAFnznKWLGXL/cI=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 223, - "width": 342, - "height": 13, - "text": "+Photo: Image", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 280, - "top": 113, - "width": 352, - "height": 128 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnr8Qm+xLaij0=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLTl68=" - }, - "model": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnznDaYWTD2PM=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+xLaij0=" - }, - "model": { - "$ref": "AAAAAAFnznDaKWTA3VQ=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 246, - "width": 342, - "height": 13, - "text": "+FromUserName(username: string)", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 280, - "top": 241, - "width": 352, - "height": 23 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnr8Qm+xLbuIo=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLTl68=" - }, - "model": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -56, - "top": -16, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnr8Qm+xLc5V8=", - "_parent": { - "$ref": "AAAAAAFnr8Qm+hLTl68=" - }, - "model": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -56, - "top": -16, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 280, - "top": 88, - "width": 352, - "height": 289, - "nameCompartment": { - "$ref": "AAAAAAFnr8Qm+xLU/SA=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnr8Qm+xLZ5IM=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnr8Qm+xLaij0=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnr8Qm+xLbuIo=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnr8Qm+xLc5V8=" - } - }, - { - "_type": "UMLEnumerationView", - "_id": "AAAAAAFnr9cV3xVaXcM=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnr9cV3xVbnkc=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnr9cV3xVcylc=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVbnkc=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 101, - "width": 199, - "height": 13, - "text": "«enumeration»" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnr9cV3xVd1M0=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVbnkc=" - }, - "font": "Arial;13;1", - "left": 21, - "top": 116, - "width": 199, - "height": 13, - "text": "UserGroup" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnr9cV3xVesYo=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVbnkc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1916, - "top": -426, - "width": 74.38818359375, - "height": 13, - "text": "(from server)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnr9cV3xVf65E=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVbnkc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -1916, - "top": -426, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 16, - "top": 96, - "width": 209, - "height": 38, - "stereotypeLabel": { - "$ref": "AAAAAAFnr9cV3xVcylc=" - }, - "nameLabel": { - "$ref": "AAAAAAFnr9cV3xVd1M0=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnr9cV3xVesYo=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnr9cV3xVf65E=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnr9cV3xVgrnE=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -728, - "top": -200, - "width": 10, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnr9cV3xVhAnA=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -728, - "top": -200, - "width": 10, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnr9cV3xVieQo=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -728, - "top": -200, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnr9cV3xVjyfU=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -728, - "top": -200, - "width": 10, - "height": 10 - }, - { - "_type": "UMLEnumerationLiteralCompartmentView", - "_id": "AAAAAAFnr9cV3xVk1s4=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "model": { - "$ref": "AAAAAAFnHF4MoqRKqMY=" - }, - "subViews": [ - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnr9cV3xVl4cY=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVk1s4=" - }, - "model": { - "$ref": "AAAAAAFnHF5YU6R71+g=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 139, - "width": 199, - "height": 13, - "text": "User", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnr9cV3xVmhHw=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVk1s4=" - }, - "model": { - "$ref": "AAAAAAFnHF5rxaSCsIQ=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 154, - "width": 199, - "height": 13, - "text": "Vip", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnr9cV3xVnAhU=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVk1s4=" - }, - "model": { - "$ref": "AAAAAAFnHF6LOaSJQiU=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 169, - "width": 199, - "height": 13, - "text": "Admin", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnr9cV3xVoM5I=", - "_parent": { - "$ref": "AAAAAAFnr9cV3xVk1s4=" - }, - "model": { - "$ref": "AAAAAAFnHGZJBa4BuKs=" - }, - "font": "Arial;13;0", - "left": 21, - "top": 184, - "width": 199, - "height": 13, - "text": "Group", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 16, - "top": 134, - "width": 209, - "height": 68 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 16, - "top": 96, - "width": 209, - "height": 137, - "nameCompartment": { - "$ref": "AAAAAAFnr9cV3xVbnkc=" - }, - "suppressAttributes": true, - "suppressOperations": true, - "attributeCompartment": { - "$ref": "AAAAAAFnr9cV3xVgrnE=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnr9cV3xVhAnA=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnr9cV3xVieQo=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnr9cV3xVjyfU=" - }, - "enumerationLiteralCompartment": { - "$ref": "AAAAAAFnr9cV3xVk1s4=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr9iUahctUCQ=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 96, - "width": 385, - "height": 25, - "text": "定义一个用户" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr9jMFRdh4P4=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 168, - "width": 385, - "height": 25, - "text": "Me,静态成员,当前登录用户的引用" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr9lAxxfKDj4=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 224, - "width": 385, - "height": 25, - "text": "Name,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr9qzBBi/nBI=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 248, - "width": 385, - "height": 25, - "text": "NickName,昵称" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr9r+NBjjGpM=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 272, - "width": 385, - "height": 25, - "text": "Motto,签名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr9suuxkH+o4=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 296, - "width": 385, - "height": 25, - "text": "Group,用户类型" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzm5t72LV5tM=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 144, - "width": 385, - "height": 25, - "text": "Users,静态成员,用户列表,仅内部使用" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznBcFWRo/5A=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 192, - "width": 385, - "height": 25, - "text": "DefaultPhoto,静态成员,默认头像" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznEbImUD70E=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 360, - "width": 420.11181640625, - "height": 25, - "text": "FromUserName(),匹配用户名,如果用户列表不存在则创建一个实例" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznLN22Yh25I=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 320, - "width": 385, - "height": 25, - "text": "Photo,用户头像" - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnznRHjGb9cVI=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "model": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnznRHjGb+dKU=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb9cVI=" - }, - "model": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnznRHjGb/Op8=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb+dKU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 16, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznRHjGcASxg=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb+dKU=" - }, - "font": "Arial;13;1", - "left": 285, - "top": 479, - "width": 343, - "height": 13, - "text": "UserInfo" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznRHjGcBpao=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb+dKU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 16, - "width": 81.62451171875, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznRHjGcCuiw=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb+dKU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 16, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 280, - "top": 472, - "width": 353, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnznRHjGb/Op8=" - }, - "nameLabel": { - "$ref": "AAAAAAFnznRHjGcASxg=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnznRHjGcBpao=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnznRHjGcCuiw=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnznRHjGcDGWw=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb9cVI=" - }, - "model": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznSV/2e0AW0=", - "_parent": { - "$ref": "AAAAAAFnznRHjGcDGWw=" - }, - "model": { - "$ref": "AAAAAAFnznSVvWeuc08=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 502, - "width": 343, - "height": 13, - "text": "+Password", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznSuEWfZbU4=", - "_parent": { - "$ref": "AAAAAAFnznRHjGcDGWw=" - }, - "model": { - "$ref": "AAAAAAFnznSt92fTpzo=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 517, - "width": 343, - "height": 13, - "text": "+NickName", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznS73mf1P2I=", - "_parent": { - "$ref": "AAAAAAFnznRHjGcDGWw=" - }, - "model": { - "$ref": "AAAAAAFnznS7xmfvl+8=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 532, - "width": 343, - "height": 13, - "text": "+Motto", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznTFO2gRtso=", - "_parent": { - "$ref": "AAAAAAFnznRHjGcDGWw=" - }, - "model": { - "$ref": "AAAAAAFnznTFImgLxZo=" - }, - "font": "Arial;13;0", - "left": 285, - "top": 547, - "width": 343, - "height": 13, - "text": "+Photo", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 280, - "top": 497, - "width": 353, - "height": 68 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnznRHjGcEufk=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb9cVI=" - }, - "model": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "font": "Arial;13;0", - "left": 280, - "top": 565, - "width": 353, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnznRHjWcFQ3U=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb9cVI=" - }, - "model": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 8, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnznRHjWcGRNw=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb9cVI=" - }, - "model": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 8, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 280, - "top": 472, - "width": 353, - "height": 160, - "nameCompartment": { - "$ref": "AAAAAAFnznRHjGb+dKU=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnznRHjGcDGWw=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnznRHjGcEufk=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnznRHjWcFQ3U=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnznRHjWcGRNw=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznT4wmiEsO4=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "font": "Arial;13;0", - "left": 704, - "top": 472, - "width": 345, - "height": 25, - "text": "修改用户信息结构,不修改的项赋null" - }, - { - "_type": "UMLAssociationView", - "_id": "AAAAAAFn1TBcahoFlmo=", - "_parent": { - "$ref": "AAAAAAFnr6FF9A/7VxI=" - }, - "model": { - "$ref": "AAAAAAFn1TBcaRoBYXc=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoG+m8=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcaRoBYXc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 255, - "top": 169, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoHd/k=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcaRoBYXc=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 258, - "top": 154, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoINOs=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcaRoBYXc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 248, - "top": 198, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoJ/9k=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoCC4w=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 253, - "top": 169, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoKllg=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoCC4w=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 258, - "top": 156, - "height": 13, - "alpha": 0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoL9Ls=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoCC4w=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 243, - "top": 195, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoMMMU=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoDot8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 256, - "top": 170, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoN8D8=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoDot8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 256, - "top": 156, - "height": 13, - "alpha": -0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFn1TBcahoOGmI=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoDot8=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 255, - "top": 197, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - } - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFn1TBcahoPxn4=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoCC4w=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 10, - "height": 10 - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFn1TBcahoQ/Do=", - "_parent": { - "$ref": "AAAAAAFn1TBcahoFlmo=" - }, - "model": { - "$ref": "AAAAAAFn1TBcahoDot8=" - }, - "visible": false, - "font": "Arial;13;0", - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnr8Qm+hLTl68=" - }, - "tail": { - "$ref": "AAAAAAFnr9cV3xVaXcM=" - }, - "lineStyle": 1, - "points": "225:185;279:196", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFn1TBcahoG+m8=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFn1TBcahoHd/k=" - }, - "propertyLabel": { - "$ref": "AAAAAAFn1TBcahoINOs=" - }, - "tailRoleNameLabel": { - "$ref": "AAAAAAFn1TBcahoJ/9k=" - }, - "tailPropertyLabel": { - "$ref": "AAAAAAFn1TBcahoKllg=" - }, - "tailMultiplicityLabel": { - "$ref": "AAAAAAFn1TBcahoL9Ls=" - }, - "headRoleNameLabel": { - "$ref": "AAAAAAFn1TBcahoMMMU=" - }, - "headPropertyLabel": { - "$ref": "AAAAAAFn1TBcahoN8D8=" - }, - "headMultiplicityLabel": { - "$ref": "AAAAAAFn1TBcahoOGmI=" - }, - "tailQualifiersCompartment": { - "$ref": "AAAAAAFn1TBcahoPxn4=" - }, - "headQualifiersCompartment": { - "$ref": "AAAAAAFn1TBcahoQ/Do=" - } - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFnr6LOHhAL49A=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "Message", - "ownedViews": [ - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsN0+ZIx9AKY=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 112, - "width": 417, - "height": 25, - "text": "定义一条用户消息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsN6XNIyJdDc=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 160, - "width": 417, - "height": 25, - "text": "When: DateTime,服务器接收消息的时间" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsN7xh4yPZag=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 184, - "width": 417, - "height": 25, - "text": "From,消息的发送者;" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsN9r04yV+4c=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 208, - "width": 417, - "height": 25, - "text": "Text,消息内容文本" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsOIT9I2VvQ8=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 368, - "width": 417, - "height": 25, - "text": "定义一个数据包,仅内部使用" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsOLhXI2bZ/o=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 416, - "width": 417, - "height": 25, - "text": "Head,消息包头,总是继承于BaseHead" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsON7vI2iu2A=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 440, - "width": 417, - "height": 25, - "text": "Data,二进制数据,可空" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsOSdSI23Pzg=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 464, - "width": 417, - "height": 25, - "text": "CallBack,数据包发送完成后的回调函数,可空。委托类型:" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsOUQwY29Dmo=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 664, - "top": 488, - "width": 393, - "height": 25, - "text": "Action,参数的Error成员为出错原因(无错为空)" - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnzmH7l2AqixU=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnzmH7l2Ar8dM=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AqixU=" - }, - "model": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnzmH7mGAsYNk=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2Ar8dM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 96, - "top": 32, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzmH7mGAtlyo=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2Ar8dM=" - }, - "font": "Arial;13;1", - "left": 253, - "top": 119, - "width": 335, - "height": 13, - "text": "Message" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzmH7mGAuaWw=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2Ar8dM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 96, - "top": 32, - "width": 81.62451171875, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzmH7mGAvufA=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2Ar8dM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 96, - "top": 32, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 248, - "top": 112, - "width": 345, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnzmH7mGAsYNk=" - }, - "nameLabel": { - "$ref": "AAAAAAFnzmH7mGAtlyo=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnzmH7mGAuaWw=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnzmH7mGAvufA=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnzmH7mGAwFa0=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AqixU=" - }, - "model": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzmKdkWBbVaE=", - "_parent": { - "$ref": "AAAAAAFnzmH7mGAwFa0=" - }, - "model": { - "$ref": "AAAAAAFnzmKdUWBYqP8=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 142, - "width": 335, - "height": 13, - "text": "+When", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzmKz5mBi9eg=", - "_parent": { - "$ref": "AAAAAAFnzmH7mGAwFa0=" - }, - "model": { - "$ref": "AAAAAAFnzmKzz2BfZl8=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 157, - "width": 335, - "height": 13, - "text": "+From: User", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzmLRaWBpLkU=", - "_parent": { - "$ref": "AAAAAAFnzmH7mGAwFa0=" - }, - "model": { - "$ref": "AAAAAAFnzmLRUWBm5P0=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 172, - "width": 335, - "height": 13, - "text": "+To: User", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzmLt32Bwbuo=", - "_parent": { - "$ref": "AAAAAAFnzmH7mGAwFa0=" - }, - "model": { - "$ref": "AAAAAAFnzmLtrmBtxXU=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 187, - "width": 335, - "height": 13, - "text": "+Text: string", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 248, - "top": 137, - "width": 345, - "height": 68 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnzmH7mGAxaks=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AqixU=" - }, - "model": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnzmPuZmB4WHA=", - "_parent": { - "$ref": "AAAAAAFnzmH7mGAxaks=" - }, - "model": { - "$ref": "AAAAAAFnzmPuNGB1v60=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 210, - "width": 335, - "height": 13, - "text": "+Message(text: string, receiver: User)", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 248, - "top": 205, - "width": 345, - "height": 23 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnzmH7mGAyMLk=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AqixU=" - }, - "model": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 48, - "top": 16, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnzmH7mGAzZGc=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AqixU=" - }, - "model": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 461.3310546875, - "top": 112, - "width": 130.6689453125, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 248, - "top": 112, - "width": 345, - "height": 161, - "nameCompartment": { - "$ref": "AAAAAAFnzmH7l2Ar8dM=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnzmH7mGAwFa0=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnzmH7mGAxaks=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnzmH7mGAyMLk=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnzmH7mGAzZGc=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzmRdWGCCq44=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 640, - "top": 248, - "width": 417, - "height": 25, - "text": "Message(),构造函数,新建一条己方消息" - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnzmVclmCMfog=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnzmVcl2CNzPc=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCMfog=" - }, - "model": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnzmVcl2COBjY=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CNzPc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -16, - "top": -112, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzmVcl2CPG9o=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CNzPc=" - }, - "font": "Arial;13;1", - "left": 253, - "top": 375, - "width": 335, - "height": 13, - "text": "Packet" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzmVcl2CQ8aw=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CNzPc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -16, - "top": -112, - "width": 81.62451171875, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzmVcl2CRrls=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CNzPc=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -16, - "top": -112, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 248, - "top": 368, - "width": 345, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnzmVcl2COBjY=" - }, - "nameLabel": { - "$ref": "AAAAAAFnzmVcl2CPG9o=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnzmVcl2CQ8aw=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnzmVcl2CRrls=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnzmVcl2CS+9A=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCMfog=" - }, - "model": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzmX4nGC9bhU=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CS+9A=" - }, - "model": { - "$ref": "AAAAAAFnzmX4W2C6Upg=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 398, - "width": 335, - "height": 13, - "text": "+Head: BaseHead", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzma0v2DHBZ0=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CS+9A=" - }, - "model": { - "$ref": "AAAAAAFnzma0jmDE/dY=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 413, - "width": 335, - "height": 13, - "text": "+Data: bytes", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzmb9rmDQsak=", - "_parent": { - "$ref": "AAAAAAFnzmVcl2CS+9A=" - }, - "model": { - "$ref": "AAAAAAFnzmb9fmDNRmg=" - }, - "font": "Arial;13;0", - "left": 253, - "top": 428, - "width": 335, - "height": 13, - "text": "+Callback", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 248, - "top": 393, - "width": 345, - "height": 53 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnzmVcl2CTmxs=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCMfog=" - }, - "model": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "font": "Arial;13;0", - "left": 248, - "top": 446, - "width": 345, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnzmVcl2CU0EA=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCMfog=" - }, - "model": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -8, - "top": -56, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnzmVcl2CVins=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCMfog=" - }, - "model": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -8, - "top": -56, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 248, - "top": 368, - "width": 345, - "height": 153, - "nameCompartment": { - "$ref": "AAAAAAFnzmVcl2CNzPc=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnzmVcl2CS+9A=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnzmVcl2CTmxs=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnzmVcl2CU0EA=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnzmVcl2CVins=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnznY50mstYOQ=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnznY50msuTSM=", - "_parent": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "model": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50msv+ec=", - "_parent": { - "$ref": "AAAAAAFnznY50msuTSM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -140, - "top": -48, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mswNMc=", - "_parent": { - "$ref": "AAAAAAFnznY50msuTSM=" - }, - "font": "Arial;13;1", - "left": 289, - "top": 615, - "width": 342, - "height": 13, - "text": "BaseHead" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50msxzv4=", - "_parent": { - "$ref": "AAAAAAFnznY50msuTSM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -140, - "top": -48, - "width": 86.67724609375, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50msyjWU=", - "_parent": { - "$ref": "AAAAAAFnznY50msuTSM=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -140, - "top": -48, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 284, - "top": 608, - "width": 352, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnznY50msv+ec=" - }, - "nameLabel": { - "$ref": "AAAAAAFnznY50mswNMc=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnznY50msxzv4=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnznY50msyjWU=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnznY50mszmpM=", - "_parent": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "model": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznY50ms0W50=", - "_parent": { - "$ref": "AAAAAAFnznY50mszmpM=" - }, - "model": { - "$ref": "AAAAAAFnsOwFTY5BrAg=" - }, - "font": "Arial;13;0", - "left": 289, - "top": 638, - "width": 342, - "height": 13, - "text": "+Token: string", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznY50ms1PJY=", - "_parent": { - "$ref": "AAAAAAFnznY50mszmpM=" - }, - "model": { - "$ref": "AAAAAAFnsOyo5I5JH1Y=" - }, - "font": "Arial;13;0", - "left": 289, - "top": 653, - "width": 342, - "height": 13, - "text": "+Operation: string", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 284, - "top": 633, - "width": 352, - "height": 38 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnznY50ms2FlQ=", - "_parent": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "model": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "font": "Arial;13;0", - "left": 284, - "top": 671, - "width": 352, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnznY50ms3eqc=", - "_parent": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "model": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -68, - "top": 520, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnznY50ms412I=", - "_parent": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "model": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -68, - "top": 520, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 284, - "top": 608, - "width": 352, - "height": 192, - "nameCompartment": { - "$ref": "AAAAAAFnznY50msuTSM=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnznY50mszmpM=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnznY50ms2FlQ=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnznY50ms3eqc=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnznY50ms412I=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznY50ms5cX0=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 668, - "top": 608, - "width": 385, - "height": 25, - "text": "定义基本的包头结构" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznY50ms6SQU=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 668, - "top": 656, - "width": 385, - "height": 25, - "text": "Token,数据请求方生成的随机ID,可据此识别返回数据包" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznY50ms7z+Q=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 668, - "top": 680, - "width": 385, - "height": 25, - "text": "Operation,相应请求要执行的操作" - }, - { - "_type": "UMLEnumerationView", - "_id": "AAAAAAFnznY50ms8guo=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnznY50ms9fAY=", - "_parent": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50ms+y0k=", - "_parent": { - "$ref": "AAAAAAFnznY50ms9fAY=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 613, - "width": 183, - "height": 13, - "text": "«enumeration»" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50ms/Q6U=", - "_parent": { - "$ref": "AAAAAAFnznY50ms9fAY=" - }, - "font": "Arial;13;1", - "left": 17, - "top": 628, - "width": 183, - "height": 13, - "text": "Operations" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mtArYU=", - "_parent": { - "$ref": "AAAAAAFnznY50ms9fAY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -68, - "top": -291, - "width": 88.1181640625, - "height": 13, - "text": "(from common)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mtB8WA=", - "_parent": { - "$ref": "AAAAAAFnznY50ms9fAY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -68, - "top": -291, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 12, - "top": 608, - "width": 193, - "height": 38, - "stereotypeLabel": { - "$ref": "AAAAAAFnznY50ms+y0k=" - }, - "nameLabel": { - "$ref": "AAAAAAFnznY50ms/Q6U=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnznY50mtArYU=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnznY50mtB8WA=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnznY50mtC+gw=", - "_parent": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 20, - "top": 232, - "width": 10, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnznY50mtD9Gw=", - "_parent": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 20, - "top": 232, - "width": 10, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnznY50mtE1tg=", - "_parent": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 20, - "top": 232, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnznY50mtFEdk=", - "_parent": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 20, - "top": 232, - "width": 10, - "height": 10 - }, - { - "_type": "UMLEnumerationLiteralCompartmentView", - "_id": "AAAAAAFnznY50mtG9+M=", - "_parent": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "model": { - "$ref": "AAAAAAFnCGJSWbaTRcY=" - }, - "subViews": [ - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtHW8k=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnCPW0mFmm2/k=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 651, - "width": 183, - "height": 13, - "text": "Panic", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtIQiM=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnCGRXMLy4Bb0=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 666, - "width": 183, - "height": 13, - "text": "TransMessage", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtJ7Jk=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnCL6HzOw5F3o=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 681, - "width": 183, - "height": 13, - "text": "SendMessage", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtKF9Q=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnvAowIdZ1zwM=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 696, - "width": 183, - "height": 13, - "text": "Login2", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtLb/U=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnCGSpgr0r+FQ=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 711, - "width": 183, - "height": 13, - "text": "Login", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtMidQ=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnDdBFTdOpQvw=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 726, - "width": 183, - "height": 13, - "text": "Logout", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtN67k=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnD9vlbKk7PfU=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 741, - "width": 183, - "height": 13, - "text": "Offline", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtO5m8=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnCGlD8scMQVU=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 756, - "width": 183, - "height": 13, - "text": "GetUserList", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtPItY=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnHPTor7+hW/0=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 771, - "width": 183, - "height": 13, - "text": "UpdateUserInfo", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtQ0zA=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnvBqg/9o2cxE=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 786, - "width": 183, - "height": 13, - "text": "GetUsers", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnznY50mtRYXg=", - "_parent": { - "$ref": "AAAAAAFnznY50mtG9+M=" - }, - "model": { - "$ref": "AAAAAAFnDNSmdc7FPgA=" - }, - "font": "Arial;13;0", - "left": 17, - "top": 801, - "width": 183, - "height": 13, - "text": "Ping", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 12, - "top": 646, - "width": 193, - "height": 173 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 12, - "top": 608, - "width": 193, - "height": 225, - "nameCompartment": { - "$ref": "AAAAAAFnznY50ms9fAY=" - }, - "suppressAttributes": true, - "suppressOperations": true, - "attributeCompartment": { - "$ref": "AAAAAAFnznY50mtC+gw=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnznY50mtD9Gw=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnznY50mtE1tg=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnznY50mtFEdk=" - }, - "enumerationLiteralCompartment": { - "$ref": "AAAAAAFnznY50mtG9+M=" - } - }, - { - "_type": "UMLAssociationView", - "_id": "AAAAAAFnznY50mtSJQk=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNdKCE=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtTgL8=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNdKCE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 244, - "top": 721, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtU3Jk=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNdKCE=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 245, - "top": 736, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtVpe8=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNdKCE=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 243, - "top": 692, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtW4lk=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNeAIo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 257, - "top": 721, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtXo4M=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNeAIo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 255, - "top": 735, - "height": 13, - "alpha": 0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtYgW4=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNeAIo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 260, - "top": 694, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "edgePosition": 2 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtZcX4=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMvpNfy8Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 231, - "top": 722, - "height": 13, - "alpha": -0.5235987755982988, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtadjo=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMvpNfy8Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 234, - "top": 736, - "height": 13, - "alpha": -0.7853981633974483, - "distance": 40, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - } - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtbC/w=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMvpNfy8Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 226, - "top": 695, - "height": 13, - "alpha": 0.5235987755982988, - "distance": 25, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtSJQk=" - } - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnznY50mtcmDM=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMupNeAIo=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -12, - "top": 520, - "width": 10, - "height": 10 - }, - { - "_type": "UMLQualifierCompartmentView", - "_id": "AAAAAAFnznY50mtdsNc=", - "_parent": { - "$ref": "AAAAAAFnznY50mtSJQk=" - }, - "model": { - "$ref": "AAAAAAFnsPMMvpNfy8Q=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -12, - "top": 520, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnznY50ms8guo=" - }, - "tail": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "lineStyle": 1, - "points": "283:712;205:715", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnznY50mtTgL8=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnznY50mtU3Jk=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnznY50mtVpe8=" - }, - "tailRoleNameLabel": { - "$ref": "AAAAAAFnznY50mtW4lk=" - }, - "tailPropertyLabel": { - "$ref": "AAAAAAFnznY50mtXo4M=" - }, - "tailMultiplicityLabel": { - "$ref": "AAAAAAFnznY50mtYgW4=" - }, - "headRoleNameLabel": { - "$ref": "AAAAAAFnznY50mtZcX4=" - }, - "headPropertyLabel": { - "$ref": "AAAAAAFnznY50mtadjo=" - }, - "headMultiplicityLabel": { - "$ref": "AAAAAAFnznY50mtbC/w=" - }, - "tailQualifiersCompartment": { - "$ref": "AAAAAAFnznY50mtcmDM=" - }, - "headQualifiersCompartment": { - "$ref": "AAAAAAFnznY50mtdsNc=" - } - }, - { - "_type": "UMLClassView", - "_id": "AAAAAAFnznY50mteIqQ=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnznY50mtfrFI=", - "_parent": { - "$ref": "AAAAAAFnznY50mteIqQ=" - }, - "model": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mtg1TA=", - "_parent": { - "$ref": "AAAAAAFnznY50mtfrFI=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -28, - "top": -144, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mthY/o=", - "_parent": { - "$ref": "AAAAAAFnznY50mtfrFI=" - }, - "font": "Arial;13;1", - "left": 289, - "top": 855, - "width": 342, - "height": 13, - "text": "ResultHead" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mti0xo=", - "_parent": { - "$ref": "AAAAAAFnznY50mtfrFI=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -28, - "top": -144, - "width": 86.67724609375, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnznY50mtj1NA=", - "_parent": { - "$ref": "AAAAAAFnznY50mtfrFI=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -28, - "top": -144, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 284, - "top": 848, - "width": 352, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnznY50mtg1TA=" - }, - "nameLabel": { - "$ref": "AAAAAAFnznY50mthY/o=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnznY50mti0xo=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnznY50mtj1NA=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnznY50mtkYHc=", - "_parent": { - "$ref": "AAAAAAFnznY50mteIqQ=" - }, - "model": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnznY50mtl9uU=", - "_parent": { - "$ref": "AAAAAAFnznY50mtkYHc=" - }, - "model": { - "$ref": "AAAAAAFnsPQ4WpT62vE=" - }, - "font": "Arial;13;0", - "left": 289, - "top": 878, - "width": 342, - "height": 13, - "text": "+Error: string", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 284, - "top": 873, - "width": 352, - "height": 23 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnznY50mtmg4k=", - "_parent": { - "$ref": "AAAAAAFnznY50mteIqQ=" - }, - "model": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "font": "Arial;13;0", - "left": 284, - "top": 896, - "width": 352, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnznY50mtnz1Q=", - "_parent": { - "$ref": "AAAAAAFnznY50mteIqQ=" - }, - "model": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -12, - "top": 472, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnznY50mtoVW0=", - "_parent": { - "$ref": "AAAAAAFnznY50mteIqQ=" - }, - "model": { - "$ref": "AAAAAAFnsPO66JPy0oQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -12, - "top": 472, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 284, - "top": 848, - "width": 352, - "height": 152, - "nameCompartment": { - "$ref": "AAAAAAFnznY50mtfrFI=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnznY50mtkYHc=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnznY50mtmg4k=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnznY50mtnz1Q=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnznY50mtoVW0=" - } - }, - { - "_type": "UMLGeneralizationView", - "_id": "AAAAAAFnznY50mtpZXU=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "model": { - "$ref": "AAAAAAFnsPQSvJSAhyQ=" - }, - "subViews": [ - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtq6Go=", - "_parent": { - "$ref": "AAAAAAFnznY50mtpZXU=" - }, - "model": { - "$ref": "AAAAAAFnsPQSvJSAhyQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 444, - "top": 816, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtpZXU=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtrTiw=", - "_parent": { - "$ref": "AAAAAAFnznY50mtpZXU=" - }, - "model": { - "$ref": "AAAAAAFnsPQSvJSAhyQ=" - }, - "visible": null, - "font": "Arial;13;0", - "left": 429, - "top": 816, - "height": 13, - "alpha": 1.5707963267948966, - "distance": 30, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtpZXU=" - }, - "edgePosition": 1 - }, - { - "_type": "EdgeLabelView", - "_id": "AAAAAAFnznY50mtsUU8=", - "_parent": { - "$ref": "AAAAAAFnznY50mtpZXU=" - }, - "model": { - "$ref": "AAAAAAFnsPQSvJSAhyQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": 473, - "top": 817, - "height": 13, - "alpha": -1.5707963267948966, - "distance": 15, - "hostEdge": { - "$ref": "AAAAAAFnznY50mtpZXU=" - }, - "edgePosition": 1 - } - ], - "font": "Arial;13;0", - "head": { - "$ref": "AAAAAAFnznY50mstYOQ=" - }, - "tail": { - "$ref": "AAAAAAFnznY50mteIqQ=" - }, - "lineStyle": 1, - "points": "459:847;459:800", - "showVisibility": true, - "nameLabel": { - "$ref": "AAAAAAFnznY50mtq6Go=" - }, - "stereotypeLabel": { - "$ref": "AAAAAAFnznY50mtrTiw=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnznY50mtsUU8=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznY50mttLNo=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 668, - "top": 848, - "width": 385, - "height": 25, - "text": "返回数据基本包头" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnznY50mtutT8=", - "_parent": { - "$ref": "AAAAAAFnr6LOHhAL49A=" - }, - "font": "Arial;13;0", - "left": 668, - "top": 896, - "width": 385, - "height": 25, - "text": "Error,错误文本,如果操作成功为空" - } - ] - }, - { - "_type": "UMLClassDiagram", - "_id": "AAAAAAFnp7RjNPVeQwI=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "Client", - "ownedViews": [ - { - "_type": "UMLClassView", - "_id": "AAAAAAFnp7WMX/V0AOs=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "model": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnp7WMX/V1gtQ=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V0AOs=" - }, - "model": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnp7WMX/V20gA=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V1gtQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -720, - "top": -1232, - "height": 13 - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnp7WMX/V3zv4=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V1gtQ=" - }, - "font": "Arial;13;1", - "left": 61, - "top": 71, - "width": 375, - "height": 13, - "text": "StormClient" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnp7WMX/V4T8M=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V1gtQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -720, - "top": -1232, - "width": 86.67724609375, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnp7WMX/V5vG0=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V1gtQ=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -720, - "top": -1232, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 56, - "top": 64, - "width": 385, - "height": 25, - "stereotypeLabel": { - "$ref": "AAAAAAFnp7WMX/V20gA=" - }, - "nameLabel": { - "$ref": "AAAAAAFnp7WMX/V3zv4=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnp7WMX/V4T8M=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnp7WMX/V5vG0=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnp7WMX/V6Ofo=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V0AOs=" - }, - "model": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "subViews": [ - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr7CKYRB6XZ0=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnr7CKIxB3kro=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 94, - "width": 375, - "height": 13, - "text": "+event OnDisconnect", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnscqUl3qAYzo=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnscqUXXp9khQ=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 109, - "width": 375, - "height": 13, - "text": "+event OnPanic", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnscrsG3qIGBA=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnscrsBHqFWxc=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 124, - "width": 375, - "height": 13, - "text": "+event OnOffline", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnscsMmHqP/KU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnscsMgHqMhpc=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 139, - "width": 375, - "height": 13, - "text": "+event OnMessage", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnscsi03qW9+s=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnscsivnqT/q0=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 154, - "width": 375, - "height": 13, - "text": "+event OnSendMessageDone", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnsctORXqdPCM=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnsctOLXqaI5Q=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 169, - "width": 375, - "height": 13, - "text": "+event OnUpdateUserInfoDone", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr7EXehCBktU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnr7EXRBB+XvI=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 184, - "width": 375, - "height": 13, - "text": "+event OnLoginDone", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnscttTXqk/vU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnscttN3qhUIQ=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 199, - "width": 375, - "height": 13, - "text": "+event OnGetUserListDone", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnsgar4HyGns8=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnsgarpnyDHjs=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 214, - "width": 375, - "height": 13, - "text": "+DoesSendMessageReturn: bool", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzkx74ByWSpI=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnzkx7pByTqx8=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 229, - "width": 375, - "height": 13, - "text": "+Status: ClientStatus", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr7MFzRCm3OA=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnr7MFkRCjl/U=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 244, - "width": 375, - "height": 13, - "text": "-tcpClient", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr7NYTRCuNGE=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnr7NYIhCrWDg=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 259, - "width": 375, - "height": 13, - "text": "-sendQueue", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr7OQWBC1yQU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnr7OQQRCyG4Q=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 274, - "width": 375, - "height": 13, - "text": "-readLoopThread", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnr7PGaxC8UAg=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnr7PGUxC5YyU=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 289, - "width": 375, - "height": 13, - "text": "-sendLoopThread", - "horizontalAlignment": 0 - }, - { - "_type": "UMLAttributeView", - "_id": "AAAAAAFnzkYE8BxrEEE=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "model": { - "$ref": "AAAAAAFnzkYEqBxoDdg=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 304, - "width": 375, - "height": 13, - "text": "+workingDictionary", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 56, - "top": 89, - "width": 385, - "height": 233 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnp7WMX/V7vnU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V0AOs=" - }, - "model": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "subViews": [ - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnp768ZPXgGAs=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnp768IvXdZko=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 327, - "width": 375, - "height": 13, - "text": "+Initialize()", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnp8DSu/Xqv4Y=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnp8DShvXnMlE=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 342, - "width": 375, - "height": 13, - "text": "+QueueLogin(user: string, password: string, callback)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnsgqsdXzumlU=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnsgqsQHzr9t0=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 357, - "width": 375, - "height": 13, - "text": "+QueueSendMessage(Message message, callback = null)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnsgsDpXz7aWk=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnsgsDdnz4B8w=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 372, - "width": 375, - "height": 13, - "text": "+QueueLogout(callback = null)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnsgtHmH0EZds=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnsgtHZX0BC2k=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 387, - "width": 375, - "height": 13, - "text": "+QueueGetUserList(callback = null)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnsguTCH0N+eE=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnsguS1X0KYI8=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 402, - "width": 375, - "height": 13, - "text": "+QueueUpdateUserInfo(callback = null)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnr76dOREXvjQ=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnr76c/BEU+cs=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 417, - "width": 375, - "height": 13, - "text": "-HandleAll(head, data)", - "horizontalAlignment": 0 - }, - { - "_type": "UMLOperationView", - "_id": "AAAAAAFnp8vRtvYSX+I=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "model": { - "$ref": "AAAAAAFnp8vRhPYPjkU=" - }, - "font": "Arial;13;0", - "left": 61, - "top": 432, - "width": 375, - "height": 13, - "text": "-Send(head, data)", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 56, - "top": 322, - "width": 385, - "height": 128 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnp7WMYPV8x54=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V0AOs=" - }, - "model": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -368, - "top": -616, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnp7WMYPV9V1s=", - "_parent": { - "$ref": "AAAAAAFnp7WMX/V0AOs=" - }, - "model": { - "$ref": "AAAAAAFnp7WMX/VycEU=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -368, - "top": -616, - "width": 10, - "height": 10 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 56, - "top": 64, - "width": 385, - "height": 865, - "nameCompartment": { - "$ref": "AAAAAAFnp7WMX/V1gtQ=" - }, - "attributeCompartment": { - "$ref": "AAAAAAFnp7WMX/V6Ofo=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnp7WMX/V7vnU=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnp7WMYPV8x54=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnp7WMYPV9V1s=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnp7ZHEfWlEF8=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 64, - "width": 585, - "height": 25, - "text": "静态类,负责与服务器的数据交换" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnp73i+PXBgxE=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 520, - "width": 585, - "height": 25, - "text": "Initialize(),连接到服务器,初始化读写线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnp74wSfXQvNg=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 544, - "width": 585, - "height": 25, - "text": "QueuetLogin(),异步发起登录请求" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnp8pPovX388s=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 640, - "width": 561, - "height": 25, - "text": "@param callback = null,请求发送回调函数,处理结果回调请设置OnLoginDone事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnp8pR0fX70iw=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 616, - "width": 561, - "height": 25, - "text": "@param password,密码" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnp8pSsfX/dd8=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 592, - "width": 561, - "height": 25, - "text": "@param user,用户名" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr6+BmBBx4yU=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 840, - "width": 585, - "height": 25, - "text": "Send(),将数据添加到发送队列等待写数据线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7Fl+RCSAX0=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 112, - "width": 585, - "height": 25, - "text": "OnDisconnect,连接中断事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7Il+RCe41c=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 256, - "width": 585, - "height": 25, - "text": "OnLoginDone,登录结果到达事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7RZChDPLi4=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 360, - "width": 585, - "height": 25, - "text": "tcpClient,用于通信的TCP连接" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7Tt2BDV274=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 384, - "width": 585, - "height": 25, - "text": "sendQueue,数据包发送队列,C#使用BlockCollection实现" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7WpehDbtA8=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 408, - "width": 585, - "height": 25, - "text": " readLoopThread,读数据线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7YjChDhPzU=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 432, - "width": 585, - "height": 25, - "text": " sendLoopThread,写数据线程" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7bEkxDrFhI=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 568, - "width": 561, - "height": 25, - "text": "@return : bool,成功将请求加入发送队列返回true,否则返回false" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7i2nRDyl5k=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 864, - "width": 561, - "height": 25, - "text": "@return : bool,成功将请求加入发送队列返回true,否则返回false" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7jWPhD3j5s=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 888, - "width": 561, - "height": 25, - "text": "@param head : JObject,包头,至少包含Token和Operation信息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7my+BD9DV8=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 912, - "width": 561, - "height": 25, - "text": "@param data : byte[],数据,二进制数据,可为空" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr78XhBEiZUY=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 768, - "width": 585, - "height": 25, - "text": "HandleAll(),处理接收到的数据,调用对应的事件处理" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7/QtBEx4wU=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 816, - "width": 561, - "height": 25, - "text": "@param data : byte[],数据,二进制数据,可为空" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnr7/tURE2sQw=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 488, - "top": 792, - "width": 561, - "height": 25, - "text": "@param head : byte[],包头,二进制数据" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsc7tJns2Izs=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 136, - "width": 585, - "height": 25, - "text": "OnPanic,服务器异常消息处理事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsgVjgXxtBxU=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 160, - "width": 585, - "height": 25, - "text": "OnOffline,服务器强制注销登陆事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsgW4UXx1j2o=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 184, - "width": 585, - "height": 25, - "text": "OnMessage,消息到达事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsgYBjHx85SY=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 208, - "width": 585, - "height": 25, - "text": "OnSendMessageDone,发送消息处理完成反馈事件(DoesSendMessageReturn为true时有效)" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsgcB3HyREIY=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 312, - "width": 585, - "height": 25, - "text": "DoesSendMessageReturn = false,发送消息时是否要求服务器返回处理结果" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsgecHHyaHm4=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 232, - "width": 585, - "height": 25, - "text": "OnUpdateUserInfoDone,更新用户信息结果处理事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsghvp3yvdMs=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 280, - "width": 585, - "height": 25, - "text": "OnGetUserListDone,获取用户列表结果处理事件" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsg3eZn0zvh8=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 664, - "width": 585, - "height": 25, - "text": "QueueSendMessage(),请求发送一条消息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnsg8C7X1EQqQ=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 688, - "width": 585, - "height": 25, - "text": "QueueLogout(),请求登出" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnshBq931LDmc=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 712, - "width": 585, - "height": 25, - "text": "QueueGetUserList(),请求用户列表" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnshDeS31SmAI=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 736, - "width": 585, - "height": 25, - "text": "QueueUpdateUserInfo(),请求更新当前登录用户信息" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzkaWfhx5gHw=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 456, - "width": 585, - "height": 51, - "text": "workingDictonary : Dictionary,工作暂存区,从服务器接收多个包的数据,接收完成再触发相应事件。如接收用户列表。 key为对应请求的Token" - }, - { - "_type": "UMLEnumerationView", - "_id": "AAAAAAFnzkz+Txyhr0A=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "subViews": [ - { - "_type": "UMLNameCompartmentView", - "_id": "AAAAAAFnzkz+Txyimqk=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyhr0A=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "subViews": [ - { - "_type": "LabelView", - "_id": "AAAAAAFnzkz+TxyjZS8=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyimqk=" - }, - "font": "Arial;13;0", - "left": 141, - "top": 1053, - "width": 295, - "height": 13, - "text": "«enumeration»" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzkz+Txykv2Q=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyimqk=" - }, - "font": "Arial;13;1", - "left": 141, - "top": 1068, - "width": 295, - "height": 13, - "text": "ClientStatus" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzkz+Txyljb0=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyimqk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -608, - "top": -144, - "width": 86.67724609375, - "height": 13, - "text": "(from Interact)" - }, - { - "_type": "LabelView", - "_id": "AAAAAAFnzkz+TxymYFw=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyimqk=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -608, - "top": -144, - "height": 13, - "horizontalAlignment": 1 - } - ], - "font": "Arial;13;0", - "left": 136, - "top": 1048, - "width": 305, - "height": 38, - "stereotypeLabel": { - "$ref": "AAAAAAFnzkz+TxyjZS8=" - }, - "nameLabel": { - "$ref": "AAAAAAFnzkz+Txykv2Q=" - }, - "namespaceLabel": { - "$ref": "AAAAAAFnzkz+Txyljb0=" - }, - "propertyLabel": { - "$ref": "AAAAAAFnzkz+TxymYFw=" - } - }, - { - "_type": "UMLAttributeCompartmentView", - "_id": "AAAAAAFnzkz+Txyn7ec=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyhr0A=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -304, - "top": -72, - "width": 10, - "height": 10 - }, - { - "_type": "UMLOperationCompartmentView", - "_id": "AAAAAAFnzkz+UByo1FQ=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyhr0A=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -304, - "top": -72, - "width": 10, - "height": 10 - }, - { - "_type": "UMLReceptionCompartmentView", - "_id": "AAAAAAFnzkz+UByp0os=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyhr0A=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -304, - "top": -72, - "width": 10, - "height": 10 - }, - { - "_type": "UMLTemplateParameterCompartmentView", - "_id": "AAAAAAFnzkz+UByq4cw=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyhr0A=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "visible": false, - "font": "Arial;13;0", - "left": -304, - "top": -72, - "width": 10, - "height": 10 - }, - { - "_type": "UMLEnumerationLiteralCompartmentView", - "_id": "AAAAAAFnzkz+UByrsEc=", - "_parent": { - "$ref": "AAAAAAFnzkz+Txyhr0A=" - }, - "model": { - "$ref": "AAAAAAFnzkz+TxyfrCs=" - }, - "subViews": [ - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnzk1CixzRXoA=", - "_parent": { - "$ref": "AAAAAAFnzkz+UByrsEc=" - }, - "model": { - "$ref": "AAAAAAFnzk1CRRzON0w=" - }, - "font": "Arial;13;0", - "left": 141, - "top": 1091, - "width": 295, - "height": 13, - "text": "Uninitialized", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnzk10xxzYb14=", - "_parent": { - "$ref": "AAAAAAFnzkz+UByrsEc=" - }, - "model": { - "$ref": "AAAAAAFnzk10khzVNiA=" - }, - "font": "Arial;13;0", - "left": 141, - "top": 1106, - "width": 295, - "height": 13, - "text": "Running", - "horizontalAlignment": 0 - }, - { - "_type": "UMLEnumerationLiteralView", - "_id": "AAAAAAFnzk2CehzfVdY=", - "_parent": { - "$ref": "AAAAAAFnzkz+UByrsEc=" - }, - "model": { - "$ref": "AAAAAAFnzk2CXBzc3Fw=" - }, - "font": "Arial;13;0", - "left": 141, - "top": 1121, - "width": 295, - "height": 13, - "text": "Stopped", - "horizontalAlignment": 0 - } - ], - "font": "Arial;13;0", - "left": 136, - "top": 1086, - "width": 305, - "height": 53 - } - ], - "font": "Arial;13;0", - "containerChangeable": true, - "left": 136, - "top": 1048, - "width": 305, - "height": 113, - "nameCompartment": { - "$ref": "AAAAAAFnzkz+Txyimqk=" - }, - "suppressAttributes": true, - "suppressOperations": true, - "attributeCompartment": { - "$ref": "AAAAAAFnzkz+Txyn7ec=" - }, - "operationCompartment": { - "$ref": "AAAAAAFnzkz+UByo1FQ=" - }, - "receptionCompartment": { - "$ref": "AAAAAAFnzkz+UByp0os=" - }, - "templateParameterCompartment": { - "$ref": "AAAAAAFnzkz+UByq4cw=" - }, - "enumerationLiteralCompartment": { - "$ref": "AAAAAAFnzkz+UByrsEc=" - } - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzk3nmxznoB4=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 1048, - "width": 585, - "height": 25, - "text": "客户端连接状态" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzk5JbBzwxH8=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 1088, - "width": 585, - "height": 25, - "text": "Uninitialized,最初态,未初始化" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzk6gsBz2wBM=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 1112, - "width": 585, - "height": 25, - "text": "Running,正在工作" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzk7U9hz9luo=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 1136, - "width": 585, - "height": 25, - "text": "Stopped,连接已断开,读写线程停止工作" - }, - { - "_type": "UMLNoteView", - "_id": "AAAAAAFnzk/PHh0JAqk=", - "_parent": { - "$ref": "AAAAAAFnp7RjNPVeQwI=" - }, - "font": "Arial;13;0", - "left": 464, - "top": 336, - "width": 585, - "height": 25, - "text": "Status,客户端连接状态,线程安全,可据此判断当前连接是否可用" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnzmH7l2AoT9U=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "Message", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmKdUWBYqP8=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "name": "When", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmKzz2BfZl8=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "name": "From", - "type": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmLRUWBm5P0=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "name": "To", - "type": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmLtrmBtxXU=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "name": "Text", - "type": "string" - } - ], - "operations": [ - { - "_type": "UMLOperation", - "_id": "AAAAAAFnzmPuNGB1v60=", - "_parent": { - "$ref": "AAAAAAFnzmH7l2AoT9U=" - }, - "name": "Message", - "parameters": [ - { - "_type": "UMLParameter", - "_id": "AAAAAAFnzmQ712B8eDM=", - "_parent": { - "$ref": "AAAAAAFnzmPuNGB1v60=" - }, - "name": "text", - "type": "string" - }, - { - "_type": "UMLParameter", - "_id": "AAAAAAFnzmQ712B983c=", - "_parent": { - "$ref": "AAAAAAFnzmPuNGB1v60=" - }, - "name": "receiver", - "type": { - "$ref": "AAAAAAFnr8Qm+hLRI9k=" - } - } - ] - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnzmVclmCKA/I=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "Packet", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmX4W2C6Upg=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "name": "Head", - "type": { - "$ref": "AAAAAAFnsOuL+43sqcU=" - } - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzma0jmDE/dY=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "name": "Data", - "type": "bytes" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnzmb9fmDNRmg=", - "_parent": { - "$ref": "AAAAAAFnzmVclmCKA/I=" - }, - "name": "Callback", - "type": "" - } - ] - }, - { - "_type": "UMLClass", - "_id": "AAAAAAFnznRHjGb7FmQ=", - "_parent": { - "$ref": "AAAAAAFnp7Q36fVR840=" - }, - "name": "UserInfo", - "attributes": [ - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnznSVvWeuc08=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "name": "Password", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnznSt92fTpzo=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "name": "NickName", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnznS7xmfvl+8=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "name": "Motto", - "type": "" - }, - { - "_type": "UMLAttribute", - "_id": "AAAAAAFnznTFImgLxZo=", - "_parent": { - "$ref": "AAAAAAFnznRHjGb7FmQ=" - }, - "name": "Photo", - "type": "" - } - ] - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/design/stormchat.zip b/design/stormchat.zip new file mode 100644 index 0000000..a851ce7 Binary files /dev/null and b/design/stormchat.zip differ diff --git a/stormchat-client-csharp/Interact/AttrNames.cs b/stormchat-client-csharp/Interact/AttrNames.cs new file mode 100644 index 0000000..0c7e985 --- /dev/null +++ b/stormchat-client-csharp/Interact/AttrNames.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Interact +{ + //Json数据的字段访问字符串 + public static class AttrNames + { + //基本信息 + public const string Token = "Token"; + public const string Operation = "Operation"; + + //处理结果信息 + public const string Error = "Error"; + + //获取用户信息 + public const string User = "User"; + public const string NickName = "NickName"; + public const string Motto = "Motto"; + public const string UGroup = "UGroup"; + public const string Photo = "Photo"; + public const string Total = "Total"; + public const string Count = "Count"; + + //消息 + public const string When = "When"; + public const string From = "From"; + public const string To = "To"; + } +} diff --git a/stormchat-client-csharp/Interact/Client-Fields.cs b/stormchat-client-csharp/Interact/Client-Fields.cs new file mode 100644 index 0000000..e3aaaf5 --- /dev/null +++ b/stormchat-client-csharp/Interact/Client-Fields.cs @@ -0,0 +1,37 @@ +using System; +using System.Net.Sockets; +using System.Collections.Concurrent; +using System.Threading; +using System.Collections.Generic; + +//定义StormClient私有字段 + +namespace Interact +{ + public partial class StormClient + { + //TCP客户端 + private static TcpClient tcpClient; + //消息发送队列 + private static BlockingCollection sendQueue; + //数据读取线程 + private static Thread readLoopThread; + //数据发送线程 + private static Thread sendLoopThread; + //某些请求需要持续的等待服务器返回数据包,然后将所有数据包处理后提供给用户, + // 此字段用于暂存这些未接收完全的数据包。它的key是对应请求的Token字串。 + private static Dictionary workingDictionary; + + //属性控制字段,任何地方都不应该修改它们 + //发送消息时是否要求服务器返回处理结果。由DoesSendMessageReturn属性控制,不要直接修改这个字段 + private static volatile bool doesSendMessageReturnResult = false; + //当前连接状态。由Status属性控制,不要直接修改这个字段 + private static volatile ClientStatus clientStatus = ClientStatus.Uninitialized; + + //线程安全-锁 + //更改连接状态锁 + private static object statusLocker = new object(); + //"发送消息时是否要求服务器返回处理结果"Falg锁 + private static object doesSendMessageReturnLocker = new object(); + } +} diff --git a/stormchat-client-csharp/Interact/Client-Handle.cs b/stormchat-client-csharp/Interact/Client-Handle.cs new file mode 100644 index 0000000..4d66c96 --- /dev/null +++ b/stormchat-client-csharp/Interact/Client-Handle.cs @@ -0,0 +1,194 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System.Drawing; +using System.IO; + +//StormClient对数据的处理相关内容 + +namespace Interact +{ + public partial class StormClient + { + //处理连接中断异常。 + private static void HandleConnectionBroken(Exception ex) + { + lock (statusLocker) + { + if (Status != ClientStatus.Running) + return; + statusLocker = ClientStatus.Stopped; + tcpClient.Close(); + OnDisconnect?.Invoke(ex); + } + } + + #region 处理服务器数据 + //根据包头信息处理数据 + private static void HandleAll(byte[] head, byte[] data) + { + string headStr = Encoding.UTF8.GetString(head); + JObject jsonObj = (JObject)JsonConvert.DeserializeObject(headStr); + switch (jsonObj[AttrNames.Operation].ToString()) + { + case Operations.Panic: + HandlePanic(GetResultHead(jsonObj)); + break; + case Operations.Login: + HandleLoginResult(jsonObj, data); + break; + case Operations.TransMessage: + HandleMessage(jsonObj, data); + break; + case Operations.SendMessage: + HandleSendMessageResult(GetResultHead(jsonObj)); + break; + case Operations.Offline: + HandlePanic(GetResultHead(jsonObj)); + break; + case Operations.UpdateUserInfo: + HandleUpdateUserInfoDone(GetResultHead(jsonObj)); + break; + case Operations.GetUsers: + HandleGetUsersPack(jsonObj, data); + break; + default: + break; + } + } + //提取基本结果包头结构 + private static ResultHead GetResultHead(JObject head) + { + ResultHead resultHead = new ResultHead + { + Token = head[AttrNames.Token].ToString(), + Operation = head[AttrNames.Operation].ToString(), + }; + if (head[AttrNames.Error] != null) + resultHead.Error = head[AttrNames.Error].ToString(); + return resultHead; + } + + //处理服务器异常断开连接消息 + private static void HandlePanic(ResultHead head) + { + SetStatus(ClientStatus.Stopped); + OnPanic?.Invoke(head); + } + + //处理登录反馈消息 + private static void HandleLoginResult(JObject head, byte[] data) + { + //提取结果包头 + ResultHead resultHead = GetResultHead(head); + //发起登录完成事件 + if (head[AttrNames.Error].ToString() != "") + { + OnLoginDone?.Invoke(resultHead, null); + return; + } + User user = new User + { + Name = head[AttrNames.User].ToString(), + NickName = head[AttrNames.NickName].ToString(), + Motto = head[AttrNames.Motto].ToString(), + Group = (UserGroup)Enum.Parse(typeof(UserGroup), head[AttrNames.UGroup].ToString()), + Photo = User.DefaultPhoto + }; + if (int.Parse(head[AttrNames.Photo].ToString()) > 0) + { + MemoryStream ms = new MemoryStream(data); + user.Photo = Image.FromStream(ms); + } //用户头像数据 + OnLoginDone?.Invoke(resultHead, user); + } + + //收到消息 + private static void HandleMessage(JObject head, byte[] data) + { + //提取结果包头 + ResultHead resultHead = GetResultHead(head); + Message message = new Message() + { + When = DateTime.Parse(head[AttrNames.When].ToString()), + From = User.FromUserName(head[AttrNames.From].ToString()), + To = User.Me, + Text = Encoding.UTF8.GetString(data) + }; + OnMessage?.Invoke(message); + } + + //发送消息执行结果 + private static void HandleSendMessageResult(ResultHead head) + { + OnSendMessageDone?.Invoke(head); + } + + //处理掉线、强制登出 + private static void HandleOffiline(ResultHead head) + { + SetStatus(ClientStatus.Stopped); + OnOffline?.Invoke(head); + } + + //处理更改信息结果 + private static void HandleUpdateUserInfoDone(ResultHead head) + { + OnUpdateUserInfoDone?.Invoke(head); + } + + //处理获取用户列表的不连续返回包。当所有包接收完毕后返回给客户 + private static void HandleGetUsersPack(JObject head, byte[] data) + { + ResultHead result = GetResultHead(head); + if (head[AttrNames.Error].ToString() != string.Empty) + { + OnGetUserListDone?.Invoke(result, new User[0]); + return; + } //获取失败 + else if (int.Parse(head[AttrNames.Count].ToString()) <= 0) + { + User[] us; + if (workingDictionary.ContainsKey(result.Token)) + us = workingDictionary[result.Token] as User[]; + else + us = new User[0]; + User.Users = us; + OnGetUserListDone?.Invoke(result, us); + return; + } //获取完成 + //获取用户数据 + User user = new User + { + Name = head[AttrNames.User].ToString(), + NickName = head[AttrNames.NickName].ToString(), + Motto = head[AttrNames.Motto].ToString(), + Group = (UserGroup)Enum.Parse(typeof(UserGroup), head[AttrNames.UGroup].ToString()), + Photo = User.DefaultPhoto + }; //基础数据 + if (int.Parse(head[AttrNames.Photo].ToString()) > 0) + { + MemoryStream ms = new MemoryStream(data); + user.Photo = Image.FromStream(ms); + } //头像数据 + //加入临时用户列表缓存 + User[] users; + int total = int.Parse(head[AttrNames.Total].ToString()); //总用户数 + int count = int.Parse(head[AttrNames.Count].ToString()); //已接收用户数 + if (count > total) + return; + if (workingDictionary.ContainsKey(head[AttrNames.Token].ToString())) + users = workingDictionary[result.Token] as User[]; + else + users = new User[total]; + users[count - 1] = user; + workingDictionary[result.Token] = users; + } + #endregion + + } + +} diff --git a/stormchat-client-csharp/Interact/Client-Read.cs b/stormchat-client-csharp/Interact/Client-Read.cs new file mode 100644 index 0000000..79c2cf8 --- /dev/null +++ b/stormchat-client-csharp/Interact/Client-Read.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Net; +using System.Net.Sockets; + +//StormClient读取数据相关内容 +namespace Interact +{ + public partial class StormClient + { + // 数据读取线程,从tcp连接读取数据 + private static void ReadLoop() + { + NetworkStream stream = StormClient.tcpClient.GetStream(); + try + { + while (StormClient.Status == ClientStatus.Running) + { + byte[] head = ReadDataWithLength(stream); + byte[] data = ReadDataWithLength(stream); + HandleAll(head, data); + } + } + catch (System.IO.IOException ex) + { + HandleConnectionBroken(ex); + } + catch (ObjectDisposedException ex) + { + HandleConnectionBroken(ex); + } + } + // 从网络流读取数据 + private static byte[] ReadDataWithLength(NetworkStream stream) + { + byte[] lenBuffer = new byte[4]; //数据长度 + //获取数据长度 + stream.Read(lenBuffer, 0, 4); + int length = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(lenBuffer, 0)); + if (length <= 0) + return null; + //读取数据 + byte[] data = new byte[length]; + stream.Read(data, 0, length); + return data; + } + } +} diff --git a/stormchat-client-csharp/Interact/Client-Send.cs b/stormchat-client-csharp/Interact/Client-Send.cs new file mode 100644 index 0000000..589655f --- /dev/null +++ b/stormchat-client-csharp/Interact/Client-Send.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Newtonsoft.Json; +using System.Net; +using System.Net.Sockets; + +//StormClient发送数据相关内容 +namespace Interact +{ + public partial class StormClient + { + // 消息写入线程,向tcp连接写入数据 + private static void SendLoop() + { + Packet packet = null; + NetworkStream stream = tcpClient.GetStream(); + //json序列化时忽略值为null的项 + JsonSerializerSettings setting = new JsonSerializerSettings(); + setting.NullValueHandling = NullValueHandling.Ignore; + try + { + //阻塞式的从发送队列中取出数据 + foreach (Packet i in sendQueue.GetConsumingEnumerable()) + { + packet = i; //为了在代码块外引用i + //结束循环 + if (StormClient.Status != ClientStatus.Running) + break; + //向tcp连接写数据 + byte[] lenBuffer; //数据长度缓存 + byte[] headData = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(packet.Head, setting)); + //写包头 + lenBuffer = BitConverter.GetBytes((UInt32)IPAddress.HostToNetworkOrder(headData.Length)); + stream.Write(lenBuffer, 0, 4); + stream.Write(headData, 0, headData.Length); + //写数据 + int length = 0; + if (packet.Data != null) + length = packet.Data.Length; + lenBuffer = BitConverter.GetBytes((UInt32)IPAddress.HostToNetworkOrder(length)); + stream.Write(lenBuffer, 0, 4); + if (length > 0) + stream.Write(packet.Data, 0, packet.Data.Length); + //发送成功回调 + ResultHead result = new ResultHead + { + Token = packet.Head.Token, + Operation = packet.Head.Operation, + Error = "" + }; + packet.CallBack?.Invoke(result); + } + } + catch (System.IO.IOException ex) + { + HandleConnectionBroken(ex); + } + catch (ObjectDisposedException ex) + { + HandleConnectionBroken(ex); + } + finally + { + List packets = new List(sendQueue.Count + 1); + if (packet != null) + packets.Add(packet); + while (sendQueue.TryTake(out packet)) + { + if (packet != null) + packets.Add(packet); + } + foreach (Packet p in packets) + { + //发送失败回调 + ResultHead result = new ResultHead + { + Token = packet.Head.Token, + Operation = packet.Head.Operation, + Error = "Client has stopped running." + }; + packet.CallBack?.Invoke(result); + } + } + } + //发送数据 + private static bool Send(Packet packet) + { + if (sendLoopThread == null || !sendLoopThread.IsAlive) + return false; + //加入数据发送队列等待 + sendQueue.Add(packet); + return true; + } + } +} diff --git a/stormchat-client-csharp/Interact/Client.cs b/stormchat-client-csharp/Interact/Client.cs new file mode 100644 index 0000000..c0560c5 --- /dev/null +++ b/stormchat-client-csharp/Interact/Client.cs @@ -0,0 +1,260 @@ +using System; +using System.Text; +using System.Net.Sockets; +using System.Threading; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; + +namespace Interact +{ + //连接中断 + public delegate void ConnectionBrokenHandler(Exception ex); + //通用请求结果处理 + public delegate void ResultHandler(ResultHead head); + //消息到达事件处理 + public delegate void MessageHandler(Message msg); + //登录反馈到达 + public delegate void LoginDoneHandler(ResultHead head, User user); + //获取用户列表结果处理 + public delegate void GetUserListDoneHandler(ResultHead head, User[] users); + + /// + /// 与服务器进行数据通信,并向外部提供一系列通信接口 + /// + public static partial class StormClient + { + /// + /// 连接中断事件。注意,此事件并不保证连接中断时总是触发,例如主动关闭连接、登出操作 + /// + public static event ConnectionBrokenHandler OnDisconnect; + /// + /// 服务器异常消息处理事件 + /// + public static event ResultHandler OnPanic; + /// + /// 服务器强制注销登陆事件 + /// + public static event ResultHandler OnOffline; + /// + /// 消息到达事件 + /// + public static event MessageHandler OnMessage; + /// + /// 发送消息处理完成反馈事件(仅在DoesSendMessageReturn为true时有效) + /// + public static event ResultHandler OnSendMessageDone; + /// + /// 更新用户信息结果处理事件 + /// + public static event ResultHandler OnUpdateUserInfoDone; + /// + /// 登录结果处理事件 + /// + public static event LoginDoneHandler OnLoginDone; + /// + /// 获取用户列表结果处理事件 + /// + public static event GetUserListDoneHandler OnGetUserListDone; + + //当前连接状态 + public static ClientStatus Status + { + get { lock (statusLocker) { return clientStatus; } } + } + //发送消息时是否要求服务器返回处理结果 + public static bool DoesSendMessageReturn + { + get { lock (doesSendMessageReturnLocker) { return doesSendMessageReturnResult; } } + set { lock (doesSendMessageReturnLocker) { doesSendMessageReturnResult = value; } } + } + + + static StormClient() + { + tcpClient = new TcpClient(); + sendQueue = new BlockingCollection(); + workingDictionary = new Dictionary(); + SetStatus(ClientStatus.Uninitialized); + } + + //设置当前连接状态 + internal static void SetStatus(ClientStatus value) + { + lock (statusLocker) { clientStatus = value; } + } + + /// + /// 初始化客户端,连接服务器。如果成功则启动数据接收和发送线程。 + /// 注意,当网络不稳定时此方法可能会阻塞。 + /// + /// 如果已连接到服务器返回true,否则返回false。 + public static bool Initialize() + { + if (StormClient.tcpClient.Connected) + return true; + try + { + StormClient.tcpClient.Connect(Interact.Properties.Resources.RemoteServerAddr, int.Parse(Interact.Properties.Resources.RemoteServerPort)); + } + catch (Exception) + { + return false; + } + workingDictionary?.Clear(); //清空临时记录 + if (sendLoopThread != null) + sendLoopThread.Abort(); + if (readLoopThread != null) + readLoopThread.Abort(); + //启动数据收发线程 + sendLoopThread = new Thread(new ThreadStart(SendLoop)); + readLoopThread = new Thread(new ThreadStart(ReadLoop)); + sendLoopThread.IsBackground = readLoopThread.IsBackground = true; + SetStatus(ClientStatus.Running); + sendLoopThread.Start(); + readLoopThread.Start(); + return true; + } + + /// + /// 登录。此操作为异步操作,服务器返回结果后产生OnLoginDone事件。 + /// + /// 用户名 + /// 密码 + /// 数据发送完毕回调函数。注意,结果处理回调请设置OnLoginDone事件 + /// 成功将请求加入发送队列返回true,否则返回false。 + public static bool QueueLogin(string user, string password, Action callback = null) + { + JsonLogInfoHead logInfo = new JsonLogInfoHead() + { + Token = Guid.NewGuid().ToString(), + Operation = Operations.Login, + User = user, + Pwd = password + }; + Packet packet = new Packet + { + Head = logInfo, + Data = null, + CallBack = callback + }; + return Send(packet); + } + + /// + /// 请求发送一条消息。异步,此方法将请求放入请求队列后返回。 + /// + /// 要发送的消息文本 + /// 消息接收者 + /// 数据发送完毕时回调函数。 + /// 成功将请求加入发送队列返回true,否则返回false。 + public static bool QueueSendMessage(Message message, Action callback = null) + { + JsonSendMessageHead jsonObj = new JsonSendMessageHead() + { + Token = "", + Operation = Operations.SendMessage, + To = message.To.Name, + NeedResult = DoesSendMessageReturn ? "1" : "0" + }; + Packet packet = new Packet + { + Head = jsonObj, + Data = Encoding.UTF8.GetBytes(message.Text), + CallBack = callback + }; + return Send(packet); + } + + /// + /// 请求登出。异步,此方法将请求放入请求队列后返回。 + /// + /// 数据发送完毕时回调函数。 + /// 成功将请求加入发送队列返回true,否则返回false。 + public static bool QueueLogout(Action callback = null) + { + BaseHead jsonObj = new BaseHead() + { + Token = "", + Operation = Operations.Logout, + }; + Packet packet = new Packet + { + Head = jsonObj, + Data = null, + CallBack = callback + }; + bool success = Send(packet); + SetStatus(ClientStatus.Stopped); + return success; + } + + /// + /// 请求用户列表。异步,此方法将请求放入请求队列后返回。 + /// + /// 数据发送完毕时回调函数。 + /// 成功将请求加入发送队列返回true,否则返回false。 + public static bool QueueGetUserList(Action callback = null) + { + BaseHead jsonObj = new BaseHead() + { + Token = "", + Operation = Operations.GetUsers, + }; + Packet packet = new Packet + { + Head = jsonObj, + Data = null, + CallBack = callback + }; + return Send(packet); + } + + /// + /// 请求更新当前登录用户信息。异步,此方法将请求放入请求队列后返回。 + /// + /// 新的用户信息,如果某项值为null,则不改变该项。 + /// 数据发送完毕时回调函数。 + /// 成功将请求加入发送队列返回true,否则返回false。 + public static bool QueueUpdateUserInfo(UserInfo userInfo, Action callback = null) + { + byte[] photoData = null; //头像数据 + //将头像数据转换到字符数组 + if (userInfo.Photo != null) + { + MemoryStream memStream = new MemoryStream(); + userInfo.Photo.Save(memStream, userInfo.Photo.RawFormat); + photoData = new byte[memStream.Length]; + memStream.Seek(0, SeekOrigin.Begin); + memStream.Read(photoData, 0, photoData.Length); + } + //构建数据包 + JsonUserInfoHead jsonObj = new JsonUserInfoHead() + { + Token = Guid.NewGuid().ToString(), + Operation = Operations.UpdateUserInfo, + NickName = userInfo.NickName, + Password = userInfo.Password, + Motto = userInfo.Motto, + Photo = userInfo.Photo == null ? 0 : photoData.Length + }; + Packet packet = new Packet + { + Head = jsonObj, + Data = photoData, + CallBack = callback + }; + return Send(packet); + } + + /// + /// 客户端连接状态 + /// + public enum ClientStatus + { + Uninitialized, //未启动 + Running, //运行中 + Stopped //已停止 + } + } +} diff --git a/stormchat-client-csharp/Interact/Exception.cs b/stormchat-client-csharp/Interact/Exception.cs new file mode 100644 index 0000000..6634055 --- /dev/null +++ b/stormchat-client-csharp/Interact/Exception.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Interact +{ + public class ConnectionBrokenException : Exception + { + public ConnectionBrokenException(string message) : base(message) { } + } +} diff --git a/stormchat-client-csharp/Interact/Interact.csproj b/stormchat-client-csharp/Interact/Interact.csproj new file mode 100644 index 0000000..7b2a3cb --- /dev/null +++ b/stormchat-client-csharp/Interact/Interact.csproj @@ -0,0 +1,71 @@ + + + + + Debug + AnyCPU + {CEF054AF-95B7-4B88-934E-02705FEEA554} + Library + Properties + Interact + Interact + v4.0 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + .\Newtonsoft.Json.dll + + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/stormchat-client-csharp/Interact/Message.cs b/stormchat-client-csharp/Interact/Message.cs new file mode 100644 index 0000000..26df5b0 --- /dev/null +++ b/stormchat-client-csharp/Interact/Message.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Interact +{ + //定义一则用户接收到的消息 + public class Message + { + public Message() { } + public Message(string text, User Receiver) + { + When = DateTime.Now; + From = User.Me; + To = Receiver; + Text = text; + } + + /*保留 + public const UInt32 MaxHeadLength = 4096; //最大包头长度 + public const UInt32 MaxMessageLength = 0x6400000; //最大数据长度 + */ + public DateTime When; //服务器接收时间 + public User From; //消息发送者 + public User To; //消息接收者 + public string Text; //消息内容 + + //将消息保存到数据库(保留) + protected bool Save() { return false; } + } + + //从服务器接收的原始数据封包 + internal class Packet + { + public BaseHead Head; //包头 + public byte[] Data; //包内容 + public Action CallBack; //数据发送完成的回调函数。注意,此时仅保证数据已发送, + //服务器可能并没有处理完成请求 + } + //允许请求的操作列表。具体定义见设计文档 + public static class Operations + { + public const string Panic = "Panic"; + public const string TransMessage = "TransMessage"; + public const string SendMessage = "SendMessage"; + public const string Login = "Login2"; + public const string Logout = "Logout"; + public const string Offline = "Offline"; + public const string UpdateUserInfo = "UpdateUserInfo"; + public const string GetUsers = "GetUsers"; + } + + #region 定义数据交互用到的数据结构(可能作为事件或回调函数的参数) + //包头基本结构 + public class BaseHead + { + //请求ID,由发送方定义的随机字符串。如果接受方有返回数据应包含相同的Token + public string Token; + //操作类型,决定数据的其他内容 + public string Operation; + } + // 接受方返回的执行结果反馈包头,包含错误文本 + public class ResultHead : BaseHead + { + //错误文本,为空则执行成功 + public string Error; + } + //获取单一用户信息结果包头 + #endregion +} diff --git a/stormchat-client-csharp/Interact/Newtonsoft.Json.dll b/stormchat-client-csharp/Interact/Newtonsoft.Json.dll new file mode 100644 index 0000000..5b3a1eb Binary files /dev/null and b/stormchat-client-csharp/Interact/Newtonsoft.Json.dll differ diff --git a/stormchat-client-csharp/Interact/Properties/AssemblyInfo.cs b/stormchat-client-csharp/Interact/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..49a4d20 --- /dev/null +++ b/stormchat-client-csharp/Interact/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Interact")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Interact")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("cef054af-95b7-4b88-934e-02705feea554")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/stormchat-client-csharp/Interact/Properties/Resources.Designer.cs b/stormchat-client-csharp/Interact/Properties/Resources.Designer.cs new file mode 100644 index 0000000..66f8f97 --- /dev/null +++ b/stormchat-client-csharp/Interact/Properties/Resources.Designer.cs @@ -0,0 +1,81 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Interact.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Interact.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to mattuy.top. + /// + internal static string RemoteServerAddr { + get { + return ResourceManager.GetString("RemoteServerAddr", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 3727. + /// + internal static string RemoteServerPort { + get { + return ResourceManager.GetString("RemoteServerPort", resourceCulture); + } + } + } +} diff --git a/stormchat-client-csharp/Interact/Properties/Resources.resx b/stormchat-client-csharp/Interact/Properties/Resources.resx new file mode 100644 index 0000000..f7b9790 --- /dev/null +++ b/stormchat-client-csharp/Interact/Properties/Resources.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + mattuy.top + + + 3727 + + \ No newline at end of file diff --git a/stormchat-client-csharp/Interact/User.cs b/stormchat-client-csharp/Interact/User.cs new file mode 100644 index 0000000..5976cc1 --- /dev/null +++ b/stormchat-client-csharp/Interact/User.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Drawing; + +namespace Interact +{ + //用户 + public class User + { + //根据用户名匹配用户。如果用户不存在,则返回一个仅用户名有效的实例 + internal static User FromUserName(string userName) + { + if(User.Users != null) + { + foreach (User user in User.Users) + { + if (user.Name == userName) + return user; + } + } + User unidentifiedUser = new User + { + Name = userName, + NickName = "", + Motto = "", + Group = UserGroup.User, + Photo = User.DefaultPhoto + }; + return unidentifiedUser; + } + internal static User[] Users; //用户列表。仅Interact内部访问 + + public static User Me; //当前用户 + public static Image DefaultPhoto; //默认头像 + + public string Name; //用户名 + public string NickName; //昵称 + public string Motto; //个性签名 + public UserGroup Group; //用户组 + public Image Photo; //头像 + } + + //更新用户信息时新的用户信息。如果项值为null则不更改相应的信息 + public class UserInfo + { + public string Password = null; //新密码 + public string NickName = null; //新昵称 + public string Motto = null; //新签名 + public Image Photo = null; //新头像 + } + + //用户类型 + public enum UserGroup + { + User, //普通用户 + Vip, //会员 + Admin, //管理员 + Group //群组 + } +} diff --git a/stormchat-client-csharp/Interact/jsonObject.cs b/stormchat-client-csharp/Interact/jsonObject.cs new file mode 100644 index 0000000..d70a7c1 --- /dev/null +++ b/stormchat-client-csharp/Interact/jsonObject.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +//定义Json序列化与反序列化时使用的数据结构,仅内部使用 + +namespace Interact +{ + //登录信息包头 + internal class JsonLogInfoHead : BaseHead + { + public string User; + public string Pwd; + } + + //发送消息包头 + internal class JsonSendMessageHead : BaseHead + { + public string To; //消息接收者用户名 + public string NeedResult = "0"; //是否要求服务器返回处理结果。否传“0” + } + + //更新用户信息包头 + internal class JsonUserInfoHead : BaseHead + { + public string NickName = null; + public string Password = null; + public string Motto = null; + public int Photo = 0; //新头像大小 + } +} diff --git a/StormChat.sln b/stormchat-client-csharp/StormChat.sln similarity index 100% rename from StormChat.sln rename to stormchat-client-csharp/StormChat.sln diff --git a/stormchat-client-csharp/StormChatWPF/App.config b/stormchat-client-csharp/StormChatWPF/App.config new file mode 100644 index 0000000..74ade9d --- /dev/null +++ b/stormchat-client-csharp/StormChatWPF/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/stormchat-client-csharp/StormChatWPF/App.xaml b/stormchat-client-csharp/StormChatWPF/App.xaml new file mode 100644 index 0000000..1fc1979 --- /dev/null +++ b/stormchat-client-csharp/StormChatWPF/App.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/stormchat-client-csharp/StormChatWPF/App.xaml.cs b/stormchat-client-csharp/StormChatWPF/App.xaml.cs new file mode 100644 index 0000000..55f30e6 --- /dev/null +++ b/stormchat-client-csharp/StormChatWPF/App.xaml.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace StormChatWPF +{ + /// + /// App.xaml 的交互逻辑 + /// + public partial class App : Application + { + } +} diff --git a/stormchat-client-csharp/StormChatWPF/Chat.cs b/stormchat-client-csharp/StormChatWPF/Chat.cs new file mode 100644 index 0000000..743bdd4 --- /dev/null +++ b/stormchat-client-csharp/StormChatWPF/Chat.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Interact; +using System.Drawing; +using System.Windows; + +namespace StormChatWPF +{ + class Chat + { + public static List ContactsList;//联系人集合 + public static Chat chat=new Chat(); + private Chat() + { + StormClient.OnLoginDone += OnHaveLogin; + StormClient.OnGetUserListDone += OnGetContactsList; + StormClient.OnMessage +=OnMessage; + } + internal static User CurrentContact { get; set; }//设置当前联系人对象 + /// + /// 获取联系人列表(完成后打开主窗体) + /// + private void OnGetContactsList(ResultHead head, User[] users) + { + if (head.Error != "") + { + MessageBox.Show("无法获取联系人列表"); + return; + } + App.Current.Dispatcher.Invoke( + (Action)delegate () + { + ContactsList = new List(users); + MainWindow mainWindow = new MainWindow(); + mainWindow.Show(); + LogWindow.Instence.Close(); + }); + } + private void OnHaveLogin(ResultHead head, User user) + { + if (head.Error == "") + { + User.Me = user; + StormClient.QueueGetUserList(); + } + else + { + MessageBox.Show("请核对账号密码!"); + } + }//登录完成 + private void OnMessage(Message message) + { + if (MainWindow.Instence != null) + { + MainWindow.Instence.ShowMessage(message); + } + }//接受到新消息 + + internal void SendMessage(string text,User target) + { + Message msg = new Message(text,target); + Action f = delegate (ResultHead head) + { + MainWindow.Instence.ShowMessage(msg); + }; + StormClient.QueueSendMessage(msg,f); + }//发送消息 + internal static void Log(string user, string password) + { + if (StormClient.Initialize()) + { + if (!StormClient.QueueLogin(user, password)) + { + MessageBox.Show("登录失败"); + } + } + else + { + MessageBox.Show("连接服务器失败!"); + } + }//登录 + + } +} diff --git a/stormchat-client-csharp/StormChatWPF/LogWindow.xaml b/stormchat-client-csharp/StormChatWPF/LogWindow.xaml new file mode 100644 index 0000000..86d517f --- /dev/null +++ b/stormchat-client-csharp/StormChatWPF/LogWindow.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + +