diff --git a/.gitignore b/.gitignore index b60e3f0..77546db 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,4 @@ yarn-debug.log* yarn-error.log* /log -*/.back_so-im/ +/doc/db/.back_so-im/ diff --git a/doc/db/.back_so-im/so-im-backup-2022528154821.pdma.json b/doc/db/.back_so-im/so-im-backup-202263204024.pdma.json similarity index 99% rename from doc/db/.back_so-im/so-im-backup-2022528154821.pdma.json rename to doc/db/.back_so-im/so-im-backup-202263204024.pdma.json index 7f54162..864bf17 100644 --- a/doc/db/.back_so-im/so-im-backup-2022528154821.pdma.json +++ b/doc/db/.back_so-im/so-im-backup-202263204024.pdma.json @@ -4,7 +4,7 @@ "avatar": "", "version": "4.1.1", "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-5-28 15:45:45", + "updatedTime": "2022-6-3 20:40:08", "profile": { "default": { "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", @@ -398,7 +398,7 @@ "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" } ], - "menuWidth": "306px", + "menuWidth": "279px", "headers": [ { "refKey": "defKey", @@ -1401,6 +1401,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" }, + { + "defKey": "relation_id", + "defName": "好友关系id(消息存储路由分片)", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BFA286E3-31EE-4563-B4C4-1B32C8EABB9A" + }, { "defKey": "uid", "defName": "用户id", @@ -2210,7 +2227,7 @@ "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2219,6 +2236,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "41EA492A-EF92-425A-A5D3-DC68EB912E4C" }, + { + "defKey": "status", + "defName": "状态:0删除,1.正常,2.禁用", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "EBB05A85-0A0B-4F40-B6F4-0DC12D12488F" + }, { "defKey": "group_name", "defName": "群聊名称", @@ -2228,7 +2262,7 @@ "len": 128, "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2240,12 +2274,12 @@ "defKey": "user_limit", "defName": "群聊人数限制", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2257,12 +2291,12 @@ "defKey": "user_num", "defName": "当前群聊人数", "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2274,12 +2308,12 @@ "defKey": "create_time", "defName": "创建时间", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2473,6 +2507,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "EF408842-EAAB-4289-895A-29BFA8781BC2" }, + { + "defKey": "last_active", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "4B886C08-68C9-4386-AD4F-37169054A3C4" + }, { "defKey": "create_time", "defName": "创建时间", diff --git a/doc/db/.back_so-im/so-im-backup-2022528160650.pdma.json b/doc/db/.back_so-im/so-im-backup-202263204042.pdma.json similarity index 99% rename from doc/db/.back_so-im/so-im-backup-2022528160650.pdma.json rename to doc/db/.back_so-im/so-im-backup-202263204042.pdma.json index 23227d9..baf4fe7 100644 --- a/doc/db/.back_so-im/so-im-backup-2022528160650.pdma.json +++ b/doc/db/.back_so-im/so-im-backup-202263204042.pdma.json @@ -4,7 +4,7 @@ "avatar": "", "version": "4.1.1", "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-5-28 15:48:21", + "updatedTime": "2022-6-3 20:40:24", "profile": { "default": { "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", @@ -398,7 +398,7 @@ "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" } ], - "menuWidth": "306px", + "menuWidth": "279px", "headers": [ { "refKey": "defKey", @@ -1401,6 +1401,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" }, + { + "defKey": "relation_id", + "defName": "好友关系id(消息存储路由分片)", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BFA286E3-31EE-4563-B4C4-1B32C8EABB9A" + }, { "defKey": "uid", "defName": "用户id", @@ -2210,7 +2227,7 @@ "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2219,6 +2236,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "41EA492A-EF92-425A-A5D3-DC68EB912E4C" }, + { + "defKey": "status", + "defName": "状态:0删除,1.正常,2.禁用", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "EBB05A85-0A0B-4F40-B6F4-0DC12D12488F" + }, { "defKey": "group_name", "defName": "群聊名称", @@ -2228,7 +2262,7 @@ "len": 128, "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2240,12 +2274,12 @@ "defKey": "user_limit", "defName": "群聊人数限制", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2257,12 +2291,12 @@ "defKey": "user_num", "defName": "当前群聊人数", "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2274,12 +2308,12 @@ "defKey": "create_time", "defName": "创建时间", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2473,6 +2507,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "EF408842-EAAB-4289-895A-29BFA8781BC2" }, + { + "defKey": "last_active", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "4B886C08-68C9-4386-AD4F-37169054A3C4" + }, { "defKey": "create_time", "defName": "创建时间", diff --git a/doc/db/.back_so-im/so-im-backup-2022528205253.pdma.json b/doc/db/.back_so-im/so-im-backup-202263204100.pdma.json similarity index 99% rename from doc/db/.back_so-im/so-im-backup-2022528205253.pdma.json rename to doc/db/.back_so-im/so-im-backup-202263204100.pdma.json index 9d4f363..e5dcd4f 100644 --- a/doc/db/.back_so-im/so-im-backup-2022528205253.pdma.json +++ b/doc/db/.back_so-im/so-im-backup-202263204100.pdma.json @@ -4,7 +4,7 @@ "avatar": "", "version": "4.1.1", "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-5-28 16:06:50", + "updatedTime": "2022-6-3 20:40:42", "profile": { "default": { "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", @@ -398,7 +398,7 @@ "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" } ], - "menuWidth": "306px", + "menuWidth": "279px", "headers": [ { "refKey": "defKey", @@ -1401,6 +1401,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" }, + { + "defKey": "relation_id", + "defName": "好友关系id(消息存储路由分片)", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BFA286E3-31EE-4563-B4C4-1B32C8EABB9A" + }, { "defKey": "uid", "defName": "用户id", @@ -2210,7 +2227,7 @@ "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2219,6 +2236,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "41EA492A-EF92-425A-A5D3-DC68EB912E4C" }, + { + "defKey": "status", + "defName": "状态:0删除,1.正常,2.解散", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "EBB05A85-0A0B-4F40-B6F4-0DC12D12488F" + }, { "defKey": "group_name", "defName": "群聊名称", @@ -2228,7 +2262,7 @@ "len": 128, "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2240,12 +2274,12 @@ "defKey": "user_limit", "defName": "群聊人数限制", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2257,12 +2291,12 @@ "defKey": "user_num", "defName": "当前群聊人数", "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2274,12 +2308,12 @@ "defKey": "create_time", "defName": "创建时间", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2473,6 +2507,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "EF408842-EAAB-4289-895A-29BFA8781BC2" }, + { + "defKey": "last_active", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "4B886C08-68C9-4386-AD4F-37169054A3C4" + }, { "defKey": "create_time", "defName": "创建时间", diff --git a/doc/db/so-im-backup-20220529002839.chnr.json b/doc/db/so-im-backup-20220529002839.chnr.json deleted file mode 100644 index 0682f16..0000000 --- a/doc/db/so-im-backup-20220529002839.chnr.json +++ /dev/null @@ -1,3072 +0,0 @@ -{ - "name": "so-im", - "describe": "sopod-soim", - "avatar": "", - "version": "4.1.1", - "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-5-28 20:52:53", - "profile": { - "default": { - "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", - "dbConn": "", - "entityInitFields": [ - { - "defKey": "TENANT_ID", - "defName": "租户号", - "comment": "", - "type": "", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "refDict": "", - "uiHint": "", - "id": "AFCBBC02-ECE9-47B0-9680-9F0494CDCB57" - }, - { - "defKey": "REVISION", - "defName": "乐观锁", - "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "type": "", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "refDict": "", - "uiHint": "", - "id": "C6E4A7AF-BD29-444B-BF64-1D2D2EC37CF0" - }, - { - "defKey": "CREATED_BY", - "defName": "创建人", - "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "type": "", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "refDict": "", - "uiHint": "", - "id": "2D4573C1-B54E-4BDF-BBD4-F4C2FD1FC8C4" - }, - { - "defKey": "CREATED_TIME", - "defName": "创建时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "refDict": "", - "uiHint": "", - "id": "7AB9290E-20AA-4A3E-97E3-96C905B496D3" - }, - { - "defKey": "UPDATED_BY", - "defName": "更新人", - "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "type": "", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "refDict": "", - "uiHint": "", - "id": "C0C6343D-A720-4EB1-835A-28F7227B036F" - }, - { - "defKey": "UPDATED_TIME", - "defName": "更新时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "refDict": "", - "uiHint": "", - "id": "FEBBEA16-0F4D-4557-95E2-278C7C127BB9" - } - ], - "entityInitProperties": {} - }, - "sql": { - "delimiter": "" - }, - "dataTypeSupports": [ - { - "defKey": "MYSQL", - "id": "8FE7C65E-40EB-41B6-B60E-79063AFF6273" - }, - { - "defKey": "JAVA_MP", - "id": "1E385761-67B3-4B80-A194-E302E590E54E" - }, - { - "defKey": "PostgreSQL", - "id": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A" - }, - { - "defKey": "ORACLE", - "id": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542" - }, - { - "defKey": "SQLServer", - "id": "BFC87171-C74F-494A-B7C2-76B9C55FACC9" - }, - { - "defKey": "DB2", - "id": "89504F5D-94BF-4C9E-8B2E-44F37305FED5" - }, - { - "defKey": "DM", - "id": "0BBCABA5-B8E4-41B0-B8E4-8F5EA6029307" - }, - { - "defKey": "GaussDB", - "id": "592C7013-143D-4E7B-AF64-0D7BF1E28230" - }, - { - "defKey": "Kingbase", - "id": "77BD85E5-9D0D-4096-8427-CBA306FC9C6A" - }, - { - "defKey": "MaxCompute", - "id": "11D1FB71-A587-4217-89BA-611B8A1F83E0" - }, - { - "defKey": "SQLite", - "id": "B363BE0B-F852-49B8-9B2E-F6D2174DEAC1" - }, - { - "defKey": "JAVA", - "id": "797A1496-D649-4261-89B4-544132EC3F36" - }, - { - "defKey": "JavaMybatis", - "id": "895CFD1D-4273-4D32-A2C4-CAC70200AB5B" - }, - { - "defKey": "JavaMybatisPlus", - "id": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073" - }, - { - "defKey": "C#", - "id": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30" - }, - { - "defKey": "Hive", - "id": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2" - }, - { - "defKey": "Golang", - "id": "B91D99E0-9B7C-416C-8737-B760957DAF09" - } - ], - "codeTemplates": [ - { - "type": "dbDDL", - "applyFor": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", - "isDefault": true, - "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTO_INCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }} COMMENT '{{=it.func.join(field.defName,field.comment,';')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}\n", - "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push('ALTER TABLE '+before.defKey+' RENAME TO '+after.defKey);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldAdded) { \n let ddlItem = 'ADD COLUMN '+field.defKey+' '+field.dbType;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n if(field.autoIncrement){\n ddlItem += ' AUTO_INCREMENT';\n }\n if(field.defaultValue){\n ddlItem += (' DEFAULT' + field.defaultValue);\n }\n ddlItem += (' COMMENT \\''+field.defName+';'+field.comment+'\\'');\n \n if(field.index>0 && field.afterFieldKey){\n ddlItem += (' AFTER '+field.afterFieldKey);\n }\n ret.push(ddlItem);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldRemoved) { \n ret.push('DROP '+field.defKey);\n }\n return firstDDL+'\\n'+ret.join(',\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = 'ALTER TABLE '+entity.data.baseInfo.defKey;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' MODIFY COLUMN '+after.defKey);\n }else{\n changeDDL += (' CHANGE COLUMN '+before.defKey+' '+after.defKey);\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n let defaultValue = '';\n if(after.defaultValue != null && after.defaultValue.length>0){\n defaultValue = (after.defaultValue);\n }else{\n defaultValue = 'NULL';\n }\n changeDDL += (' DEFAULT ' + defaultValue);\n let comment = after.comment||'';\n changeDDL += (' COMMENT \\''+comment+'\\';');\n ret.push(firstDDL+' '+changeDDL);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" - }, - { - "type": "dbDDL", - "applyFor": "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A", - "isDefault": true, - "createTable": "DROP TABLE IF EXISTS {{=it.entity.defKey}};\nCREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", - "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD COLUMN ${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n } \n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n if(before.dbType !== after.dbType || before.len !== after.len || before.scale !== after.scale){\n let dbTypeDDL = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${after.defKey} TYPE ${before.dbType}`;\n if(after.len>0){\n dbTypeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n dbTypeDDL += (','+after.scale);\n }\n dbTypeDDL += ')';\n }\n ret.push(dbTypeDDL+';');\n }\n \n if(before.defaultValue !== after.defaultValue){\n let defaultDDL = '';\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"NULL\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n defaultDDL += ('SET DEFAULT ' + defaultValue);\n }\n let defaultTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${defaultDDL};`;\n ret.push(defaultTpl);\n }\n \n if(before.notNull !== after.notNull){\n let notNullDDL= 'SET NULL';\n if(after.notNull){\n let notNullDDL= 'SET NOT NULL';\n }\n let notNullTpl = `ALTER TABLE ${entity.data.baseInfo.defKey} ALTER COLUMN ${notNullDDL};`;\n ret.push(notNullTpl);\n }\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n-- 索引重建\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" - }, - { - "type": "appCode", - "applyFor": "1E385761-67B3-4B80-A194-E302E590E54E", - "isDefault": true, - "content": "\n$blankline\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.extension.activerecord.Model;\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.util.Date;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport lombok.experimental.Accessors;\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var hours=today.getHours();\n var minutes=today.getMinutes();\n}}\n /**\n * @author : CHINER\n * @date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n * @desc : {{=it.entity.defName}}{{? it.entity.comment}},{{=it.entity.comment}}{{?}}\n */\n@Data\n@EqualsAndHashCode(callSuper = true)\n@Accessors(chain = true)\n@ApiModel(value = \"{{=it.entity.defName}}\"{{? it.entity.comment}}, description = \"{{=it.entity.comment}}\"{{?}})\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=it.func.camel(it.entity.defKey,true) }} extends Model<{{=it.func.camel(it.entity.defKey,true) }}> {\n{{~it.entity.fields:field:index}}\n $blankline\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n {{? field.primaryKey }}\n @TableId(value = \"{{=field.defKey}}\"{{? field.autoIncrement}}, type=IdType.AUTO{{?}})\n {{??}}\n @TableField(value = \"{{=field.defKey}}\")\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}};\n{{~}}\n$blankline\n}\n$blankline" - }, - { - "type": "dbDDL", - "applyFor": "dictSQLTemplate", - "isDefault": true, - "content": "/* 插入字典总表[{{=it.dict.defKey}}-{{=it.dict.defName}}] */\nINSERT INTO SYS_DICT(KEY_,LABEL,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=it.dict.defName}}','{{=it.dict.intro}}',1);\n/* 插入字典明细表 */\n{{~it.dict.items:item:index}}\nINSERT INTO SYS_DICT_ITEM(DICT_KEY,KEY_,LABEL,SORT_,INTRO,REVISION) VALUES('{{=it.dict.defKey}}','{{=item.defKey}}','{{=item.defName}}','{{=item.sort}}','{{=item.intro}}',1);\n{{~}}" - }, - { - "applyFor": "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542", - "type": "dbDDL", - "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* -------------------------------------------------- */\n创建表:\n{{~ createEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* -------------------------------------------------- */\n删除表:\n{{~ dropEntities:entity}}\n {{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* -------------------------------------------------- */\n修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n {{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n {{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n {{?}}{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}\n {{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('\\n\\t建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('\\n\\t解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}\n{{=indexChanged?'\\n\\t更改了索引':''}}\n{{=changed?'\\n\\t更改了属性':''}}\n{{=relaArray.length>0?relaArray.join(''):''}}\n{{~}}\n{{?}}", - "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`ALTER TABLE ${before.defKey} RENAME TO ${after.defKey}`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `COMMENT ON TABLE ${after.defKey} IS '${commentText}'`;\n ret.push(myText);\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD (${field.defKey} ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ddlItem += ')';\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `COMMENT ON COLUMN ${entity.data.baseInfo.defKey}.${field.defKey} IS '${commentText}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN ${field.defKey}`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE ${entity.data.baseInfo.defKey}`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey !== after.defKey){\n let renameText = `ALTER TABLE ${entity.data.baseInfo.defKey} RENAME COLUMN ${before.defKey} TO ${after.defKey};`;\n ret.push(renameText);\n }\n /*如果没有变化,则不生成变更语句*/\n if(before.dbType === after.dbType \n && before['len'] === after['len'] \n && before.scale === after.scale\n && before.primaryKey === after.primaryKey\n && before.notNull === after.notNull\n && before.autoIncrement === after.autoIncrement\n && before.defaultValue === after.defaultValue){\n continue;\n }\n changeDDL += ('MODIFY ('+after.defKey+'');\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(field.scale)>0){\n changeDDL += (','+field.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n changeDDL += ')';\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" - }, - { - "applyFor": "BFC87171-C74F-494A-B7C2-76B9C55FACC9", - "type": "dbDDL", - "createTable": "IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[{{=it.entity.defKey}}]') AND type in (N'U')) DROP TABLE [dbo].[{{=it.entity.defKey}}];\n\nCREATE TABLE [dbo].[{{=it.entity.defKey}}](\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' IDENTITY(1,1)' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i'+(after.defKey||'NULL'));\n }\n if(before.defName !== after.defName){\n ret.push('显示名称:'+(before.defName||'NULL')+'->'+(after.defName||'NULL'));\n }\n if(before.comment !== after.comment){\n ret.push('说明:'+(before.comment||'NULL')+'->'+(after.comment||'NULL'));\n }\n if(ret.length>0){\n return ' 基本信息:\\n\\t'+ret.join('\\n\\t');\n }\n return '';\n };\n \n function buildAddedDesc(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n \n for (let field of fieldAdded) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildRemovedDesc(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n \n for (let field of fieldRemoved) { \n let row = [];\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n \n function buildModifiedDesc(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n for (let field1 of fieldModified) { \n let row = [];\n let field = field1.before;\n row.push(field.defKey+'['+field.defName+']');\n ret.push(row.join(\"\"))\n }\n return ret;\n };\n}}\n\n\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=entity.data.defKey}}[{{=entity.data.defName}}]\n{{~}}\n{{?}}\n\n{{? modifyEntities && modifyEntities.length > 0}}\n/* --------------- 修改表 --------------- */\n{{~ modifyEntities:entity}}\n{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]{{let changeText=baseChanged(entity.data.baseChanged);}}\n{{=baseChanged(entity.data.baseChanged)}}\n {{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n 修改字段:\n {{='\\t'}}{{=buildModifiedDesc(entity).join('\\n\\t')}}{{?}}{{\n /*计算是否调整了属性*/\n let propAdded = entity.data.propAdded || [];\n let propRemoved = entity.data.propRemoved || [];\n let propModified = entity.data.propModified || [];\n let changed = propAdded.length>0 || propRemoved.length>0 || propModified.length>0;\n /*计算关联是否调整*/\n let refEntityAdd = entity.data.refEntityAdd || [];\n let refEntityRemoved = entity.data.refEntityRemoved || [];\n let relaArray = [];\n for (let rela of refEntityAdd) {\n relaArray.push('建立关联:'+rela.defKey+'['+rela.defName+']');\n }\n for (let rela of refEntityRemoved) {\n relaArray.push('解除关联:'+rela.defKey+'['+rela.defName+']');\n }\n /*索引是否修改过*/\n let indexChanged = entity.data.indexChanged;\n }}{{=indexChanged?'\\n\\t更改了索引':''}}{{=changed?'\\n\\t更改了属性':''}}{{=relaArray.length>0?('\\n\\t'+relaArray.join('\\n\\t')):''}}\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n 添加字段:\n{{='\\t'}}{{=buildAddedDesc(entity).join('\\n\\t')}}\n{{?}}{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n 删除字段:\n{{='\\t'}}{{=buildRemovedDesc(entity).join('\\n\\t')}}\n{{?}}\n{{~}}\n{{?}}", - "update": "{{\n let createEntities = it.changes.filter(function(row){return (row.opt==='add'&&row['type']==='entity');});\n let dropEntities = it.changes.filter(function(row){return (row.opt==='delete'&&row['type']==='entity');});\n let modifyEntities = it.changes.filter(function(row){return (row.opt==='update'&&row['type']==='entity');});\n \n function baseChangedDDL(beforeAfter){\n if(beforeAfter == null){\n return '';\n }\n let ret = [];\n let before = beforeAfter.before || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n let after = beforeAfter.after || {\"defKey\":\"\",\"defName\":\"\",\"comment\":\"\"};\n if(before.defKey !== after.defKey){\n ret.push(`EXEC sp_rename '${before.defKey}','${after.defKey}'`);\n }\n let commentText = '';\n let commentChanged = false;\n if(before.defName !== after.defName){\n commentText = after.defName;\n commentChanged = true;\n }\n if(before.comment !== after.comment){\n commentChanged = true;\n if(commentText){\n commentText = (commentText+ ';'+after.comment)\n }else{\n commentText = after.comment\n }\n }\n if(commentChanged){\n let myText = `IF ((SELECT COUNT(*) FROM ::fn_listextendedproperty('MS_Description','SCHEMA', 'dbo','TABLE', '${after.defKey}', NULL, NULL)) > 0)\n \\n\\tEXEC sp_updateextendedproperty 'MS_Description', '${commentText}','SCHEMA', 'dbo','TABLE', '${after.defKey}'\n \\nELSE\n \\n\\tEXEC sp_addextendedproperty 'MS_Description', '${commentText}', 'SCHEMA', 'dbo','TABLE', '${after.defKey}'\n `;\n ret.push(myText);\n /*ret.push('ALTER TABLE '+after.defKey+' COMMENT \\''+commentText+'\\'');*/\n }\n let baseText = '-- 基本信息:\\n';\n return baseText+ret.join(';\\n')+';';\n };\n \n function buildAddedDDL(entity){\n let ret = [];\n let fieldAdded = entity.data.fieldAdded||[];\n if(fieldAdded.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldAdded) { \n let ddlItem = `ADD [${field.defKey}] ${field.dbType}`;\n /*处理数据类型长度*/\n if(field.len>0){\n ddlItem += ('('+field.len);\n if(parseInt(field.scale)>0){\n ddlItem += (','+field.scale);\n }\n ddlItem += ')';\n }\n let defaultValue = field.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n ddlItem += (' DEFAULT ' + defaultValue);\n }\n if(field.notNull){\n ddlItem += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${ddlItem}`);\n \n /*处理字段注释*/\n let fieldComments = [];\n if(field.defName != null &&field.defName.length>0){\n fieldComments.push(field.defName);\n }\n if(field.comment != null &&field.comment.length>0){\n fieldComments.push(field.comment);\n }\n let commentText = fieldComments.join(';');\n if(commentText != null && commentText.length > 0){\n let commentDDL = `EXEC sp_addextendedproperty 'MS_Description', N'${commentText}','SCHEMA', N'dbo','TABLE', N'${entity.data.baseInfo.defKey}','COLUMN', N'${field.defKey}'`;\n ret.push(commentDDL);\n }\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildRemovedDDL(entity){\n let ret = [];\n let fieldRemoved = entity.data.fieldRemoved||[];\n if(fieldRemoved.length == 0){\n return '';\n }\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldRemoved) { \n ret.push(`${firstDDL} DROP COLUMN [${field.defKey}]`);\n }\n return '\\n'+ret.join(';\\n');\n };\n \n function buildModifiedDDL(entity){\n let ret = [];\n let fieldModified = entity.data.fieldModified||[];\n \n let firstDDL = `ALTER TABLE [dbo].[${entity.data.baseInfo.defKey}]`;\n for (let field of fieldModified) { \n let changeDDL = '';\n let before = field.before || {};\n let after = field.after || {};\n if(before.defKey === after.defKey){\n changeDDL += (' ALTER COLUMN ['+after.defKey+']');\n }else{\n let renameText = `EXEC sp_rename '[dbo].[${entity.data.baseInfo.defKey}].[${before.defKey}]','${after.defKey}','COLUMN';`;\n ret.push(renameText);\n continue;\n }\n changeDDL += (' '+after.dbType);\n if(after.len>0){\n changeDDL += ('('+after.len);\n if(parseInt(after.scale)>0){\n changeDDL += (','+after.scale);\n }\n changeDDL += ')';\n }\n let defaultValue = after.defaultValue;\n defaultValue = (defaultValue==null)?\"\":(\"\"+defaultValue);\n if(defaultValue.length>0){\n changeDDL += (' DEFAULT ' + defaultValue);\n }\n \n if(after.notNull){\n changeDDL += ' NOT NULL';\n }\n ret.push(`${firstDDL} ${changeDDL};`);\n }\n return ret;\n };\n}}\n{{? createEntities && createEntities.length > 0}}\n/* --------------- 创建表 --------------- */\n{{~ createEntities:entity}}\n{{=it.func.createDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? dropEntities && dropEntities.length > 0}}\n/* --------------- 删除表 --------------- */\n{{~ dropEntities:entity}}\n{{=it.func.dropDDL(entity.data,entity['type'])}}\n{{~}}\n{{?}}\n\n\n{{? modifyEntities && modifyEntities.length > 0}}\n{{~ modifyEntities:entity}}\n/* --------------- 修改表 --------------- */\n-- 修改表:{{=entity.data.baseInfo.defKey}}[{{=entity.data.baseInfo.defName}}]\n{{=baseChangedDDL(entity.data.baseChanged)}}\n{{? entity.data.fieldModified && entity.data.fieldModified.length > 0}}\n-- 修改字段:\n{{=buildModifiedDDL(entity).join('\\n')}}\n{{?}}{{\n/*索引是否修改过*/\nlet indexChanged = entity.data.indexChanged;\n}}\n{{? indexChanged }}\n{{=it.func.indexRebuildDDL(entity.data.baseInfo,entity.data.newIndexes,entity.data.fullFields,entity['type'])}}\n{{?}}\n\n{{? entity.data.fieldAdded && entity.data.fieldAdded.length > 0}}\n-- 添加字段:\n{{=buildAddedDDL(entity)}};\n{{?}}\n\n{{? entity.data.fieldRemoved && entity.data.fieldRemoved.length > 0}}\n-- 删除字段:\n{{=buildRemovedDDL(entity)}};\n{{?}}\n{{~}}\n{{?}}" - }, - { - "type": "dbDDL", - "applyFor": "89504F5D-94BF-4C9E-8B2E-44F37305FED5", - "createTable": "CREATE TABLE {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n{{~it.entity.fields:field:index}}\n {{? field.primaryKey }}{{ pkList.push(field.defKey) }}{{?}}\n {{=field.defKey}} {{=field.type}}{{?field.len>0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? '' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ','('+field.defaultValue+')',' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= field.autoIncrement ? ' AUTO_INCREMENT' : '' }}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{= field.defaultValue ? it.func.join(' DEFAULT ',field.defaultValue,' ') : '' }}{{?}}{{= field.notNull ? ' NOT NULL' : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i0}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{?}}{{=')'}}{{?}} {{= field.notNull ? 'NOT NULL' : '' }} {{= field.autoIncrement ? 'AUTOINCREMENT' : '' }} {{= field.defaultValue ? it.func.join('DEFAULT',field.defaultValue,' ') : '' }}{{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }} --{{=it.func.join(field.defName,field.comment,';')}}\n{{~}}\n{{? pkList.length >0 }}\n PRIMARY KEY ({{~pkList:pkName:i}}{{= pkName }}{{= i queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n return ResponseEntity.ok({{=serviceVarName}}.paginQuery({{=beanVarName}}, pageRequest));\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", - "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", - "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.queryById({{=pkVarName}});\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n long total = {{=mapperName}}.count({{=beanVarName}});\n return new PageImpl<>({{=mapperName}}.queryAllByLimit({{=beanVarName}}, pageRequest), pageRequest, total);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.update({{=beanVarName}});\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", - "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport org.springframework.data.domain.Pageable;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper{\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n \n /** \n * 分页查询指定行数据\n *\n * @param {{=beanVarName}} 查询条件\n * @param pageable 分页对象\n * @return 对象列表\n */\n List<{{=beanClass}}> queryAllByLimit({{=beanClass}} {{=beanVarName}}, @Param(\"pageable\") Pageable pageable);\n\n /** \n * 统计总行数\n *\n * @param {{=beanVarName}} 查询条件\n * @return 总行数\n */\n long count({{=beanClass}} {{=beanVarName}});\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int insert({{=beanClass}} {{=beanVarName}});\n\n /** \n * 批量新增数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 批量新增或按主键更新数据\n *\n * @param entities List<{{=beanClass}}> 实例对象列表\n * @return 影响行数\n */\n int insertOrUpdateBatch(@Param(\"entities\") List<{{=beanClass}}> entities);\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 影响行数\n */\n int update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 影响行数\n */\n int deleteById({{=pkDataType}} {{=pkVarName}});\n}", - "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n\n \n {{~it.entity.fields:field:index}}\n \n {{~}}\n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values ({{=it.entity.fields.map(function(e,i){return '#{'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n \n $blankline\n \n \n insert into {{=it.entity.defKey}}({{=it.entity.fields.map(function(e,i){return e.defKey}).join(',')}})\n values\n \n ({{=it.entity.fields.map(function(e,i){return '#{entity.'+it.func.camel(e.defKey,false)+'}'}).join(',')}})\n \n on duplicate key update\n {{=it.entity.fields.map(function(e,i){return e.defKey + '=values('+e.defKey+')'}).join(',\\n\\t\\t')}}\n \n $blankline\n \n \n update {{=it.entity.defKey}}\n \n {{~it.entity.fields:field:index}}\n \n {{=field.defKey}} = #{{{=it.func.camel(field.defKey,false)}}},\n \n {{~}}\n \n where {{=pkField}} = #{{{=pkVarName}}}\n \n $blankline\n \n \n delete from {{=it.entity.defKey}} where {{=pkField}} = #{{{=pkVarName}}}\n \n\n\n", - "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" - }, - { - "applyFor": "A2EE7B4A-CE62-4290-B00C-B26C1BF18073", - "type": "appCode", - "Controller": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.controller;\n$blankline\nimport java.util.List;\nimport io.swagger.annotations.Api;\nimport io.swagger.annotations.ApiOperation;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.PageImpl;\nimport org.springframework.data.domain.PageRequest;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.service.{{=serviceClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表控制层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Api(tags = \"{{=it.entity.defName}}对象功能接口\")\n@RestController\n@RequestMapping(\"/{{=it.func.camel(it.entity.defKey,false)}}\")\npublic class {{=beanClass}}Controller{\n @Autowired\n private {{=serviceClass}} {{=serviceVarName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n @ApiOperation(\"通过ID查询单条数据\")\n @GetMapping(\"{{{=it.func.camel(pkVarName,false)}}}\")\n public ResponseEntity<{{=beanClass}}> queryById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.queryById({{=pkVarName}}));\n }\n $blankline\n /** \n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param pageRequest 分页对象\n * @return 查询结果\n */\n @ApiOperation(\"分页查询\")\n @GetMapping\n public ResponseEntity> paginQuery({{=beanClass}} {{=beanVarName}}, PageRequest pageRequest){\n //1.分页参数\n long current = pageRequest.getPageNumber();\n long size = pageRequest.getPageSize();\n\n //2.分页查询\n /*把Mybatis的分页对象做封装转换,MP的分页对象上有一些SQL敏感信息,还是通过spring的分页模型来封装数据吧*/\n com.baomidou.mybatisplus.extension.plugins.pagination.Page<{{=beanClass}}> pageResult = {{=serviceVarName}}.paginQuery({{=beanVarName}}, current,size);\n\n //3. 分页结果组装\n List<{{=beanClass}}> dataList = pageResult.getRecords();\n long total = pageResult.getTotal();\n PageImpl<{{=beanClass}}> retPage = new PageImpl<{{=beanClass}}>(dataList,pageRequest,total);\n return ResponseEntity.ok(retPage);\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"新增数据\")\n @PostMapping\n public ResponseEntity<{{=beanClass}}> add({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.insert({{=beanVarName}}));\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n @ApiOperation(\"更新数据\")\n @PutMapping\n public ResponseEntity<{{=beanClass}}> edit({{=beanClass}} {{=beanVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.update({{=beanVarName}}));\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n @ApiOperation(\"通过主键删除数据\")\n @DeleteMapping\n public ResponseEntity deleteById({{=pkDataType}} {{=pkVarName}}){\n return ResponseEntity.ok({{=serviceVarName}}.deleteById({{=pkVarName}}));\n }\n}", - "Service": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.service;\n$blankline\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务接口\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\npublic interface {{=serviceClass}}{\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}});\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size);\n\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} insert({{=beanClass}} {{=beanVarName}});\n\n \n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n {{=beanClass}} update({{=beanClass}} {{=beanVarName}});\n\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n boolean deleteById({{=pkDataType}} {{=pkVarName}});\n}", - "ServiceImpl": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkVarNameU = \"UndefinedId\";\n var pkFieldKey = \"UNDEFINED\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkFieldKey = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkVarNameU = it.func.camel(field.defKey,true);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n var mapperName = beanVarName+'Mapper';\n \n}}package {{=pkgName}}.service.impl;\n$blankline\nimport cn.hutool.core.util.StrUtil;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;\n\nimport {{=pkgName}}.entity.{{=beanClass}};\nimport {{=pkgName}}.mapper.{{=beanClass}}Mapper;\nimport {{=pkgName}}.service.{{=serviceClass}};\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表服务实现类\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Service\npublic class {{=serviceClass}}Impl implements {{=serviceClass}}{\n @Autowired\n private {{=beanClass}}Mapper {{=mapperName}};\n $blankline\n /** \n * 通过ID查询单条数据 \n *\n * @param {{=pkVarName}} 主键\n * @return 实例对象\n */\n public {{=beanClass}} queryById({{=pkDataType}} {{=pkVarName}}){\n return {{=mapperName}}.selectById({{=pkVarName}});\n }\n $blankline\n /**\n * 分页查询\n *\n * @param {{=beanVarName}} 筛选条件\n * @param current 当前页码\n * @param size 每页大小\n * @return\n */\n public Page<{{=beanClass}}> paginQuery({{=beanClass}} {{=beanVarName}}, long current, long size){\n //1. 构建动态查询条件\n LambdaQueryWrapper<{{=beanClass}}> queryWrapper = new LambdaQueryWrapper<>();\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n queryWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n\n //2. 执行分页查询\n Page<{{=beanClass}}> pagin = new Page<>(current , size , true);\n IPage<{{=beanClass}}> selectResult = {{=mapperName}}.selectByPage(pagin , queryWrapper);\n pagin.setPages(selectResult.getPages());\n pagin.setTotal(selectResult.getTotal());\n pagin.setRecords(selectResult.getRecords());\n\n //3. 返回结果\n return pagin;\n }\n $blankline\n /** \n * 新增数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} insert({{=beanClass}} {{=beanVarName}}){\n {{=mapperName}}.insert({{=beanVarName}});\n return {{=beanVarName}};\n }\n $blankline\n /** \n * 更新数据\n *\n * @param {{=beanVarName}} 实例对象\n * @return 实例对象\n */\n public {{=beanClass}} update({{=beanClass}} {{=beanVarName}}){\n //1. 根据条件动态更新\n LambdaUpdateChainWrapper<{{=beanClass}}> chainWrapper = new LambdaUpdateChainWrapper<{{=beanClass}}>({{=mapperName}});\n {{~it.entity.fields.filter(function(e){return e[\"type\"]===\"String\"&&e.defKey !== pkFieldKey}):field:index}}\n if(StrUtil.isNotBlank({{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}())){\n chainWrapper.eq({{=beanClass}}::get{{=it.func.camel(field.defKey,true)}}, {{=beanVarName}}.get{{=it.func.camel(field.defKey,true)}}());\n }\n {{~}}\n //2. 设置主键,并更新\n chainWrapper.set({{=beanClass}}::get{{=pkVarNameU}}, {{=beanVarName}}.get{{=pkVarNameU}}());\n boolean ret = chainWrapper.update();\n //3. 更新成功了,查询最最对象返回\n if(ret){\n return queryById({{=beanVarName}}.get{{=pkVarNameU}}());\n }else{\n return {{=beanVarName}};\n }\n }\n $blankline\n /** \n * 通过主键删除数据\n *\n * @param {{=pkVarName}} 主键\n * @return 是否成功\n */\n public boolean deleteById({{=pkDataType}} {{=pkVarName}}){\n int total = {{=mapperName}}.deleteById({{=pkVarName}});\n return total > 0;\n }\n}", - "Mapper": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.mapper;\n$blankline\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\nimport {{=pkgName}}.entity.{{=beanClass}};\n$blankline\n\n /**\n * {{=it.entity.defName}};({{=it.entity.defKey}})表数据库访问层\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@Mapper\npublic interface {{=beanClass}}Mapper extends BaseMapper<{{=beanClass}}>{\n /** \n * 分页查询指定行数据\n *\n * @param page 分页参数\n * @param wrapper 动态查询条件\n * @return 分页对象列表\n */\n IPage<{{=beanClass}}> selectByPage(IPage<{{=beanClass}}> page , @Param(Constants.WRAPPER) Wrapper<{{=beanClass}}> wrapper);\n}", - "Mapper.xml": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n var pkField = \"UNDEFINED_ID\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkField = field.defKey;\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}\n\n$blankline\n\n\n \n\n\n", - "Entity": "{{ var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n \n var pkVarName = \"undefinedId\";\n var pkDataType = \"String\";\n it.entity.fields.forEach(function(field){\n if(field.primaryKey){\n pkVarName = it.func.camel(field.defKey,false);\n pkDataType = field[\"type\"];\n return;\n }\n });\n \n var pkgName = it.entity.env.base.nameSpace;\n var beanClass = it.entity.env.base.codeRoot;\n var beanVarName = beanClass.charAt(0).toLowerCase()+beanClass.slice(1);\n var serviceClass = beanClass+'Service';\n var serviceVarName= beanVarName+'Service';\n \n}}package {{=pkgName}}.entity;\n$blankline\nimport io.swagger.annotations.ApiModel;\nimport io.swagger.annotations.ApiModelProperty;\nimport com.baomidou.mybatisplus.annotation.TableName;\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport java.io.Serializable;\nimport java.util.Date;\n$blankline\n\n /**\n * {{=it.entity.defName}};{{=it.entity.comment}}\n * @author : http://www.chiner.pro\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n */\n@ApiModel(value = \"{{=it.entity.defName}}\",description = \"{{=it.entity.comment}}\")\n@TableName(\"{{=it.entity.defKey}}\")\npublic class {{=beanClass}} implements Serializable,Cloneable{\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n @ApiModelProperty(name = \"{{=field.defName}}\",notes = \"{{=field.comment}}\")\n {{? field.primaryKey }}\n @TableId\n {{?}}\n private {{=field.type}} {{=it.func.camel(field.defKey,false)}} ;\n{{~}}\n$blankline\n\n{{~it.entity.fields:field:index}}\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public {{=field.type}} get{{=it.func.camel(field.defKey,true)}}(){\n return this.{{=it.func.camel(field.defKey,false)}};\n }\n /** {{=it.func.join(field.defName,field.comment,';')}} */\n public void set{{=it.func.camel(field.defKey,true)}}({{=field.type}} {{= it.func.camel(field.defKey,false) }}){\n this.{{=it.func.camel(field.defKey,false)}}={{=it.func.camel(field.defKey,false)}};\n }\n{{~}}\n}" - }, - { - "type": "appCode", - "applyFor": "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30", - "Default": "using System;\nusing System.Collections.Generic;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n}}\n/*\n * @author : http://www.chiner.com.cn\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace PDManer.Application\n{\n public partial class {{=it.func.camel(it.entity.defKey,true) }}\n {\n \n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n public {{=field.type}} {{=it.func.camel(field.defKey,true)}} { get; set; }\n $blankline\n {{~}}\n \n }\n}", - "SqlSugar": "using System;\nusing System.Collections.Generic;\nusing SqlSugar;\n\n$blankline\n{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1;\n var days=today.getDate();\n var sqlSugartable='[SugarTable(\"{{=it.entity.defKey}}\", TableDescription = \"{{=it.func.join(it.entity.defName,it.entity.comment,';')}}\")]';\n}}\n/*\n * @author : xkdong@163.com\n * @date : {{=fullYear}}-{{=month}}-{{=days}}\n * @desc : {{=it.func.join(it.entity.defName,it.entity.comment,'-')}}\n */\nnamespace Model.DBModel\n{\n /// \n /// {{=it.func.join(it.entity.defName,it.entity.comment,';')}}\n /// \n {{=sqlSugartable}}\n public class {{=it.entity.defKey}}\n {\n {{~it.entity.fields:field:index}}\n /// \n /// {{=it.func.join(field.defName,field.comment,';')}}\n /// \n {{? field.primaryKey }}\n [SugarColumn(IsIdentity = true, IsPrimaryKey = true)]\n {{?}}\n public {{=field.type}} {{=it.func.camel(field.defKey,true)}}{ get; set; }\n $blankline\n {{~}}\n }\n}" - }, - { - "applyFor": "81CCA482-3F4D-4EAC-8CF9-F5E7BC098AD2", - "type": "dbDDL", - "createTable": "/**字段名,关键字等全部用的小写*/\ndrop table if exists {{=it.entity.defKey}};\n/**补充上库名,external关键字根据建表规范看是否添加*/\ncreate [external] table if not exists {{=it.entity.defKey}}(\n{{ pkList = [] ; }}\n/**这里把varchar,char,text,date,datetime字段全部映射为string类型.tinyint unsigned,bit,Integer,tinyint,smallint,mediumint映射为int类型,int unsigned映射为bigint.其它自定义映射规则根据自己情况修改*/\n/**当长度>0只有为decimal类型或double类型时才保留长度和小数的位数*/\n{{~it.entity.fields:field:index}}\n {{=it.func.lowerCase(field.defKey)}} {{=it.func.lowerCase(field.dbType)=='varchar'||it.func.lowerCase(field.dbType)=='char'||it.func.lowerCase(field.dbType)=='text'||it.func.lowerCase(field.dbType)=='date'||it.func.lowerCase(field.dbType)=='datetime' ? 'string':it.func.lowerCase(field.dbType)=='tinyint unsigned'||it.func.lowerCase(field.dbType)=='bit'||it.func.lowerCase(field.dbType)=='integer'||it.func.lowerCase(field.dbType)=='tinyint'||it.func.lowerCase(field.dbType)=='smallint'||it.func.lowerCase(field.dbType)=='mediumint' ? 'int':it.func.lowerCase(field.dbType)=='int unsigned' ? 'bigint':it.func.lowerCase(field.dbType)}}{{?field.len>0&&(it.func.lowerCase(field.dbType)=='decimal'||it.func.lowerCase(field.dbType)=='double')}}{{='('}}{{=field.len}}{{?field.scale>0}}{{=','}}{{=field.scale}}{{=')'}}{{?}}{{?}} comment '{{=it.func.join(field.defName,field.comment,'')}}' {{= index < it.entity.fields.length-1 ? ',' : ( pkList.length>0 ? ',' :'' ) }}\n{{~}}\n{{? pkList.length >0 }}\n{{?}}\n)\n{{\n let partitionedBy = it.entity.properties['partitioned by'];\n partitionedBy = partitionedBy?partitionedBy:'请在扩展属性中配置[partitioned by]属性';\n}}\ncomment '{{=it.func.join(it.entity.defName,';') }}'\n/**是否分区表,分区字段名和字段注释自定义*/\n[partitioned by {{=partitionedBy}}]\n/**文件存储格式自定义*/\n[stored as orc]\n/**hdfs上的地址自定义*/\n[location xxx]\n;", - "createView": "", - "deleteTable": "", - "createIndex": "", - "deleteIndex": "", - "message": "", - "update": "" - }, - { - "applyFor": "B91D99E0-9B7C-416C-8737-B760957DAF09", - "type": "appCode", - "content": "{{\n var today=new Date();\n var fullYear=today.getFullYear();\n var month=today.getMonth() + 1<10?\"0\"+today.getMonth():today.getMonth();\n var days=today.getDate()<10?\"0\"+today.getDate():today.getDate();\n var hours = today.getHours()<10?\"0\"+today.getHours():today.getHours(); \n\tvar minutes = today.getMinutes()<10?\"0\"+today.getMinutes():today.getMinutes(); \n\tvar seconds = today.getSeconds()<10?\"0\"+today.getSeconds():today.getSeconds(); \n}}\n// Package models {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\n// author : http://www.liyang.love\n// date : {{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n// desc : {{=it.func.join(it.entity.defName,it.entity.comment,',')}}\npackage models\n\n$blankline\n\n// {{=it.func.camel(it.entity.defKey,true) }} {{=it.func.join(it.entity.defName,it.entity.comment,',')}}。\n// 说明:{{=it.entity.comment}}\n// 表名:{{=it.entity.defKey}}\n// group: {{=it.func.camel(it.entity.defKey,true) }}\n// obsolete:\n// appliesto:go 1.8+;\n// namespace:hongmouer.his.models.{{=it.func.camel(it.entity.defKey,true) }}\n// assembly: hongmouer.his.models.go\n// class:HongMouer.HIS.Models.{{=it.func.camel(it.entity.defKey,true) }}\n// version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\ntype {{=it.func.camel(it.entity.defKey,true) }} struct {\n {{~it.entity.fields:field:index}}\n {{=formatGoLang(it.func.camel(field.defKey,true),null,field,it.entity.fields,null,1)}} {{=formatGoLang(field.type,\"type\",field,it.entity.fields,10,3)}} `gorm:\"column:{{=field.primaryKey?\"primaryKey;\":\"\"}}{{=field.defKey}}\" json:\"{{=it.func.camel(field.defKey,true)}}\"` {{=formatGoLang(\"gorm:column:\"+field.defKey+\" json:\"+it.func.camel(field.defKey,true),null,field,it.entity.fields,null,2)}} //type:{{=formatGoLang(field.type,\"type\",field,it.entity.fields,null,3)}} comment:{{=formatGoLang(it.func.join(field.defName,field.comment,';'),\"defName\",field,it.entity.fields,null,4)}} version:{{=fullYear}}-{{=month}}-{{=days}} {{=hours}}:{{=minutes}}\n {{~}}\n}\n\n\n$blankline\n// TableName 表名:{{=it.entity.defKey}},{{=it.entity.defName}}。\n// 说明:{{=it.entity.comment}}\nfunc (ZentaoUserInfo) TableName() string {\n\treturn \"{{=it.entity.defKey}}\"\n}\n\n{{\n\nfunction formatGoLang(str, fieldName, field, fileds, emptLength, isFiled) {\n var maxLength = 0;\n\n if (isFiled == 1) {\n for (var i = 0; i < fileds.length; i++) {\n if (getBlength(it.func.camel(fileds[i].defKey, true)) > maxLength) {\n maxLength = getBlength(it.func.camel(fileds[i].defKey, true)) + 2;\n }\n }\n } else if (isFiled == 2) {\n for (var i = 0; i < fileds.length; i++) {\n var newStr = \"gorm:column:\" + fileds[i].defKey + \" json:\" + it.func.camel(fileds[i].defKey, true);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 2;\n }\n }\n var empt = \"\";\n var strLength = getBlength(str);\n if (field.primaryKey) {\n strLength += getBlength(\"primaryKey;\");\n }\n for (var j = 0; j < maxLength - strLength; j++) {\n empt += ' ';\n }\n return empt;\n } else if (isFiled == 3) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = eval(\"fileds[\" + i + \"].\" + fieldName);\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n } else if (isFiled == 4) {\n /*获取某个字段的最大长度*/\n for (var i = 0; i < fileds.length; i++) {\n var newStr = fileds[i].comment + \";\" + fileds[i].defName;\n if (getBlength(newStr) > maxLength) {\n maxLength = getBlength(newStr) + 1;\n }\n }\n }\n else {\n maxLength = emptLength;\n }\n\n var strLength = getBlength(str);\n for (var j = 0; j < maxLength - strLength; j++) {\n str += ' ';\n }\n return str;\n}\n\nfunction getBlength(str) {\n var n = 0;\n for (var i = str.length; i--;) {\n n += str.charCodeAt(i) > 255 ? 2 : 1;\n }\n return n;\n} \n\n}}" - } - ], - "generatorDoc": { - "docTemplate": "" - }, - "relationFieldSize": 30, - "uiHint": [ - { - "defKey": "Input", - "defName": "普通输入框", - "id": "6DD45F73-AE5E-426A-9C51-7E6CFABE23F6" - }, - { - "defKey": "Select", - "defName": "下拉输入框", - "id": "A1EA6B0B-E0EC-4A2A-8B22-9B7522DE1F0E" - }, - { - "defKey": "CheckBox", - "defName": "复选框", - "id": "8AD07131-FDFB-4932-B4EF-20FDA92C6F04" - }, - { - "defKey": "RadioBox", - "defName": "单选框", - "id": "3A4C23CC-E68F-43F9-97C1-7307AA638D1F" - }, - { - "defKey": "Double", - "defName": "小数输入", - "id": "33B230A9-C60E-417D-8C35-EE9130EE3D1D" - }, - { - "defKey": "Integer", - "defName": "整数输入", - "id": "2AFFF582-7624-4CE1-A6A8-A88BB0E5EBBF" - }, - { - "defKey": "Money", - "defName": "金额输入", - "id": "5E216947-0E7F-4488-95EB-6F6A51F49D96" - }, - { - "defKey": "Date", - "defName": "日期输入", - "id": "97980CB0-93F7-477C-A744-31D81A76CF06" - }, - { - "defKey": "DataYearMonth", - "defName": "年月输入", - "id": "6B1ACA65-DD29-4886-BC28-4E032FA6A63B" - }, - { - "defKey": "Text", - "defName": "长文本输入", - "id": "FCBB76EC-4E91-4C9A-A24C-8C1BC98A8C4B" - }, - { - "defKey": "RichText", - "defName": "富文本输入", - "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" - } - ], - "menuWidth": "306px", - "headers": [ - { - "refKey": "defKey", - "hideInGraph": false - }, - { - "refKey": "defName", - "hideInGraph": false - }, - { - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "refKey": "notNull", - "hideInGraph": true - }, - { - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "refKey": "domain", - "hideInGraph": true - }, - { - "refKey": "type", - "hideInGraph": false - }, - { - "refKey": "len", - "hideInGraph": false - }, - { - "refKey": "scale", - "hideInGraph": false - }, - { - "refKey": "comment", - "hideInGraph": true - }, - { - "refKey": "refDict", - "hideInGraph": true - }, - { - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "refKey": "isStandard", - "hideInGraph": false - }, - { - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true - } - ] - }, - "entities": [ - { - "id": "373ED1A7-A39C-47F4-89AF-46992DD3CA83", - "defKey": "t_w_water_order", - "defName": "订单信息", - "comment": "", - "properties": {}, - "fields": [ - { - "rowNo": 1, - "defKey": "order_no", - "defName": "系统订单号", - "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "type": "varchar", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "varchar(32)", - "primaryKeyName": "√", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "BA550922-0749-41FB-B23D-6738BA5DE665" - }, - { - "rowNo": 2, - "defKey": "order_type", - "defName": "订单类型(type=1加价费订单 )", - "comment": "", - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "type": "int", - "len": "", - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "int", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "7F07DB81-F6C1-4391-B672-B9A519870619" - }, - { - "defKey": "ref_id", - "defName": "关联编号(缴费数据)", - "comment": "", - "type": "VARCHAR", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "", - "id": "F41FE343-C68D-461C-B0CF-53D7AD321957" - }, - { - "defKey": "prod_name", - "defName": "商品名称", - "comment": "", - "type": "NVARCHAR", - "len": 128, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "", - "id": "92D8161F-42EE-468B-84BD-4EC3F7211088" - }, - { - "rowNo": 3, - "defKey": "order_money", - "defName": "订单金额", - "comment": "", - "domain": "", - "type": "decimal", - "len": 12, - "scale": 2, - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "decimal(12,2)", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "FA153E93-8959-42A0-B98A-FF4320A82778" - }, - { - "rowNo": 4, - "defKey": "pay_money", - "defName": "实付金额", - "comment": "", - "domain": "", - "type": "decimal", - "len": 12, - "scale": 2, - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "decimal(12,2)", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "52F3B778-6F28-41FB-ADF8-8FA99CEF5617" - }, - { - "rowNo": 5, - "defKey": "refund_money", - "defName": "实退金额", - "comment": "", - "domain": "", - "type": "decimal", - "len": 12, - "scale": 2, - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "decimal(12,2)", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "82EA738A-9499-43FD-A173-09B9CA81885D" - }, - { - "rowNo": 6, - "defKey": "status", - "defName": "账单状态(1待支付,2已支付,3已取消,4已退款,5部分退款)", - "comment": "", - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "type": "int", - "len": "", - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "int", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "D7A34977-ED3D-47B4-9472-D4644E297580" - }, - { - "defKey": "pay_status", - "defName": "付款状态(0.已失败,1.未付款,2.已付款,3.不确定待查询,4.待轮询)", - "comment": "", - "type": "int", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "id": "8AB0F3E7-409D-49F0-90C8-2135A6A37F29" - }, - { - "defKey": "trade_id", - "defName": "建行交易流水号", - "comment": "", - "type": "VARCHAR", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "", - "id": "4E49B24A-3074-494E-B72A-40B7C0D4D857" - }, - { - "rowNo": 7, - "defKey": "platform_pay_no", - "defName": "支付平台流水号(wx/alipay)", - "comment": "", - "domain": "", - "type": "varchar", - "len": 64, - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "varchar(64)", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "B4044C3A-E17D-415C-BBAC-7A58A2140985" - }, - { - "rowNo": 8, - "defKey": "pay_time", - "defName": "支付完成时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "datetime", - "len": "", - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "datetime", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "497A89D1-ED7C-46D9-BE21-D938BCEAE58D" - }, - { - "rowNo": 9, - "defKey": "refund_time", - "defName": "退款完成时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "datetime", - "len": "", - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "datetime", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "CAEDF742-75BA-4F45-8BA1-18348557AECC" - }, - { - "rowNo": 10, - "defKey": "create_time", - "defName": "订单创建时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "datetime", - "len": "", - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "datetime", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "E9736BCA-55FA-42A2-AFA6-CAA5EC355901" - }, - { - "rowNo": 11, - "defKey": "remark", - "defName": "订单备注", - "comment": "", - "domain": "", - "type": "nvarchar", - "len": 32, - "scale": "", - "primaryKey": null, - "notNull": null, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "typeFullName": "nvarchar(32)", - "primaryKeyName": "", - "notNullName": "", - "autoIncrementName": "", - "refDict": "", - "id": "B1548CA2-84D2-4E64-AEA8-BA825F6E5AFF" - }, - { - "defKey": "receipt_money", - "defName": "平台实收金额", - "comment": "", - "type": "decimal", - "len": 12, - "scale": 2, - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "id": "4A752610-041F-4A72-8FBE-27137257757B" - }, - { - "defKey": "charge_money", - "defName": "手续费(实付减实收)", - "comment": "", - "type": "decimal", - "len": 12, - "scale": 2, - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "id": "864F6CE2-3491-47FE-A26D-2D522D235137" - }, - { - "defKey": "third_trade_no", - "defName": "第三方订单号(支付宝/微信)", - "comment": "", - "type": "varchar", - "len": 100, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "id": "06F2B2D8-F4C8-4E9C-B63B-C0DE404E9194" - }, - { - "defKey": "pay_channel", - "defName": "支付渠道(按支付方式查询详情)", - "comment": "", - "type": "varchar", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "id": "405632DF-3944-4756-BC6D-131754E43049" - }, - { - "defKey": "pay_channel_name", - "defName": "支付渠道名称", - "comment": "", - "type": "nvarchar", - "len": 64, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "id": "C5B92F02-496D-4BBB-94B8-788B9D32F20C" - }, - { - "defKey": "pay_way", - "defName": "付款方式(1.龙支付,2.微信,3.支付宝,4.银联)", - "comment": "", - "type": "int", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "id": "4A77CDA9-2090-4861-AF0D-083C8661A470" - }, - { - "defKey": "pay_way_name", - "defName": "付款类型名称", - "comment": "", - "type": "nvarchar", - "len": 64, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "id": "6F6946AC-6938-4766-AC3D-901C9D3911C3" - }, - { - "defKey": "pay_qr_code", - "defName": "被扫支付付款码(轮询查询结果时用)", - "comment": "", - "type": "varchar", - "len": 512, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "id": "86D9ABDA-C602-4ABB-AAFC-0F2C1CCF469E" - }, - { - "defKey": "error_code", - "defName": "错误码", - "comment": "", - "type": "varchar", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "id": "D0B091E6-22B0-4E0D-9B0C-255CB8CCF120" - }, - { - "defKey": "error_msg", - "defName": "失败消息", - "comment": "", - "type": "nvarchar", - "len": 128, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "id": "D31A28C0-5585-468C-8C94-ED37CCA635D9" - }, - { - "defKey": "open_id", - "defName": "客户识别号", - "comment": "", - "type": "varchar", - "len": 128, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "id": "15F7A05D-CAF2-478B-A1CE-854D90293921" - }, - { - "defKey": "sub_open_id", - "defName": "用户子标识(微信)", - "comment": "", - "type": "varchar", - "len": 128, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": true, - "id": "8ED56900-51B3-4D3E-82E7-5F5F7E89F5DE" - } - ], - "indexes": [ - { - "defKey": "Key_1", - "unique": false, - "defName": "Key_1", - "comment": "", - "fields": [ - { - "ascOrDesc": null, - "id": "27E2B60B-000A-43B5-9921-13D27EF2CCCE", - "fieldDefKey": "BA550922-0749-41FB-B23D-6738BA5DE665" - } - ], - "id": "BFC0EC49-F132-4B03-8D91-937A34B05227" - } - ], - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "freeze": true, - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "defName", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "notNull", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "domain", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "type", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "len", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "scale", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "comment", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "refDict", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "isStandard", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true, - "freeze": false - } - ], - "correlations": [] - }, - { - "id": "A741CFD3-2ED1-4994-997E-A5A0E2FAE0F0", - "defKey": "im_user", - "defName": "用户表", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "freeze": true, - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "defName", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "notNull", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "domain", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "type", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "len", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "scale", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "comment", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "refDict", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "isStandard", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true, - "freeze": false - } - ], - "fields": [ - { - "defKey": "id", - "defName": "id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "F06C0F3B-A0F1-47EC-80E5-F57ABD41984F" - }, - { - "defKey": "status", - "defName": "状态:0删除,1.正常,2.禁用", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "id": "ED141994-B3F8-42C8-96AE-91244E115A35" - }, - { - "defKey": "account", - "defName": "登录账号", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", - "id": "BB5539DD-5A96-4729-AF84-205D99479F51" - }, - { - "defKey": "nickname", - "defName": "用户昵称", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", - "id": "85C805F2-4AEC-4AAE-B607-415D9B4544A2" - }, - { - "defKey": "password", - "defName": "密码", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", - "id": "E5070C9C-9C16-470A-98AE-82B640B1324C" - }, - { - "defKey": "phone", - "defName": "手机号", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "CC17D845-14BD-443E-B780-AC2C9FF59306", - "id": "02FB8316-D443-4D08-A65C-4350B7535925" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "id": "11E5C3FA-B5B8-4E6C-A120-78385F09D7C1" - }, - { - "defKey": "last_login_time", - "defName": "最后登录时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "id": "A33DF9A6-5122-4CB0-95BE-57D88B09DD5C" - }, - { - "defKey": "last_active_time", - "defName": "最后活跃时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "id": "AE4C5769-E1BE-4DE8-951E-D045A30187F9" - } - ], - "correlations": [], - "indexes": [ - { - "defKey": "idx_account_status", - "defName": null, - "unique": false, - "comment": "", - "fields": [ - { - "fieldDefKey": "BB5539DD-5A96-4729-AF84-205D99479F51", - "ascOrDesc": "A", - "id": "C8BEC04D-D87C-45DE-97C5-D03C3B7A2EB9" - }, - { - "fieldDefKey": "ED141994-B3F8-42C8-96AE-91244E115A35", - "ascOrDesc": "A", - "id": "FF7AA195-A640-4E60-B12D-6DDDD562C758" - } - ], - "id": "359FE803-740A-4200-A215-525BED9E9761" - } - ] - }, - { - "id": "2D7374DF-CFF5-46FF-BAB1-CBD3ED793F6D", - "defKey": "im_friend", - "defName": "好友关系表", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "freeze": true, - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "defName", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "notNull", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "domain", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "type", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "len", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "scale", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "comment", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "refDict", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "isStandard", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true, - "freeze": false - } - ], - "fields": [ - { - "defKey": "id", - "defName": "", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" - }, - { - "defKey": "uid", - "defName": "用户id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "9E46DCFD-99F2-4086-B8CB-DE195BA93ECD" - }, - { - "defKey": "fid", - "defName": "好友id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "E8A2D3BB-2D91-42C5-9403-FE6B103C2712" - }, - { - "defKey": "status", - "defName": "状态:0删除,1正常,2临时好友(群单聊)", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "09839FE6-4295-489C-9A58-7B2FF7817DC5", - "id": "A38D6DB7-AAAB-470B-93B4-1370C52519FB" - }, - { - "defKey": "unread_num", - "defName": "群未读消息数量", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "refDict": "", - "extProps": {}, - "id": "401FEB84-613C-4567-8937-84ACA5C0DCB7" - }, - { - "defKey": "unread_offset_id", - "defName": "群未读消息id偏移量(大于等于该id的都未读)", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "refDict": "", - "extProps": {}, - "id": "10FF9F4A-5729-4F07-B4D3-F7FEEEAAAC64" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "id": "90EFD940-FD7F-4775-A274-4B0EE181BEE7" - } - ], - "correlations": [], - "indexes": [] - }, - { - "id": "E79C9C4C-FFC3-44BB-BD98-4F44F528B4B8", - "defKey": "im_segment_id", - "defName": "分段id", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "freeze": true, - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "defName", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "notNull", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "domain", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "type", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "len", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "scale", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "comment", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "refDict", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "isStandard", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true, - "freeze": false - } - ], - "fields": [ - { - "defKey": "biz_tag", - "defName": "业务标签", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", - "id": "F6D445F1-ADD3-4A28-AFDA-2606A912C007" - }, - { - "defKey": "current_id", - "defName": "当前id值", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "3E9E2CBB-B458-49D5-B6DC-454A11FB9633" - }, - { - "defKey": "init_step", - "defName": "业务标签初始步长", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "38C65486-2A4E-4862-9875-EFE113FFD627" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "id": "87279682-D6B5-4BA0-9BE5-03FC436313C9" - }, - { - "defKey": "update_time", - "defName": "更新时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "id": "1F373AF6-4C60-4AC4-B75F-604B91AEC0C6" - }, - { - "defKey": "version", - "defName": "版本号", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "D376659D-0FFA-4D1A-AA3C-0C5CBA66B41B" - } - ], - "correlations": [], - "indexes": [] - }, - { - "id": "A843E8FC-C8E8-4F0A-8EB0-C5C104BE241F", - "defKey": "im_segment_fragment", - "defName": "分段id碎片id段(id端回收)", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "freeze": true, - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "defName", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "notNull", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "domain", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "type", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "len", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "scale", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "comment", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "refDict", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "freeze": false, - "refKey": "isStandard", - "hideInGraph": false - }, - { - "freeze": false, - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true, - "freeze": false - } - ], - "fields": [ - { - "defKey": "id", - "defName": "主键id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": true, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "32D9CFBB-3E32-4614-B576-E0E062E8FBF6" - }, - { - "defKey": "biz_tag", - "defName": "业务标签", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6", - "id": "031DE904-D768-4F8B-958C-B97213421A46" - }, - { - "defKey": "min_id", - "defName": "id段最小值", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "BF29BB31-2AA3-4CF3-BD29-304DA6F60F97" - }, - { - "defKey": "end_id", - "defName": "id段最大值", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "27254611-5E86-4EAA-BADA-AE78CAD14528" - }, - { - "defKey": "begin_id", - "defName": "id段当前值", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "BEBCA2FF-01B5-4834-8218-7F7051250C3D" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", - "id": "4989C582-86B0-4011-A3D7-A2C43FFC3F76" - }, - { - "defKey": "update_time", - "defName": "更新时间", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "72DD10F8-60AE-4F2A-89E1-D69C51B30849", - "id": "9DC77CD9-4006-42B2-9F63-13B309BC7BA1" - }, - { - "defKey": "version", - "defName": "版本号", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "C83AAC89-59CB-49E9-8C8F-2F5796BF65FE" - } - ], - "correlations": [], - "indexes": [] - }, - { - "id": "853E9034-1796-44AD-9AE8-18434821ECAC", - "env": { - "base": { - "nameSpace": "", - "codeRoot": "" - } - }, - "defKey": "im_message", - "defName": "聊天消息", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "refKey": "defKey", - "hideInGraph": false - }, - { - "refKey": "defName", - "hideInGraph": false - }, - { - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "refKey": "notNull", - "hideInGraph": true - }, - { - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "refKey": "domain", - "hideInGraph": true - }, - { - "refKey": "type", - "hideInGraph": false - }, - { - "refKey": "len", - "hideInGraph": false - }, - { - "refKey": "scale", - "hideInGraph": false - }, - { - "refKey": "comment", - "hideInGraph": true - }, - { - "refKey": "refDict", - "hideInGraph": true - }, - { - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "refKey": "isStandard", - "hideInGraph": false - }, - { - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true - } - ], - "fields": [ - { - "defKey": "id", - "defName": "id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "refDict": "", - "uiHint": "", - "id": "5F41F42F-AC11-49D2-A266-A060D98F2288" - }, - { - "defKey": "friend_id", - "defName": "好友关系id(分片)", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "1041E216-E990-47E6-9235-14C3DF7190DD" - }, - { - "defKey": "sender", - "defName": "发送人id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "3D1C2864-026A-4C9D-A655-1208B4A4AAF5" - }, - { - "defKey": "receiver", - "defName": "接受者id", - "comment": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "C0C455D3-95F9-46D4-836C-C52F426D16EC" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "305FC7FE-4303-4363-8FA9-58344D3786DE" - }, - { - "defKey": "content", - "defName": "消息内容", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "86D1DF8C-CA19-44F2-9F72-14BE303DD752", - "id": "CFAD1896-0DCE-4882-B78D-48EE72A009D3" - } - ], - "correlations": [], - "indexes": [] - }, - { - "id": "B1ED08AE-B919-4FED-B29D-B55ED6AC5E8B", - "env": { - "base": { - "nameSpace": "", - "codeRoot": "" - } - }, - "defKey": "im_group", - "defName": "群聊", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "refKey": "defKey", - "hideInGraph": false - }, - { - "refKey": "defName", - "hideInGraph": false - }, - { - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "refKey": "notNull", - "hideInGraph": true - }, - { - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "refKey": "domain", - "hideInGraph": true - }, - { - "refKey": "type", - "hideInGraph": false - }, - { - "refKey": "len", - "hideInGraph": false - }, - { - "refKey": "scale", - "hideInGraph": false - }, - { - "refKey": "comment", - "hideInGraph": true - }, - { - "refKey": "refDict", - "hideInGraph": true - }, - { - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "refKey": "isStandard", - "hideInGraph": false - }, - { - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true - } - ], - "fields": [ - { - "defKey": "id", - "defName": "群聊id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "refDict": "", - "uiHint": "", - "id": "2C9A9472-C178-4CB2-A106-854E4A34EB33" - }, - { - "defKey": "master_uid", - "defName": "群主id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "41EA492A-EF92-425A-A5D3-DC68EB912E4C" - }, - { - "defKey": "group_name", - "defName": "群聊名称", - "comment": "", - "domain": "", - "type": "VARCHAR", - "len": 128, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "170A4BD4-E0A1-4096-981D-93C0A7E781D2" - }, - { - "defKey": "user_limit", - "defName": "群聊人数限制", - "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "type": "", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "6641EA6E-E954-4891-B53B-C835DEA73658" - }, - { - "defKey": "user_num", - "defName": "当前群聊人数", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "8A5245A6-B7FE-4E9F-8DE3-A59F233395FD" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", - "type": "", - "len": 32, - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "0B211C29-062B-4127-9F74-FA955C1A033F" - }, - { - "defKey": "update_time", - "defName": "更新时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "3EB0D741-1686-4F63-AD33-0BA8AF31ED7A" - } - ], - "correlations": [], - "indexes": [] - }, - { - "id": "88057B50-B0B5-4A2D-B3D3-E60638224625", - "env": { - "base": { - "nameSpace": "", - "codeRoot": "" - } - }, - "defKey": "im_group_user", - "defName": "群聊用户列表", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "refKey": "defKey", - "hideInGraph": false - }, - { - "refKey": "defName", - "hideInGraph": false - }, - { - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "refKey": "notNull", - "hideInGraph": true - }, - { - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "refKey": "domain", - "hideInGraph": true - }, - { - "refKey": "type", - "hideInGraph": false - }, - { - "refKey": "len", - "hideInGraph": false - }, - { - "refKey": "scale", - "hideInGraph": false - }, - { - "refKey": "comment", - "hideInGraph": true - }, - { - "refKey": "refDict", - "hideInGraph": true - }, - { - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "refKey": "isStandard", - "hideInGraph": false - }, - { - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true - } - ], - "fields": [ - { - "defKey": "id", - "defName": "id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "refDict": "", - "uiHint": "", - "id": "5F41F42F-AC11-49D2-A266-A060D98F2288" - }, - { - "defKey": "group_id", - "defName": "群聊id", - "comment": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "506450D7-9074-4078-9D42-5F9186672193" - }, - { - "defKey": "uid", - "defName": "用户id", - "comment": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "C0C455D3-95F9-46D4-836C-C52F426D16EC" - }, - { - "defKey": "unread_num", - "defName": "群未读消息数量", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", - "id": "0B57A795-8C4D-48AA-B987-A7690B5DB6B7" - }, - { - "defKey": "unread_offset_id", - "defName": "群未读消息id偏移量(大于等于该id的都未读)", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "EF408842-EAAB-4289-895A-29BFA8781BC2" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "305FC7FE-4303-4363-8FA9-58344D3786DE" - } - ], - "correlations": [], - "indexes": [] - }, - { - "id": "D1CEE40B-58CE-49B5-A460-139C263B1698", - "env": { - "base": { - "nameSpace": "", - "codeRoot": "" - } - }, - "defKey": "im_group_message", - "defName": "群聊天消息", - "comment": "", - "properties": {}, - "nameTemplate": "{defKey}[{defName}]", - "headers": [ - { - "refKey": "hideInGraph", - "hideInGraph": true - }, - { - "refKey": "defKey", - "hideInGraph": false - }, - { - "refKey": "defName", - "hideInGraph": false - }, - { - "refKey": "primaryKey", - "hideInGraph": false - }, - { - "refKey": "notNull", - "hideInGraph": true - }, - { - "refKey": "autoIncrement", - "hideInGraph": true - }, - { - "refKey": "domain", - "hideInGraph": true - }, - { - "refKey": "type", - "hideInGraph": false - }, - { - "refKey": "len", - "hideInGraph": false - }, - { - "refKey": "scale", - "hideInGraph": false - }, - { - "refKey": "comment", - "hideInGraph": true - }, - { - "refKey": "refDict", - "hideInGraph": true - }, - { - "refKey": "defaultValue", - "hideInGraph": true - }, - { - "refKey": "isStandard", - "hideInGraph": false - }, - { - "refKey": "uiHint", - "hideInGraph": true - }, - { - "refKey": "extProps", - "hideInGraph": true - } - ], - "fields": [ - { - "defKey": "id", - "defName": "id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": true, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "refDict": "", - "uiHint": "", - "id": "5F41F42F-AC11-49D2-A266-A060D98F2288" - }, - { - "defKey": "group_id", - "defName": "群聊id", - "comment": "", - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "506450D7-9074-4078-9D42-5F9186672193" - }, - { - "defKey": "sender", - "defName": "发送者id", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": true, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "extProps": {}, - "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", - "id": "3D1C2864-026A-4C9D-A655-1208B4A4AAF5" - }, - { - "defKey": "create_time", - "defName": "创建时间", - "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "refDict": "", - "uiHint": "", - "id": "305FC7FE-4303-4363-8FA9-58344D3786DE" - }, - { - "defKey": "content", - "defName": "消息内容", - "comment": "", - "type": "", - "len": "", - "scale": "", - "primaryKey": false, - "notNull": false, - "autoIncrement": false, - "defaultValue": "", - "hideInGraph": false, - "domain": "86D1DF8C-CA19-44F2-9F72-14BE303DD752", - "refDict": "", - "extProps": {}, - "id": "83D60E98-7A6A-4622-8F64-7CCC9C8DFB7B" - } - ], - "correlations": [], - "indexes": [] - } - ], - "views": [], - "dicts": [], - "viewGroups": [], - "dataTypeMapping": { - "referURL": "", - "mappings": [ - { - "defKey": "string", - "defName": "字串", - "id": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "VARCHAR", - "7B3BDD41-C634-4E65-934C-2D054A42299D": "VARCHAR2", - "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARCHAR", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "VARCHAR", - "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "VARCHAR", - "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "VARCHAR2", - "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "VARCHAR", - "831AFF3D-F477-4E06-819B-3C1739E321C8": "VARCHAR", - "797D129F-7619-4FF3-8595-DB942D773571": "STRING", - "1E385761-67B3-4B80-A194-E302E590E54E": "String", - "F4F01E06-3181-4CCC-A561-6111A936862C": "string", - "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" - }, - { - "defKey": "double", - "defName": "小数", - "id": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DECIMAL", - "7B3BDD41-C634-4E65-934C-2D054A42299D": "DECIMAL", - "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DECIMAL", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "NUMERIC", - "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DECIMAL", - "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DECIMAL", - "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "NUMERIC", - "831AFF3D-F477-4E06-819B-3C1739E321C8": "NUMERIC", - "797D129F-7619-4FF3-8595-DB942D773571": "DOUBLE", - "1E385761-67B3-4B80-A194-E302E590E54E": "Double", - "F4F01E06-3181-4CCC-A561-6111A936862C": "decimal", - "7565A719-3C24-4064-8FEE-DC55725E9569": "REAL" - }, - { - "defKey": "int", - "defName": "整数", - "id": "E522C027-26AA-45E3-9861-A78B6C658EED", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "INT", - "7B3BDD41-C634-4E65-934C-2D054A42299D": "INT", - "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "INT", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "INTEGER", - "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "INT", - "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "INTEGER", - "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "INTEGER", - "831AFF3D-F477-4E06-819B-3C1739E321C8": "INT4", - "797D129F-7619-4FF3-8595-DB942D773571": "INT", - "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", - "F4F01E06-3181-4CCC-A561-6111A936862C": "int", - "7565A719-3C24-4064-8FEE-DC55725E9569": "INTEGER" - }, - { - "defKey": "date", - "defName": "日期", - "id": "79417FE2-7972-4A82-98C7-2EAB557884A5", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "DATETIME", - "7B3BDD41-C634-4E65-934C-2D054A42299D": "DATE", - "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "DATETIME", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "DATE", - "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "DATE", - "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "DATE", - "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "DATE", - "831AFF3D-F477-4E06-819B-3C1739E321C8": "DATE", - "797D129F-7619-4FF3-8595-DB942D773571": "DATETIME", - "1E385761-67B3-4B80-A194-E302E590E54E": "Date", - "F4F01E06-3181-4CCC-A561-6111A936862C": "DateTime", - "7565A719-3C24-4064-8FEE-DC55725E9569": "NUMERIC" - }, - { - "defKey": "bytes", - "defName": "二进制", - "id": "6B786A15-5962-48EC-BAC5-3D6E9882C985", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "BLOB", - "7B3BDD41-C634-4E65-934C-2D054A42299D": "BLOB", - "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "VARBINARY", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "BYTEA", - "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "BLOB", - "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "BLOB", - "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "BYTEA", - "831AFF3D-F477-4E06-819B-3C1739E321C8": "BYTEA", - "797D129F-7619-4FF3-8595-DB942D773571": "BINARY", - "1E385761-67B3-4B80-A194-E302E590E54E": "byte[]", - "F4F01E06-3181-4CCC-A561-6111A936862C": "byte[]", - "7565A719-3C24-4064-8FEE-DC55725E9569": "NONE" - }, - { - "defKey": "largeText", - "defName": "大文本", - "id": "852F9202-C5CB-4A9A-9064-26304FF36CF2", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "TEXT", - "7B3BDD41-C634-4E65-934C-2D054A42299D": "CLOB", - "89CD9C73-4D3F-4863-8386-B42B1FBDEA15": "TEXT", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "TEXT", - "C21E8B1D-CFCD-4D19-A5F7-45F07240AD78": "CLOB", - "E57CD9FE-D44B-4673-947E-E5E3967E5EAB": "CLOB", - "E2356C99-AEBA-42D1-AB23-8041A62AEC16": "TEXT", - "831AFF3D-F477-4E06-819B-3C1739E321C8": "TEXT", - "797D129F-7619-4FF3-8595-DB942D773571": "STRING", - "1E385761-67B3-4B80-A194-E302E590E54E": "String", - "F4F01E06-3181-4CCC-A561-6111A936862C": "string", - "7565A719-3C24-4064-8FEE-DC55725E9569": "TEXT" - }, - { - "defKey": "bigint", - "defName": "大整数", - "id": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "bigint", - "1E385761-67B3-4B80-A194-E302E590E54E": "Long", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "bigint" - }, - { - "defKey": "tinyint", - "defName": "小整数", - "id": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "tinyint", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "tinyint", - "A4E23CB7-BB01-4BD1-9F71-F73F3E15A542": "", - "797A1496-D649-4261-89B4-544132EC3F36": "Integer", - "1E385761-67B3-4B80-A194-E302E590E54E": "Integer", - "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "Integer", - "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "Integer", - "F3AC2415-E86B-40C6-9FEB-F4B7937D2C30": "", - "B91D99E0-9B7C-416C-8737-B760957DAF09": "int32" - }, - { - "defKey": "MEDIUMTEXT", - "defName": "中型文本", - "id": "0FE6297E-AA29-4784-8C6C-05E28939BFDB", - "8FE7C65E-40EB-41B6-B60E-79063AFF6273": "MEDIUMTEXT", - "7A6E0A3E-F850-47CF-B50A-3E4E905E5F3A": "", - "1E385761-67B3-4B80-A194-E302E590E54E": "String", - "797A1496-D649-4261-89B4-544132EC3F36": "String", - "895CFD1D-4273-4D32-A2C4-CAC70200AB5B": "String", - "A2EE7B4A-CE62-4290-B00C-B26C1BF18073": "String" - } - ] - }, - "domains": [ - { - "defKey": "DefaultString", - "defName": "默认字串", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": 255, - "scale": "", - "uiHint": "", - "id": "72DD10F8-60AE-4F2A-89E1-D69C51B30849" - }, - { - "defKey": "IdOrKey", - "defName": "主键标识", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": 32, - "scale": "", - "uiHint": "", - "id": "4159ACB8-2488-4350-9C3B-797336F7246E" - }, - { - "defKey": "Name", - "defName": "名称", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": 90, - "scale": "", - "uiHint": "", - "id": "0EE54036-962D-4166-A613-16F67228D05C" - }, - { - "defKey": "Int", - "defName": "整数", - "applyFor": "E522C027-26AA-45E3-9861-A78B6C658EED", - "len": "", - "scale": "", - "uiHint": "", - "id": "CBE2B93C-DD97-4950-86A8-B583971583C8" - }, - { - "defKey": "Double", - "defName": "小数", - "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", - "len": 24, - "scale": 6, - "uiHint": "", - "id": "F1708A7E-8DDE-47BA-94CC-489838C22267" - }, - { - "defKey": "Money", - "defName": "金额", - "applyFor": "0DA23D3F-6357-41DB-BD13-64472B3B2EED", - "len": 24, - "scale": 6, - "uiHint": "", - "id": "B31176E9-883C-4F95-ACB2-3C5BD307473C" - }, - { - "defKey": "DateTime", - "defName": "日期时间", - "applyFor": "79417FE2-7972-4A82-98C7-2EAB557884A5", - "len": "", - "scale": "", - "uiHint": "", - "id": "4E3ADE61-41F4-4E74-8068-C1E543F9095C" - }, - { - "defKey": "YesNo", - "defName": "是否", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": "1", - "scale": "", - "uiHint": "", - "id": "8996EFF3-7388-4F6B-932F-4328F6B8715F" - }, - { - "defKey": "Dict", - "defName": "数据字典", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": "32", - "scale": "", - "uiHint": "", - "id": "498C9D3B-26B1-4914-9E4A-616B5D761BDE" - }, - { - "defKey": "DescText", - "defName": "描述文本", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": "900", - "scale": "", - "uiHint": "", - "id": "8FF076E7-81A9-4500-A0EA-870639178F2D" - }, - { - "defKey": "bigint", - "defName": "大整数", - "applyFor": "4CAF2CA7-EEA7-42C2-8FF5-746D6F03D923", - "len": "", - "scale": "", - "uiHint": "", - "id": "1E5537DF-B204-49BC-AC1D-457BC6DEE707" - }, - { - "defKey": "string128", - "defName": "字串128", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": 128, - "scale": "", - "uiHint": "", - "id": "BB0241B4-A9DB-46CB-AB7D-EA6DDA6A02D6" - }, - { - "defKey": "string32", - "defName": "字串32", - "applyFor": "4D31EB2E-C825-46FA-BDB3-186AA546EF7F", - "len": 32, - "scale": "", - "uiHint": "", - "id": "CC17D845-14BD-443E-B780-AC2C9FF59306" - }, - { - "defKey": "tinyint", - "defName": "小整数", - "applyFor": "E5017FA4-F0CA-4CE5-B7E9-F59E8BD8E7BD", - "len": "", - "scale": "", - "uiHint": "", - "id": "09839FE6-4295-489C-9A58-7B2FF7817DC5" - }, - { - "defKey": "MEDIUMTEXT", - "defName": "中型文本", - "applyFor": "0FE6297E-AA29-4784-8C6C-05E28939BFDB", - "len": "", - "scale": "", - "uiHint": "", - "id": "86D1DF8C-CA19-44F2-9F72-14BE303DD752" - } - ], - "diagrams": [ - { - "defKey": "order_relation", - "defName": "订单结构", - "relationType": "field", - "canvasData": { - "cells": [ - { - "id": "5b29c047-cacc-4c24-a4b3-c1578735c26f", - "shape": "table", - "position": { - "x": 40, - "y": -287 - }, - "count": 0, - "originKey": "373ED1A7-A39C-47F4-89AF-46992DD3CA83" - } - ] - }, - "id": "2A859C63-E1E5-4778-B413-19FFADDB631B" - }, - { - "defKey": "chat_message", - "defName": "聊天消息", - "relationType": "field", - "canvasData": { - "cells": [ - { - "id": "ca65430f-e73f-43f7-b106-9329f975e994", - "shape": "erdRelation", - "source": { - "cell": "a5ca0b33-d998-40d6-ab01-ea1ee096addc", - "port": "506450D7-9074-4078-9D42-5F9186672193%in" - }, - "target": { - "cell": "8ef91289-4bfd-4491-a08b-a912878ef465", - "port": "2C9A9472-C178-4CB2-A106-854E4A34EB33%out" - }, - "relation": "1:n", - "fillColor": "#ACDAFC" - }, - { - "id": "4f29e8a8-3d8f-4de6-a7c9-d116897c98d2", - "shape": "erdRelation", - "source": { - "cell": "b152a44b-e977-45db-a68c-e23a45cd76cd", - "port": "506450D7-9074-4078-9D42-5F9186672193%in" - }, - "target": { - "cell": "8ef91289-4bfd-4491-a08b-a912878ef465", - "port": "2C9A9472-C178-4CB2-A106-854E4A34EB33%out" - }, - "relation": "1:n", - "fillColor": "#ACDAFC" - }, - { - "id": "a8d546cb-7149-4a72-80a0-f626878ecc16", - "shape": "erdRelation", - "source": { - "cell": "b152a44b-e977-45db-a68c-e23a45cd76cd", - "port": "EF408842-EAAB-4289-895A-29BFA8781BC2%out" - }, - "target": { - "cell": "a5ca0b33-d998-40d6-ab01-ea1ee096addc", - "port": "5F41F42F-AC11-49D2-A266-A060D98F2288%out" - }, - "relation": "1:n", - "fillColor": "#ACDAFC" - }, - { - "id": "8ef91289-4bfd-4491-a08b-a912878ef465", - "shape": "table", - "position": { - "x": -160, - "y": -170 - }, - "count": 0, - "originKey": "B1ED08AE-B919-4FED-B29D-B55ED6AC5E8B" - }, - { - "id": "b152a44b-e977-45db-a68c-e23a45cd76cd", - "shape": "table", - "position": { - "x": 250, - "y": 10 - }, - "count": 0, - "originKey": "88057B50-B0B5-4A2D-B3D3-E60638224625" - }, - { - "id": "a5ca0b33-d998-40d6-ab01-ea1ee096addc", - "shape": "table", - "position": { - "x": 250, - "y": -160 - }, - "count": 0, - "originKey": "D1CEE40B-58CE-49B5-A460-139C263B1698" - }, - { - "id": "21de8763-a760-4917-bd30-0633730cc0ab", - "shape": "table", - "position": { - "x": 250, - "y": -382 - }, - "count": 0, - "originKey": "2D7374DF-CFF5-46FF-BAB1-CBD3ED793F6D" - }, - { - "id": "db0d26c4-22cb-4893-b663-120d4768c837", - "shape": "table", - "position": { - "x": -150.5, - "y": -382 - }, - "count": 0, - "originKey": "853E9034-1796-44AD-9AE8-18434821ECAC" - } - ] - }, - "id": "1D535DDE-CD37-4D14-95C4-05FD192F424A" - } - ], - "standardFields": [] -} \ No newline at end of file diff --git a/doc/db/so-im.chnr.json b/doc/db/so-im.chnr.json index 0682f16..4c6be1a 100644 --- a/doc/db/so-im.chnr.json +++ b/doc/db/so-im.chnr.json @@ -4,7 +4,7 @@ "avatar": "", "version": "4.1.1", "createdTime": "2022-3-7 15:11:08", - "updatedTime": "2022-5-28 20:52:53", + "updatedTime": "2022-6-3 20:41:00", "profile": { "default": { "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", @@ -398,7 +398,7 @@ "id": "9965DCFB-54BE-4C5A-9518-DF09D4E58140" } ], - "menuWidth": "306px", + "menuWidth": "279px", "headers": [ { "refKey": "defKey", @@ -1401,6 +1401,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "4D5EBBEB-09E6-4D73-8741-5FD759597C9D" }, + { + "defKey": "relation_id", + "defName": "好友关系id(消息存储路由分片)", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", + "id": "BFA286E3-31EE-4563-B4C4-1B32C8EABB9A" + }, { "defKey": "uid", "defName": "用户id", @@ -2210,7 +2227,7 @@ "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2219,6 +2236,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "41EA492A-EF92-425A-A5D3-DC68EB912E4C" }, + { + "defKey": "status", + "defName": "状态:0删除,1.正常,3禁用,4.解散", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": true, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", + "id": "EBB05A85-0A0B-4F40-B6F4-0DC12D12488F" + }, { "defKey": "group_name", "defName": "群聊名称", @@ -2228,7 +2262,7 @@ "len": 128, "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2240,12 +2274,12 @@ "defKey": "user_limit", "defName": "群聊人数限制", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2257,12 +2291,12 @@ "defKey": "user_num", "defName": "当前群聊人数", "comment": "", - "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "domain": "CBE2B93C-DD97-4950-86A8-B583971583C8", "type": "", "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2274,12 +2308,12 @@ "defKey": "create_time", "defName": "创建时间", "comment": "", - "domain": "4159ACB8-2488-4350-9C3B-797336F7246E", + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", "type": "", - "len": 32, + "len": "", "scale": "", "primaryKey": false, - "notNull": false, + "notNull": true, "autoIncrement": false, "defaultValue": "", "hideInGraph": false, @@ -2473,6 +2507,23 @@ "domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707", "id": "EF408842-EAAB-4289-895A-29BFA8781BC2" }, + { + "defKey": "last_active", + "defName": "最后活跃时间", + "comment": "", + "type": "", + "len": "", + "scale": "", + "primaryKey": false, + "notNull": false, + "autoIncrement": false, + "defaultValue": "", + "hideInGraph": false, + "refDict": "", + "extProps": {}, + "domain": "4E3ADE61-41F4-4E74-8068-C1E543F9095C", + "id": "4B886C08-68C9-4386-AD4F-37169054A3C4" + }, { "defKey": "create_time", "defName": "创建时间", diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java index 0fad400..b205e44 100644 --- a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdDispatcher.java @@ -6,7 +6,7 @@ import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.handler.CmdHandler; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.common.util.StringUtil; /** @@ -45,7 +45,7 @@ public class CmdDispatcher { } CmdEnum cmdEnum = CmdEnum.getValue(cmd); if (cmdEnum == null) { - Logger.error("未知指令: {}", cmd); + Console.error("未知指令: {}", cmd); return; } Class> handlerClass = cmdEnum.getHandlerClass(); @@ -65,7 +65,7 @@ public class CmdDispatcher { } private void parseParameterExceptionMessage(String message) { - Logger.error(message); + Console.error(message); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java index 9adaf6c..fd33653 100644 --- a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdEnum.java @@ -1,5 +1,6 @@ package net.sopod.soim.client.cmd; +import net.sopod.soim.client.cmd.args.ArgsGroup; import net.sopod.soim.client.cmd.handler.CmdHandler; import net.sopod.soim.client.handler.cmd.*; @@ -21,7 +22,7 @@ public enum CmdEnum { users(UsersHandler.class), /** 用户分组列表 */ - groups, + group(GroupHandler.class), /** 用户搜索 */ search(SearchHandler.class), diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java index 8083023..a55d302 100644 --- a/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/CmdStarter.java @@ -2,7 +2,7 @@ package net.sopod.soim.client.cmd; import com.google.inject.Inject; import com.google.inject.Singleton; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import java.util.Scanner; @@ -28,20 +28,20 @@ public class CmdStarter { public void start() { this.close(); this.scanner = new Scanner(System.in); - Logger.pre("【client】: "); + Console.pre("【client】: "); while(this.scanner.hasNextLine()) { String cmd = this.scanner.nextLine(); try { this.cmdDispatcher.dispatchCmd(cmd); } catch (Exception e) { - Logger.error("cmd error: ", e.getMessage()); + Console.error("cmd error: ", e.getMessage()); } // 退出 if (CmdEnum.exit.name().equals(cmd.split("[ \t]+")[0])) { - Logger.info("bye bye"); + Console.info("bye bye"); break; } - Logger.pre("【client】: "); + Console.pre("【client】: "); } } @@ -52,7 +52,7 @@ public class CmdStarter { } public static void printPre() { - Logger.pre("【client】: "); + Console.pre("【client】: "); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsGroup.java b/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsGroup.java new file mode 100644 index 0000000..120f600 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsGroup.java @@ -0,0 +1,32 @@ +package net.sopod.soim.client.cmd.args; + +import com.beust.jcommander.Parameter; +import lombok.Data; + +import java.util.List; + +/** + * ArgsCreateGroup + * + * @author tmy + * @date 2022-06-05 09:32 + */ +@Data +public class ArgsGroup { + +// @Parameter +// private List parameters; + + @Parameter(names = {"create"}, required = false, description = "群聊名称") + private String groupNameCreate; + + @Parameter(names = {"search"}, required = false, description = "群聊名称") + private String groupNameSearch; + + @Parameter(names = {"join"}, required = false, description = "群聊id") + private Integer joinGroupId; + + @Parameter(names = {"users"}, required = false, description = "群聊id") + private Integer usersGroupId; + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java index 84c5e70..bfe36e3 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java @@ -4,9 +4,12 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.args.ArgsAddFriend; import net.sopod.soim.client.cmd.handler.CmdHandler; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.data.msg.user.Friend; +import java.util.concurrent.CompletableFuture; + /** * AddFriendHandler * @@ -29,7 +32,13 @@ public class AddFriendHandler implements CmdHandler { Friend.ReqAddFriend req = Friend.ReqAddFriend.newBuilder() .setFid(args.getFriendId()) .build(); - soImSession.send(req); + CompletableFuture future = soImSession.send(req); + Friend.ResAddFriend res = future.join(); + if (res.getSuccess()) { + Console.info("添加好友成功"); + } else { + Console.error("添加失败:{}", res.getMsg()); + } } } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/FriendsHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/FriendsHandler.java index 8f3d11b..2a449b4 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/FriendsHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/FriendsHandler.java @@ -3,8 +3,14 @@ package net.sopod.soim.client.handler.cmd; import com.google.inject.Inject; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.handler.NonArgsHandler; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.data.msg.user.Friend; +import net.sopod.soim.data.msg.user.UserMsg; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; /** * FriendsHandler @@ -21,7 +27,14 @@ public class FriendsHandler extends NonArgsHandler { @Override public void handle() { Friend.ReqFriendList req = Friend.ReqFriendList.newBuilder().build(); - soImSession.send(req); + CompletableFuture future = soImSession.send(req); + + Friend.ResFriendList res = future.join(); + List friendsList = res.getFriendsList(); + List userLines = friendsList.stream() + .map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname() + "|" + u.getOnline()) + .collect(Collectors.toList()); + Console.logList("好友列表", userLines); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/GroupHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/GroupHandler.java new file mode 100644 index 0000000..90e62a3 --- /dev/null +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/GroupHandler.java @@ -0,0 +1,123 @@ +package net.sopod.soim.client.handler.cmd; + +import com.google.inject.Inject; +import com.google.inject.Singleton; +import net.sopod.soim.client.cmd.args.ArgsGroup; +import net.sopod.soim.client.cmd.handler.CmdHandler; +import net.sopod.soim.client.logger.Console; +import net.sopod.soim.client.session.SoImSession; +import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.common.util.StringUtil; +import net.sopod.soim.data.msg.common.Res; +import net.sopod.soim.data.msg.group.Group; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * GroupHandler + * + * @author tmy + * @date 2022-06-05 09:35 + */ +@Singleton +public class GroupHandler implements CmdHandler { + + @Inject + private SoImSession soImSession; + + @Override + public ArgsGroup newArgsInstance() { + return new ArgsGroup(); + } + + @Override + public void handleArgs(ArgsGroup args) { + if (args.getGroupNameCreate() != null) { + this.handleGroupCreate(args.getGroupNameCreate()); + + } else if (args.getGroupNameSearch() != null) { + this.handleGroupSearch(args.getGroupNameSearch()); + + } else if (args.getJoinGroupId() != null) { + this.handleGroupJoin(args.getJoinGroupId()); + + } else if (args.getUsersGroupId() != null) { + this.handleGroupUsers(args.getUsersGroupId()); + } + } + + /** + * 创建群聊 + */ + private void handleGroupCreate(String groupName) { + if (StringUtil.isBlank(groupName)) { + Console.error("群聊名称不能为空"); + return; + } + Group.ReqCreateGroup req = Group.ReqCreateGroup.newBuilder() + .setGroupName(groupName) + .build(); + CompletableFuture future = soImSession.send(req); + Res.ResState res = future.join(); + String message = res.getMessage(); + Console.info(message); + } + + /** + * 群聊搜索 + */ + private void handleGroupSearch(String groupName) { + if (StringUtil.isBlank(groupName)) { + Console.error("群聊名称不能为空"); + return; + } + Group.ReqSearchGroup req = Group.ReqSearchGroup.newBuilder() + .setGroupName(groupName) + .build(); + CompletableFuture future = soImSession.send(req); + Group.ResSearchGroup res = future.join(); + List groupsList = res.getGroupsList(); + + List userLines = groupsList.stream() + .map(g -> g.getGid() + "|" + g.getGroupName() + "|" + g.getUserLimit() + "|" + g.getUserNum() + "|" + ImClock.millis2time(g.getCreateTime())) + .collect(Collectors.toList()); + Console.logList("群聊搜索结果", userLines); + } + + /** + * 加入群聊 + */ + private void handleGroupJoin(Integer groupId) { + Group.ReqJoinGroup req = Group.ReqJoinGroup.newBuilder() + .setGid(groupId) + .build(); + CompletableFuture future = soImSession.send(req); + Res.ResState res = future.join(); + String message = res.getMessage(); + Console.info(message); + } + + + /** + * 群聊用户列表 + */ + private void handleGroupUsers(Integer groupId) { + Group.ReqGroupUsers req = Group.ReqGroupUsers.newBuilder() + .setGid(groupId) + .build(); + CompletableFuture future = soImSession.send(req); + Group.ResGroupUsers res = future.join(); + List usersList = res.getUsersList(); + + List userLines = usersList.stream() + .map(u -> u.getUid() + "|" + u.getAccount() + "|" + + u.getNickname() + "|" + + u.getOnline() + "|" + + ImClock.millis2time(u.getLastActive()) + ).collect(Collectors.toList()); + Console.logList("群用户列表", userLines); + } + +} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/LoginHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/LoginHandler.java index 13e092f..5e5c745 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/LoginHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/LoginHandler.java @@ -5,7 +5,7 @@ import com.google.inject.Singleton; import net.sopod.soim.client.cmd.args.ArgsLogin; import net.sopod.soim.client.cmd.handler.CmdHandler; import net.sopod.soim.client.config.ClientConfig; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.model.dto.LoginResDTO; import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.client.util.HttpClient; @@ -38,13 +38,13 @@ public class LoginHandler implements CmdHandler { HashMap params = new HashMap<>(); params.put("account", args.getAccount()); params.put("password", args.getPassword()); - Logger.info("登录中..."); + Console.info("登录中..."); LoginResDTO loginRes = HttpClient.restPost(clientConfig.getLoginUrl(), params, LoginResDTO.class); if (!Boolean.TRUE.equals(loginRes.getSuccess())) { - Logger.error("登录失败: {}", loginRes.getMessage()); + Console.error("登录失败: {}", loginRes.getMessage()); return; } - Logger.info("登录成功: {}", loginRes.getUid()); + Console.info("登录成功: {}", loginRes.getUid()); Auth.ReqTokenAuth reqTokenAuth = Auth.ReqTokenAuth.newBuilder() .setUid(loginRes.getUid()) diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/MeHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/MeHandler.java index c413803..ba84b8d 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/MeHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/MeHandler.java @@ -3,7 +3,7 @@ package net.sopod.soim.client.handler.cmd; import com.google.inject.Inject; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.handler.NonArgsHandler; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.SoImSession; /** @@ -22,7 +22,7 @@ public class MeHandler extends NonArgsHandler { public void handle() { Long uid = soImSession.getUid(); String account = soImSession.getAccount(); - Logger.info("me: " + uid + "|" + account); + Console.info("me: " + uid + "|" + account); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java index b106b3e..3cc827f 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java @@ -4,8 +4,14 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.args.ArgsSearch; import net.sopod.soim.client.cmd.handler.CmdHandler; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.data.msg.user.AccountSearch; +import net.sopod.soim.data.msg.user.UserMsg; + +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; /** * SearchHandler @@ -28,7 +34,14 @@ public class SearchHandler implements CmdHandler { public void handleArgs(ArgsSearch args) { AccountSearch.ReqAccountSearch reqSearch = AccountSearch.ReqAccountSearch .newBuilder().setKeyword(args.getAccount()).build(); - soImSession.send(reqSearch); + CompletableFuture future = soImSession.send(reqSearch); + + AccountSearch.ResAccountSearch res = future.join(); + List usersList = res.getUsersList(); + List userLines = usersList.stream() + .map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname()) + .collect(Collectors.toList()); + Console.logList("搜索结果", userLines); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SendHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SendHandler.java index 9a42398..59ec0c6 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SendHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/SendHandler.java @@ -5,9 +5,10 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.args.ArgsSend; import net.sopod.soim.client.cmd.handler.CmdHandler; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.common.util.StringUtil; +import net.sopod.soim.data.msg.chat.Chat; /** * SendHandler @@ -30,10 +31,15 @@ public class SendHandler implements CmdHandler { public void handleArgs(ArgsSend args) { String message = Joiner.on(' ').join(args.getParameters()); if (StringUtil.isEmpty(message)) { - Logger.info("请输入要发送的内容"); + Console.info("请输入要发送的内容"); return; } - soImSession.textChat(args.getAccount(), message); + Chat.TextChat textChat = Chat.TextChat.newBuilder() + .setMessage(message) + .setReceiverAccount(args.getAccount()) + .setSender(soImSession.getUid()) + .build(); + soImSession.justSend(textChat); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/UsersHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/UsersHandler.java index 18be120..e408dd4 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/cmd/UsersHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/cmd/UsersHandler.java @@ -4,9 +4,14 @@ import com.google.inject.Inject; import com.google.inject.Singleton; import net.sopod.soim.client.cmd.args.ArgsUsers; import net.sopod.soim.client.cmd.handler.CmdHandler; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.data.msg.user.UserGroup; +import java.util.List; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + /** * UsersHandler * @@ -29,7 +34,13 @@ public class UsersHandler implements CmdHandler { UserGroup.ReqOnlineUserList req = UserGroup.ReqOnlineUserList.newBuilder() .setKeyword(args.getKeyword() != null ? args.getKeyword() : "") .build(); - soImSession.send(req); + CompletableFuture future = soImSession.send(req); + + UserGroup.ResOnlineUserList res = future.join(); + List userLines = res.getUsersList().stream() + .map(user -> user.getUid() + " | " + user.getAccount()) + .collect(Collectors.toList()); + Console.logList("在线用户", userLines); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResAddFriendHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResAddFriendHandler.java deleted file mode 100644 index 96a53f4..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResAddFriendHandler.java +++ /dev/null @@ -1,27 +0,0 @@ -package net.sopod.soim.client.handler.msg; - -import com.google.inject.Singleton; -import net.sopod.soim.client.logger.Logger; -import net.sopod.soim.client.session.MessageHandler; -import net.sopod.soim.data.msg.user.Friend; - -/** - * ResAddFriendHandler - * - * @author tmy - * @date 2022-05-23 21:42 - */ -@Singleton -public class ResAddFriendHandler implements MessageHandler { - - @Override - public void handleMsg(Friend.ResAddFriend res) { - System.out.println(res); - if (res.getSuccess()) { - Logger.info("添加好友成功"); - } else { - Logger.error("添加失败:{}", res.getMsg()); - } - } - -} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendListHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendListHandler.java deleted file mode 100644 index db7fd95..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendListHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.sopod.soim.client.handler.msg; - -import com.google.inject.Singleton; -import net.sopod.soim.client.logger.Logger; -import net.sopod.soim.client.session.MessageHandler; -import net.sopod.soim.data.msg.user.Friend; -import net.sopod.soim.data.msg.user.UserMsg; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * ResFriendListHandler - * - * @author tmy - * @date 2022-05-23 22:59 - */ -@Singleton -public class ResFriendListHandler implements MessageHandler { - - @Override - public void handleMsg(Friend.ResFriendList res) { - List friendsList = res.getFriendsList(); - List userLines = friendsList.stream() - .map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname() + "|" + u.getOnline()) - .collect(Collectors.toList()); - Logger.logList("好友列表", userLines); - } - -} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendSearchHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendSearchHandler.java deleted file mode 100644 index 4ff49ff..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendSearchHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.sopod.soim.client.handler.msg; - -import com.google.inject.Singleton; -import net.sopod.soim.client.logger.Logger; -import net.sopod.soim.client.session.MessageHandler; -import net.sopod.soim.data.msg.user.AccountSearch; -import net.sopod.soim.data.msg.user.UserGroup; -import net.sopod.soim.data.msg.user.UserMsg; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * ResFriendSearchHandler - * - * @author tmy - * @date 2022-05-17 23:41 - */ -@Singleton -public class ResFriendSearchHandler implements MessageHandler { - - @Override - public void handleMsg(AccountSearch.ResAccountSearch res) { - List usersList = res.getUsersList(); - List userLines = usersList.stream() - .map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname()) - .collect(Collectors.toList()); - Logger.logList("搜索结果", userLines); - } - -} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResOnlineUserListHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResOnlineUserListHandler.java deleted file mode 100644 index a5d1101..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResOnlineUserListHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.sopod.soim.client.handler.msg; - -import com.google.inject.Singleton; -import net.sopod.soim.client.logger.Logger; -import net.sopod.soim.client.session.MessageHandler; -import net.sopod.soim.data.msg.user.UserGroup; - -import java.util.List; -import java.util.stream.Collectors; - -/** - * ResOnlineUserListHandler - * - * @author tmy - * @date 2022-04-28 12:52 - */ -@Singleton -public class ResOnlineUserListHandler implements MessageHandler { - - @Override - public void handleMsg(UserGroup.ResOnlineUserList res) { - List userLines = res.getUsersList().stream() - .map(user -> user.getUid() + " | " + user.getAccount()) - .collect(Collectors.toList()); - Logger.logList("在线用户", userLines); - } - -} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResTokenAuthHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResTokenAuthHandler.java deleted file mode 100644 index 58b6d29..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/handler/msg/ResTokenAuthHandler.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.sopod.soim.client.handler.msg; - -import com.google.inject.Inject; -import com.google.inject.Singleton; -import net.sopod.soim.client.session.MessageHandler; -import net.sopod.soim.client.session.SoImSession; -import net.sopod.soim.data.msg.auth.Auth; - -/** - * ResTokenAuthHandler - * - * @author tmy - * @date 2022-04-27 9:46 - */ -@Singleton -public class ResTokenAuthHandler implements MessageHandler { - - @Inject - private SoImSession soImSession; - - @Override - public void handleMsg(Auth.ResTokenAuth res) { - soImSession.authResult(res.getSuccess(), res.getMessage(), res.getUid()); - } - -} diff --git a/im-client/src/main/java/net/sopod/soim/client/handler/msg/TextChatHandler.java b/im-client/src/main/java/net/sopod/soim/client/handler/msg/TextChatHandler.java index 2e0bda7..0430220 100644 --- a/im-client/src/main/java/net/sopod/soim/client/handler/msg/TextChatHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/handler/msg/TextChatHandler.java @@ -1,7 +1,7 @@ package net.sopod.soim.client.handler.msg; import com.google.inject.Singleton; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.session.MessageHandler; import net.sopod.soim.data.msg.chat.Chat; @@ -16,7 +16,7 @@ public class TextChatHandler implements MessageHandler { @Override public void handleMsg(Chat.TextChat res) { - Logger.info("{}: {}", res.getSender(), res.getMessage()); + Console.info("{}: {}", res.getSender(), res.getMessage()); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/logger/Logger.java b/im-client/src/main/java/net/sopod/soim/client/logger/Console.java similarity index 98% rename from im-client/src/main/java/net/sopod/soim/client/logger/Logger.java rename to im-client/src/main/java/net/sopod/soim/client/logger/Console.java index 22c4c6e..9d62854 100644 --- a/im-client/src/main/java/net/sopod/soim/client/logger/Logger.java +++ b/im-client/src/main/java/net/sopod/soim/client/logger/Console.java @@ -14,7 +14,7 @@ import java.util.List; * @author tmy * @date 2022-04-25 11:44 */ -public class Logger { +public class Console { private static int consoleWidth = 60; diff --git a/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageInboundHandler.java b/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageInboundHandler.java index c6cdc58..782ec6f 100644 --- a/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageInboundHandler.java +++ b/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageInboundHandler.java @@ -1,6 +1,9 @@ package net.sopod.soim.client.protocol; +import com.google.inject.Inject; +import com.google.inject.Singleton; import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import net.sopod.soim.data.serialize.ImMessage; @@ -12,14 +15,19 @@ import net.sopod.soim.data.serialize.ImMessageCodec; * @author tmy * @date 2022-06-02 17:51 */ +@Singleton +@ChannelHandler.Sharable public class ImMessageInboundHandler extends SimpleChannelInboundHandler { + @Inject + private ImMessageReqHolder imMessageReqHolder; + @Override protected void channelRead0(ChannelHandlerContext channelHandlerContext, ByteBuf bytebuf) throws Exception { ImMessage imMessage = ImMessageCodec.decodeImMessage(bytebuf); // 请求序列号,complete 对应 CompletableFuture int serialNo = imMessage.getSerialNo(); - MessageQueueHolder.getInstance().futureComplete(serialNo, imMessage.getDecodeBody()); + imMessageReqHolder.complete(serialNo, imMessage.getDecodeBody()); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageOutboundHandler.java b/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageOutboundHandler.java deleted file mode 100644 index 534aa11..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageOutboundHandler.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.sopod.soim.client.protocol; - -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelOutboundHandlerAdapter; -import io.netty.channel.ChannelPromise; -import net.sopod.soim.data.serialize.ImMessage; - -/** - * ImMessageOutboundHandler - * - * @author tmy - * @date 2022-06-02 17:53 - */ -public class ImMessageOutboundHandler extends ChannelOutboundHandlerAdapter { - - @Override - public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (!(msg instanceof ImMessage)) { - return; - } - ImMessage imMessage = (ImMessage) msg; - imMessage.setSerialNo(10086); - // queue.add something..., 调用的地方,通过阻塞方式 FastThreadLocal 获取一个 CompletableFuture - - super.write(ctx, msg, promise); - } - -} diff --git a/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageRegistry.java b/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageRegistry.java deleted file mode 100644 index a88e6e8..0000000 --- a/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageRegistry.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.sopod.soim.client.protocol; - -/** - * ImMessageRegistry - * - * @author tmy - * @date 2022-06-02 17:32 - */ -public class ImMessageRegistry { -} diff --git a/im-client/src/main/java/net/sopod/soim/client/protocol/MessageQueueHolder.java b/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageReqHolder.java similarity index 55% rename from im-client/src/main/java/net/sopod/soim/client/protocol/MessageQueueHolder.java rename to im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageReqHolder.java index f8fd727..cf236f2 100644 --- a/im-client/src/main/java/net/sopod/soim/client/protocol/MessageQueueHolder.java +++ b/im-client/src/main/java/net/sopod/soim/client/protocol/ImMessageReqHolder.java @@ -1,5 +1,7 @@ package net.sopod.soim.client.protocol; +import com.google.inject.Inject; +import com.google.inject.Singleton; import com.google.protobuf.MessageLite; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; @@ -16,48 +18,48 @@ import java.util.concurrent.atomic.AtomicInteger; * @author tmy * @date 2022-06-02 17:29 */ -public class MessageQueueHolder { +@Singleton +public class ImMessageReqHolder { - private static final Logger logger = LoggerFactory.getLogger(MessageQueueHolder.class); + private static final Logger logger = LoggerFactory.getLogger(ImMessageReqHolder.class); - private static MessageQueueHolder INSTANCE; + private final ImProtoDispatcher imProtoDispatcher; private final AtomicInteger serialNoGen; // TODO 超时处理 private final ConcurrentHashMap> futureMap; - private MessageQueueHolder() { + @Inject + public ImMessageReqHolder(ImProtoDispatcher imProtoDispatcher) { this.serialNoGen = new AtomicInteger(); this.futureMap = new ConcurrentHashMap<>(); - } - - public static MessageQueueHolder getInstance() { - if (INSTANCE == null) { - synchronized (MessageQueueHolder.class) { - if (INSTANCE == null) { - INSTANCE = new MessageQueueHolder(); - } - } - } - return INSTANCE; + this.imProtoDispatcher = imProtoDispatcher; } public Pair> nextSerialNo() { + serialNoGen.compareAndSet(Integer.MAX_VALUE, 0); int serialNo = serialNoGen.incrementAndGet(); CompletableFuture future = new CompletableFuture<>(); futureMap.put(serialNo, future); - logger.info("put future: {}", serialNo); + logger.debug("put future: {}", serialNo); return Pair.of(serialNo, future); } - public void futureComplete(int serialNo, MessageLite body) { - CompletableFuture completableFuture = futureMap.remove(serialNo); - if (completableFuture == null) { - logger.error("无等待消息的future: {}, {}", serialNo, body); - } else { - completableFuture.complete(body); + /** + * TODO complete fail + */ + public void complete(int serialNo, MessageLite msg) { + if (serialNo > 0) { + // dispatch + CompletableFuture completableFuture = futureMap.remove(serialNo); + if (completableFuture != null) { + completableFuture.complete(msg); + return; + } } + // 无同步等待,通过消息分发处理 + imProtoDispatcher.dispatch(msg); } } diff --git a/im-client/src/main/java/net/sopod/soim/client/session/MessageDispatcher.java b/im-client/src/main/java/net/sopod/soim/client/protocol/ImProtoDispatcher.java similarity index 63% rename from im-client/src/main/java/net/sopod/soim/client/session/MessageDispatcher.java rename to im-client/src/main/java/net/sopod/soim/client/protocol/ImProtoDispatcher.java index aa5d9b5..ade3c5c 100644 --- a/im-client/src/main/java/net/sopod/soim/client/session/MessageDispatcher.java +++ b/im-client/src/main/java/net/sopod/soim/client/protocol/ImProtoDispatcher.java @@ -1,4 +1,4 @@ -package net.sopod.soim.client.session; +package net.sopod.soim.client.protocol; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -6,7 +6,10 @@ import com.google.protobuf.MessageLite; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; +import net.sopod.soim.client.session.MessageHandler; import net.sopod.soim.common.util.Reflects; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; @@ -15,27 +18,23 @@ import java.util.Set; /** * MessageDispatcher + * 通过 protobuf 消息类型分发消息到 MessageHandler * * @author tmy * @date 2022-04-27 9:48 */ @Singleton -@ChannelHandler.Sharable -public class MessageDispatcher extends SimpleChannelInboundHandler { +public class ImProtoDispatcher { + + private static final Logger logger = LoggerFactory.getLogger(ImProtoDispatcher.class); private Map, MessageHandler> msgHandlers; @Inject - public MessageDispatcher(Set handlers) { + public ImProtoDispatcher(Set handlers) { this.registryHandlers(handlers); } - @Override - protected void channelRead0(ChannelHandlerContext channelHandlerContext, MessageLite msg) throws Exception { - MessageHandler messageHandler = msgHandlers.get(msg.getClass()); - messageHandler.handleMsg(msg); - } - private void registryHandlers(Set handlers) { Map, MessageHandler> msgHandlers = new HashMap<>(); for (MessageHandler handler : handlers) { @@ -50,4 +49,14 @@ public class MessageDispatcher extends SimpleChannelInboundHandler this.msgHandlers = msgHandlers; } + @SuppressWarnings("unchecked") + public void dispatch(MessageLite msg) { + MessageHandler messageHandler = msgHandlers.get(msg.getClass()); + if (messageHandler == null) { + logger.error("{} 消息, 无对应MessageHandler", msg.getClass()); + return; + } + messageHandler.handleMsg(msg); + } + } diff --git a/im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java b/im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java index 09e97ab..9757fcc 100644 --- a/im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java +++ b/im-client/src/main/java/net/sopod/soim/client/session/SoImSession.java @@ -6,22 +6,18 @@ import com.google.protobuf.MessageLite; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; -import io.netty.handler.logging.LogLevel; -import io.netty.handler.logging.LoggingHandler; import net.sopod.soim.client.config.exception.ClientException; -import net.sopod.soim.client.logger.Logger; +import net.sopod.soim.client.logger.Console; import net.sopod.soim.client.protocol.ImMessageInboundHandler; -import net.sopod.soim.client.protocol.MessageQueueHolder; -import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.client.protocol.ImMessageReqHolder; import net.sopod.soim.common.util.netty.Varint32FrameCodec; -import net.sopod.soim.data.proto.ProtoMessageManager; +import net.sopod.soim.data.msg.auth.Auth; import net.sopod.soim.data.serialize.ImMessage; import net.sopod.soim.data.serialize.ImMessageCodec; -import net.sopod.soim.data.msg.auth.Auth; -import net.sopod.soim.data.msg.chat.Chat; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.LoggerFactory; @@ -39,23 +35,22 @@ public class SoImSession { private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SoImSession.class); + @Inject + private ImMessageReqHolder imMessageReqHolder; + + @Inject + private ImMessageInboundHandler imMessageInboundHandler; + private NioEventLoopGroup eventLoopGroup; private Channel clientChannel; private AtomicBoolean auth = new AtomicBoolean(false); - private final MessageDispatcher messageDispatcher; - private Long uid; private String account; - @Inject - public SoImSession(MessageDispatcher messageDispatcher) { - this.messageDispatcher = messageDispatcher; - } - public void connect(String host, Integer port, Auth.ReqTokenAuth tokenAuth, String account) { // 关闭旧连接 this.close(); @@ -68,41 +63,31 @@ public class SoImSession { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline() - .addLast(new LoggingHandler(LogLevel.INFO)) + // .addLast(new LoggingHandler(LogLevel.INFO)) .addLast(new Varint32FrameCodec()) -// .addLast(new ImMessageCodec()) .addLast(new ImMessageCodec.ImMessage2ByteEncoder()) -// .addLast(new ImMessageCodec.ImMessageDecoder()) - .addLast(new ImMessageInboundHandler()); - // .addLast(messageDispatcher); + .addLast(imMessageInboundHandler); } - }); + }) + .option(ChannelOption.TCP_NODELAY, true); try { - Logger.info("连接中..."); + Console.info("连接中..."); clientChannel = b.connect(host, port).await().channel(); // 连接后立即发送认证消息,10s未认证连接关闭 CompletableFuture future = this.send0(tokenAuth); - long start = ImClock.millis(); - Object res = future.join(); - logger.info("future 响应: {}, {}ms", res, ImClock.millis() - start); - this.account = account; + Auth.ResTokenAuth res = (Auth.ResTokenAuth) future.join(); + if (res.getSuccess()) { + this.account = account; + this.auth.set(true); + this.uid = res.getUid(); + Console.info("连接服务器成功"); + } else { + Console.info("连接服务器失败 {}", res.getMessage()); + } + // logger.info("future 响应: {}, {}ms", res, ImClock.millis() - start); } catch (Exception e) { - Logger.error("连接服务器失败: {}", e.getMessage()); - } - } - - /** - * 处理登录认证结果 - */ - public void authResult(boolean success, String message, Long uid) { - this.auth.set(success); - if (this.auth.get()) { - Logger.info("连接服务器成功"); - this.uid = uid; - return; + Console.error("连接服务器失败: {}", e.getMessage()); } - Logger.info("连接服务器失败: {}", message); - this.close(); } private CompletableFuture send0(MessageLite message) { @@ -111,17 +96,10 @@ public class SoImSession { throw new ClientException("连接已关闭"); } // 构建 ImMessage - Integer serialNo = ProtoMessageManager.getSerialNo(message.getClass()); - if (serialNo == null) { - throw new ClientException("未知的消息类型:" + message.getClass()); - } - ImMessage imMessage = new ImMessage() - .setServiceNo(serialNo) - .setBody(message.toByteArray()); + ImMessage imMessage = ImMessageCodec.encodeImProto(message); // serialNo, Future - Pair> futurePair = MessageQueueHolder.getInstance().nextSerialNo(); + Pair> futurePair = imMessageReqHolder.nextSerialNo(); imMessage.setSerialNo(futurePair.getLeft()); - clientChannel.writeAndFlush(imMessage); return futurePair.getRight(); } @@ -132,23 +110,24 @@ public class SoImSession { @SuppressWarnings("unchecked") public CompletableFuture send(MessageLite message) { if (!auth.get()) { - Logger.error("请先登录"); + Console.error("请先登录"); return null; } return (CompletableFuture) send0(message); } - public void textChat(String receiverName, String message) { - Chat.TextChat textChat = Chat.TextChat.newBuilder() - .setMessage(message) - .setReceiverAccount(receiverName) - .setSender(uid) - .build(); - send(textChat); - } - - public void textChat(Chat.TextChat textChat) { - this.send(textChat); + public void justSend(MessageLite message) { + if (!auth.get()) { + Console.error("请先登录"); + return; + } + if (clientChannel == null + || !clientChannel.isActive()) { + throw new ClientException("连接已关闭"); + } + ImMessage imMessage = ImMessageCodec.encodeImProto(message); + imMessage.setSerialNo(-1); + clientChannel.writeAndFlush(imMessage); } public Long getUid() { @@ -166,9 +145,9 @@ public class SoImSession { if (clientChannel != null) { try { clientChannel.close().await(); - Logger.info("连接已关闭"); + Console.info("连接已关闭"); } catch (InterruptedException e) { - Logger.error("连接关闭失败: {}", e.getMessage()); + Console.error("连接关闭失败: {}", e.getMessage()); } this.clientChannel = null; } diff --git a/im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java b/im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java index c22bf6e..7c2aebe 100644 --- a/im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java +++ b/im-common/src/main/java/net/sopod/soim/common/util/StringUtil.java @@ -20,6 +20,26 @@ public class StringUtil { return content == null || content.length() == 0; } + public static boolean isBlank(String str) { + return !hasText(str); + } + + public static boolean hasText(String str) { + return str != null && !str.isEmpty() && containsText(str); + } + + private static boolean containsText(CharSequence str) { + int strLen = str.length(); + + for(int i = 0; i < strLen; ++i) { + if (!Character.isWhitespace(str.charAt(i))) { + return true; + } + } + + return false; + } + public static String toString(Object data) { return data == null ? null : data.toString(); } diff --git a/im-das-api/im-das-common/pom.xml b/im-das-api/im-das-common/pom.xml new file mode 100644 index 0000000..ed1d74d --- /dev/null +++ b/im-das-api/im-das-common/pom.xml @@ -0,0 +1,15 @@ + + + + im-das-api + net.sopod + 1.0.0 + + 4.0.0 + + im-das-common + + + \ No newline at end of file diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java b/im-das-api/im-das-common/src/main/java/net/sopod/soim/das/common/config/LogicTables.java similarity index 75% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java rename to im-das-api/im-das-common/src/main/java/net/sopod/soim/das/common/config/LogicTables.java index 298bb45..4130cf3 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/LogicTables.java +++ b/im-das-api/im-das-common/src/main/java/net/sopod/soim/das/common/config/LogicTables.java @@ -1,4 +1,4 @@ -package net.sopod.soim.das.user.api.config; +package net.sopod.soim.das.common.config; /** * LogicTables @@ -12,10 +12,14 @@ public interface LogicTables { Integer STATUS_NORMAL = 1; + Integer STATUS_DISABLED = 2; + String IM_USER = "im_user"; String IM_FRIEND = "im_friend"; + String IM_FRIEND_RELATION = "im_friend_relation_id"; + String IM_MESSAGE = "im_message"; String IM_GROUP = "im_group"; diff --git a/im-das-api/im-das-group-api/pom.xml b/im-das-api/im-das-group-api/pom.xml index a53d947..67c3a7e 100644 --- a/im-das-api/im-das-group-api/pom.xml +++ b/im-das-api/im-das-group-api/pom.xml @@ -11,5 +11,23 @@ im-das-group-api + + + net.sopod + im-das-common + ${soim.version} + + + com.baomidou + mybatis-plus-annotation + 3.5.0 + + + net.sopod + im-common + ${soim.version} + provided + + \ No newline at end of file diff --git a/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/dto/GroupUser_0.java b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/dto/GroupUser_0.java new file mode 100644 index 0000000..0d064f3 --- /dev/null +++ b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/dto/GroupUser_0.java @@ -0,0 +1,26 @@ +package net.sopod.soim.das.group.api.model.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * GroupUser0 + * + * @author tmy + * @date 2022-06-03 21:24 + */ +@Data +@Accessors(chain = true) +public class GroupUser_0 implements Serializable { + + private static final long serialVersionUID = 2795983825784323892L; + + private Long uid; + + private Long lastActive; + + private transient Boolean isOnline; + +} diff --git a/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroup.java b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroup.java index dc628a6..c6672e5 100644 --- a/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroup.java +++ b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroup.java @@ -1,11 +1,58 @@ package net.sopod.soim.das.group.api.model.entity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.experimental.Accessors; +import net.sopod.soim.das.common.config.LogicTables; + +import java.io.Serializable; +import java.util.Date; + /** - * ImGroup + * ImGroup 群聊 * * @author tmy - * @date 2022-05-28 14:57 + * @date 2022-05-28 15:14 */ -public class ImGroup { - +@Data +@Accessors(chain = true) +@TableName(LogicTables.IM_GROUP) +public class ImGroup implements Serializable { + + private static final long serialVersionUID = 2081139176340955425L; + + /** 群聊id */ + @TableId(value = "id") + private Long id; + + /** 群主id */ + @TableField(value = "master_uid") + private Long masterUid; + + /** 状态:0删除,1.正常,3禁用,4.解散 */ + @TableField(value = "status") + private Integer status; + + /** 群聊名称 */ + @TableField(value = "group_name") + private String groupName; + + /** 群聊人数限制 */ + @TableField(value = "user_limit") + private Integer userLimit; + + /** 当前群聊人数 */ + @TableField(value = "user_num") + private Integer userNum; + + /** 创建时间 */ + @TableField(value = "create_time") + private Date createTime; + + /** 更新时间 */ + @TableField(value = "update_time") + private Date updateTime; + } diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupUser.java b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroupUser.java similarity index 84% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupUser.java rename to im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroupUser.java index c8589a9..cc5681d 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupUser.java +++ b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/model/entity/ImGroupUser.java @@ -1,11 +1,11 @@ -package net.sopod.soim.das.user.api.model.entity; +package net.sopod.soim.das.group.api.model.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; -import net.sopod.soim.das.user.api.config.LogicTables; +import net.sopod.soim.das.common.config.LogicTables; import java.io.Serializable; import java.util.Date; @@ -43,6 +43,10 @@ public class ImGroupUser implements Serializable { @TableField(value = "unread_offset_id") private Long unreadOffsetId; + /** 最后活跃时间 */ + @TableField(value = "last_active") + private Date lastActive; + /** 创建时间 */ @TableField(value = "create_time") private Date createTime; diff --git a/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupService.java b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupService.java new file mode 100644 index 0000000..22a263c --- /dev/null +++ b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupService.java @@ -0,0 +1,21 @@ +package net.sopod.soim.das.group.api.service; + +import net.sopod.soim.das.group.api.model.entity.ImGroup; + +import java.util.List; + +/** + * DasGroupService + * + * @author tmy + * @date 2022-06-03 20:04 + */ +public interface DasGroupService { + + Boolean isGroupNameNotExists(String groupName); + + Long saveGroup(ImGroup imGroup); + + List listGroup(String groupNameLike); + +} diff --git a/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupUserService.java b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupUserService.java new file mode 100644 index 0000000..29b3750 --- /dev/null +++ b/im-das-api/im-das-group-api/src/main/java/net/sopod/soim/das/group/api/service/DasGroupUserService.java @@ -0,0 +1,25 @@ +package net.sopod.soim.das.group.api.service; + +import net.sopod.soim.das.group.api.model.dto.GroupUser_0; + +import java.util.Collections; +import java.util.Date; +import java.util.List; + +/** + * DasGroupUserService + * + * @author tmy + * @date 2022-06-03 20:22 + */ +public interface DasGroupUserService { + + Boolean isJoined(Long groupId, Long uid); + + Long insert(Long groupId, Long uid); + + void updateLastActive(Long id, Long millis); + + List listGroupUsers(Long groupId); + +} diff --git a/im-das-api/im-das-message-api/pom.xml b/im-das-api/im-das-message-api/pom.xml new file mode 100644 index 0000000..90ae81a --- /dev/null +++ b/im-das-api/im-das-message-api/pom.xml @@ -0,0 +1,42 @@ + + + + im-das-api + net.sopod + 1.0.0 + + 4.0.0 + + im-das-message-api + + + + net.sopod + im-das-common + ${soim.version} + + + com.baomidou + mybatis-plus-annotation + 3.5.0 + + + net.sopod + im-common + ${soim.version} + provided + + + org.springframework.boot + spring-boot-starter-amqp + provided + + + org.xerial.snappy + snappy-java + + + + \ No newline at end of file diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/ChatMQAutoConfiguration.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/ChatMQAutoConfiguration.java similarity index 68% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/ChatMQAutoConfiguration.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/ChatMQAutoConfiguration.java index 0d6d557..2a505e4 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/ChatMQAutoConfiguration.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/ChatMQAutoConfiguration.java @@ -1,6 +1,7 @@ -package net.sopod.soim.das.user.api.config; +package net.sopod.soim.das.message.api.config; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; /** @@ -11,6 +12,7 @@ import org.springframework.context.annotation.Import; */ @ConditionalOnClass(name = "org.springframework.amqp.core.Queue") @Import(ChatPersistentRabbitMQConfiguration.class) +@ComponentScan(basePackageClasses = ChatMQAutoConfiguration.class) public class ChatMQAutoConfiguration { } diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/ChatPersistentRabbitMQConfiguration.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/ChatPersistentRabbitMQConfiguration.java similarity index 83% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/ChatPersistentRabbitMQConfiguration.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/ChatPersistentRabbitMQConfiguration.java index 095c9d2..a8a8439 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/ChatPersistentRabbitMQConfiguration.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/ChatPersistentRabbitMQConfiguration.java @@ -1,8 +1,8 @@ -package net.sopod.soim.das.user.api.config; +package net.sopod.soim.das.message.api.config; -import net.sopod.soim.das.user.api.mq.ChatMQMessageConverter; -import net.sopod.soim.das.user.api.mq.ChatQueueType; -import net.sopod.soim.das.user.api.service.DasMQPersistentService; +import net.sopod.soim.das.message.api.mq.ChatMQMessageConverter; +import net.sopod.soim.das.message.api.mq.ChatQueueType; +import net.sopod.soim.das.message.api.service.DasMQMessagePersistentService; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; @@ -53,8 +53,8 @@ public class ChatPersistentRabbitMQConfiguration implements ImportBeanDefinition } @Bean - public DasMQPersistentService dasPersistentService(RabbitTemplate rabbitTemplate) { - return new DasMQPersistentService(rabbitTemplate); + public DasMQMessagePersistentService dasPersistentService(RabbitTemplate rabbitTemplate) { + return new DasMQMessagePersistentService(rabbitTemplate); } } diff --git a/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/package-info.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/package-info.java new file mode 100644 index 0000000..22a509a --- /dev/null +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/config/package-info.java @@ -0,0 +1,3 @@ + +@org.springframework.lang.NonNullApi +package net.sopod.soim.das.message.api.config; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupMessage.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/entity/ImGroupMessage.java similarity index 90% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupMessage.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/entity/ImGroupMessage.java index 070209c..09b7858 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroupMessage.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/entity/ImGroupMessage.java @@ -1,11 +1,11 @@ -package net.sopod.soim.das.user.api.model.entity; +package net.sopod.soim.das.message.api.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; -import net.sopod.soim.das.user.api.config.LogicTables; +import net.sopod.soim.das.common.config.LogicTables; import java.io.Serializable; import java.util.Date; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImMessage.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/entity/ImMessage.java similarity index 85% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImMessage.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/entity/ImMessage.java index 3a86780..62b3ad2 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImMessage.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/entity/ImMessage.java @@ -1,11 +1,11 @@ -package net.sopod.soim.das.user.api.model.entity; +package net.sopod.soim.das.message.api.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; -import net.sopod.soim.das.user.api.config.LogicTables; +import net.sopod.soim.das.common.config.LogicTables; import java.io.Serializable; import java.util.Date; @@ -28,8 +28,8 @@ public class ImMessage implements Serializable { private Long id; /** 好友关系id(分片) */ - @TableField(value = "friend_id") - private Long friendId; + @TableField(value = "relation_id") + private Long relationId; /** 发送人id */ @TableField(value = "sender") diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatMQMessageConverter.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatMQMessageConverter.java similarity index 98% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatMQMessageConverter.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatMQMessageConverter.java index 106cd66..aa18d70 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatMQMessageConverter.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatMQMessageConverter.java @@ -1,4 +1,4 @@ -package net.sopod.soim.das.user.api.mq; +package net.sopod.soim.das.message.api.mq; import net.sopod.soim.common.constant.Consts; import net.sopod.soim.common.util.Converter; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatQueue.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatQueue.java similarity index 84% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatQueue.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatQueue.java index d54c9a8..3c216c8 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatQueue.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatQueue.java @@ -1,4 +1,4 @@ -package net.sopod.soim.das.user.api.mq; +package net.sopod.soim.das.message.api.mq; /** * ChatQueue diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatQueueType.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatQueueType.java similarity index 93% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatQueueType.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatQueueType.java index bfb4ad5..2e0d8ba 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/ChatQueueType.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/ChatQueueType.java @@ -1,9 +1,9 @@ -package net.sopod.soim.das.user.api.mq; +package net.sopod.soim.das.message.api.mq; import net.sopod.soim.common.util.Converter; import net.sopod.soim.common.util.StringUtil; -import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; -import net.sopod.soim.das.user.api.model.entity.ImMessage; +import net.sopod.soim.das.message.api.entity.ImGroupMessage; +import net.sopod.soim.das.message.api.entity.ImMessage; import java.util.function.Function; diff --git a/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/package-info.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/package-info.java new file mode 100644 index 0000000..4e56ff5 --- /dev/null +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/mq/package-info.java @@ -0,0 +1,3 @@ + +@org.springframework.lang.NonNullApi +package net.sopod.soim.das.message.api.mq; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/DasMQPersistentService.java b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/service/DasMQMessagePersistentService.java similarity index 62% rename from im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/DasMQPersistentService.java rename to im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/service/DasMQMessagePersistentService.java index 90caedd..24c9834 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/DasMQPersistentService.java +++ b/im-das-api/im-das-message-api/src/main/java/net/sopod/soim/das/message/api/service/DasMQMessagePersistentService.java @@ -1,8 +1,8 @@ -package net.sopod.soim.das.user.api.service; +package net.sopod.soim.das.message.api.service; -import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; -import net.sopod.soim.das.user.api.model.entity.ImMessage; -import net.sopod.soim.das.user.api.mq.ChatQueueType; +import net.sopod.soim.das.message.api.entity.ImGroupMessage; +import net.sopod.soim.das.message.api.entity.ImMessage; +import net.sopod.soim.das.message.api.mq.ChatQueueType; import org.springframework.amqp.rabbit.core.RabbitTemplate; /** @@ -11,11 +11,11 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; * @author tmy * @date 2022-06-02 20:28 */ -public class DasMQPersistentService { +public class DasMQMessagePersistentService { private final RabbitTemplate rabbitTemplate; - public DasMQPersistentService(RabbitTemplate rabbitTemplate) { + public DasMQMessagePersistentService(RabbitTemplate rabbitTemplate) { this.rabbitTemplate = rabbitTemplate; } diff --git a/im-das-api/im-das-user-api/src/main/resources/META-INF/spring.factories b/im-das-api/im-das-message-api/src/main/resources/META-INF/spring.factories similarity index 51% rename from im-das-api/im-das-user-api/src/main/resources/META-INF/spring.factories rename to im-das-api/im-das-message-api/src/main/resources/META-INF/spring.factories index d1555ad..7cc691f 100644 --- a/im-das-api/im-das-user-api/src/main/resources/META-INF/spring.factories +++ b/im-das-api/im-das-message-api/src/main/resources/META-INF/spring.factories @@ -1 +1 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=net.sopod.soim.das.user.api.config.ChatMQAutoConfiguration +org.springframework.boot.autoconfigure.EnableAutoConfiguration=net.sopod.soim.das.message.api.config.ChatMQAutoConfiguration diff --git a/im-das-api/im-das-user-api/pom.xml b/im-das-api/im-das-user-api/pom.xml index 0e9b224..5bca812 100644 --- a/im-das-api/im-das-user-api/pom.xml +++ b/im-das-api/im-das-user-api/pom.xml @@ -12,6 +12,11 @@ im-das-user-api + + net.sopod + im-das-common + ${soim.version} + com.baomidou mybatis-plus-annotation @@ -23,15 +28,6 @@ ${soim.version} provided - - org.springframework.boot - spring-boot-starter-amqp - provided - - - org.xerial.snappy - snappy-java - \ No newline at end of file diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/package-info.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/package-info.java deleted file mode 100644 index bcced1f..0000000 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/config/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ - -@org.springframework.lang.NonNullApi -package net.sopod.soim.das.user.api.config; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java index ef5d323..9db2e17 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; -import net.sopod.soim.das.user.api.config.LogicTables; +import net.sopod.soim.das.common.config.LogicTables; import java.io.Serializable; import java.util.Date; @@ -29,6 +29,10 @@ public class ImFriend implements Serializable { @TableId(value = "id", type = IdType.INPUT) private Long id; + /** 关系id(消息存储路由分片) */ + @TableField(value = "relation_id") + private Long relationId; + /** 用户id */ @TableField(value = "uid") private Long uid; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroup.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroup.java deleted file mode 100644 index 8e4d5cc..0000000 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImGroup.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.sopod.soim.das.user.api.model.entity; - -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; -import lombok.experimental.Accessors; -import net.sopod.soim.das.user.api.config.LogicTables; - -import java.io.Serializable; -import java.util.Date; - -/** - * ImGroup 群聊 - * - * @author tmy - * @date 2022-05-28 15:14 - */ -@Data -@Accessors(chain = true) -@TableName(LogicTables.IM_GROUP) -public class ImGroup implements Serializable { - - private static final long serialVersionUID = 2081139176340955425L; - - /** 群聊id */ - @TableId(value = "id") - private Long id; - - /** 群主id */ - @TableField(value = "master_uid") - private Long masterUid; - - /** 群聊名称 */ - @TableField(value = "group_name") - private String groupName; - - /** 群聊人数限制 */ - @TableField(value = "user_limit") - private String userLimit; - - /** 当前群聊人数 */ - @TableField(value = "user_num") - private Date userNum; - - /** 创建时间 */ - @TableField(value = "create_time") - private String createTime; - - /** 更新时间 */ - @TableField(value = "update_time") - private Date updateTime; - -} diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java index d70f675..1751478 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java @@ -6,7 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.experimental.Accessors; -import net.sopod.soim.das.user.api.config.LogicTables; +import net.sopod.soim.das.common.config.LogicTables; import java.io.Serializable; import java.util.Date; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/package-info.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/package-info.java deleted file mode 100644 index ea6c6f8..0000000 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/mq/package-info.java +++ /dev/null @@ -1,3 +0,0 @@ - -@org.springframework.lang.NonNullApi -package net.sopod.soim.das.user.api.mq; diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java index 4c47e8b..86f80d4 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java @@ -19,9 +19,12 @@ public interface FriendDas { * @param fid 好友id * @return 影响行数 */ - int insert(Long uid, Long fid); + int saveFriendRelation(Long uid, Long fid); - Long getFriendId(Long uid, Long fid); + /** + * 获取好友关系id + */ + Long getRelationId(Long uid, Long fid); /** * 好友是否存在 diff --git a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDas.java b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDas.java index 8d03cbb..0d43812 100644 --- a/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDas.java +++ b/im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDas.java @@ -2,6 +2,7 @@ package net.sopod.soim.das.user.api.service; import net.sopod.soim.das.user.api.model.entity.ImUser; +import java.util.Collection; import java.util.List; /** @@ -18,4 +19,6 @@ public interface UserDas { List searchImUser(String keyword, Integer limit); + List listUsers(Collection uids); + } diff --git a/im-das-api/pom.xml b/im-das-api/pom.xml index a7cd6a7..7fe60c4 100644 --- a/im-das-api/pom.xml +++ b/im-das-api/pom.xml @@ -14,6 +14,8 @@ im-das-user-api im-das-group-api + im-das-common + im-das-message-api diff --git a/im-das/im-das-group/pom.xml b/im-das/im-das-group/pom.xml new file mode 100644 index 0000000..efe2a75 --- /dev/null +++ b/im-das/im-das-group/pom.xml @@ -0,0 +1,27 @@ + + + + im-das + net.sopod + 1.0.0 + + 4.0.0 + + im-das-group + + + + net.sopod + im-common + ${soim.version} + + + net.sopod + im-das-group-api + ${soim.version} + + + + \ No newline at end of file diff --git a/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/DasGroupApplication.java b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/DasGroupApplication.java new file mode 100644 index 0000000..d09dae8 --- /dev/null +++ b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/DasGroupApplication.java @@ -0,0 +1,23 @@ +package net.sopod.soim.das.group; + +import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * DasGroupApplication + * + * @author tmy + * @date 2022-06-03 11:33 + */ +@SpringBootApplication +@EnableDubbo(scanBasePackages = "net.sopod.soim.das.group.service") +@MapperScan("net.sopod.soim.das.group.dao") +public class DasGroupApplication { + + public static void main(String[] args) { + SpringApplication.run(DasGroupApplication.class); + } + +} diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMapper.java b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/dao/ImGroupMapper.java similarity index 56% rename from im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMapper.java rename to im-das/im-das-group/src/main/java/net/sopod/soim/das/group/dao/ImGroupMapper.java index e5d5744..a9a4d9f 100644 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMapper.java +++ b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/dao/ImGroupMapper.java @@ -1,7 +1,7 @@ -package net.sopod.soim.das.user.dao; +package net.sopod.soim.das.group.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.sopod.soim.das.user.api.model.entity.ImGroup; +import net.sopod.soim.das.group.api.model.entity.ImGroup; /** * ImGroupMapper @@ -11,4 +11,6 @@ import net.sopod.soim.das.user.api.model.entity.ImGroup; */ public interface ImGroupMapper extends BaseMapper { + Long selectExistsGroupByName(String groupName); + } diff --git a/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/dao/ImGroupUserMapper.java b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/dao/ImGroupUserMapper.java new file mode 100644 index 0000000..7a10191 --- /dev/null +++ b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/dao/ImGroupUserMapper.java @@ -0,0 +1,14 @@ +package net.sopod.soim.das.group.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.sopod.soim.das.group.api.model.entity.ImGroupUser; + +/** + * ImGroupMessageMapper + * + * @author tmy + * @date 2022-05-31 9:59 + */ +public interface ImGroupUserMapper extends BaseMapper { + +} diff --git a/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupServiceImpl.java b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupServiceImpl.java new file mode 100644 index 0000000..fe6df92 --- /dev/null +++ b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupServiceImpl.java @@ -0,0 +1,63 @@ +package net.sopod.soim.das.group.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.das.common.config.LogicTables; +import net.sopod.soim.das.group.api.model.entity.ImGroup; +import net.sopod.soim.das.group.api.service.DasGroupService; +import net.sopod.soim.das.group.dao.ImGroupMapper; +import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; + +/** + * DasGroupServiceImpl + * + * @author tmy + * @date 2022-06-03 20:29 + */ +@DubboService +public class DasGroupServiceImpl implements DasGroupService { + + @Resource + private ImGroupMapper imGroupMapper; + + @Resource + private DasGroupUserServiceImpl dasGroupUserService; + + @Resource + private SegmentIdGenerator segmentIdGenerator; + + @Override + public Boolean isGroupNameNotExists(String groupName) { + Long groupId = imGroupMapper.selectExistsGroupByName(groupName); + return groupId == null; + } + + @Transactional + @Override + public Long saveGroup(ImGroup imGroup) { + long groupId = segmentIdGenerator.nextId(LogicTables.IM_GROUP); + // 添加群数据 + imGroup.setId(groupId) + .setStatus(LogicTables.STATUS_NORMAL) + .setUserNum(1) + .setCreateTime(ImClock.date()); + imGroupMapper.insert(imGroup); + // 添加群主为群用户 + dasGroupUserService.insert(groupId, imGroup.getMasterUid()); + return groupId; + } + + @Override + public List listGroup(String groupNameLike) { + LambdaQueryWrapper imGroupQuery = new QueryWrapper().lambda() + .likeRight(ImGroup::getGroupName, groupNameLike); + return imGroupMapper.selectList(imGroupQuery); + } + +} diff --git a/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupUserServiceImpl.java b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupUserServiceImpl.java new file mode 100644 index 0000000..fa392af --- /dev/null +++ b/im-das/im-das-group/src/main/java/net/sopod/soim/das/group/service/DasGroupUserServiceImpl.java @@ -0,0 +1,81 @@ +package net.sopod.soim.das.group.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import net.sopod.soim.common.util.Collects; +import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.das.common.config.LogicTables; +import net.sopod.soim.das.group.api.model.dto.GroupUser_0; +import net.sopod.soim.das.group.api.model.entity.ImGroupUser; +import net.sopod.soim.das.group.api.service.DasGroupUserService; +import net.sopod.soim.das.group.dao.ImGroupUserMapper; +import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; +import org.apache.dubbo.config.annotation.DubboService; + +import javax.annotation.Resource; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * DasGroupUserServiceImpl + * + * @author tmy + * @date 2022-06-03 20:30 + */ +@DubboService +public class DasGroupUserServiceImpl implements DasGroupUserService { + + @Resource + private ImGroupUserMapper imGroupUserMapper; + + @Resource + private SegmentIdGenerator segmentIdGenerator; + + @Override + public Boolean isJoined(Long groupId, Long uid) { + LambdaQueryWrapper joinIdQuery = new QueryWrapper().lambda() + .select(ImGroupUser::getId) + .eq(ImGroupUser::getGroupId, groupId) + .eq(ImGroupUser::getUid, uid); + return Collects.isNotEmpty(imGroupUserMapper.selectList(joinIdQuery)); + } + + @Override + public Long insert(Long groupId, Long uid) { + long id = segmentIdGenerator.nextId(LogicTables.IM_GROUP_USER); + Date now = ImClock.date(); + ImGroupUser imGroupUser = new ImGroupUser().setId(id) + .setUid(uid) + .setGroupId(groupId) + .setCreateTime(now) + .setLastActive(now) + .setUnreadNum(0) + .setUnreadOffsetId(0L); + imGroupUserMapper.insert(imGroupUser); + return id; + } + + @Override + public void updateLastActive(Long id, Long millis) { + ImGroupUser updateWrapper = new ImGroupUser() + .setId(id) + .setLastActive(new Date(millis)); + imGroupUserMapper.updateById(updateWrapper); + } + + @Override + public List listGroupUsers(Long groupId) { + LambdaQueryWrapper imGroupUserQueryWrapper = new QueryWrapper().lambda() + .select(ImGroupUser::getUid, ImGroupUser::getLastActive) + .eq(ImGroupUser::getGroupId, groupId); + List imGroupUsers = imGroupUserMapper.selectList(imGroupUserQueryWrapper); + List groupUsers = imGroupUsers.stream().map(gu -> new GroupUser_0() + .setUid(gu.getUid()) + .setLastActive(gu.getLastActive() == null ? null : gu.getLastActive().getTime()) + ).collect(Collectors.toList()); + return groupUsers; + } + +} diff --git a/im-das/im-das-group/src/main/resources/application.properties b/im-das/im-das-group/src/main/resources/application.properties new file mode 100644 index 0000000..bfba7cb --- /dev/null +++ b/im-das/im-das-group/src/main/resources/application.properties @@ -0,0 +1,30 @@ + + +# sharding-jdbc +# Դ +spring.shardingsphere.datasource.names=ds1 +spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver +spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://cd-cdb-mrz9fw80.sql.tencentcdb.com:61843/soim_db?serverTimezone=GMT%2B8 +spring.shardingsphere.datasource.ds1.username=root +spring.shardingsphere.datasource.ds1.password=sopod@2347# + +# 5.1.0 ֱ +# https://github.com/apache/shardingsphere/blob/master/examples/shardingsphere-jdbc-example/single-feature-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-tables.yaml + +# sharding-jdbc sql־ +spring.shardingsphere.props.sql-show=true +# Ҫshardingı +spring.shardingsphere.rules.sharding.binding-tables=im_group,im_group_user +# im_group +spring.shardingsphere.rules.sharding.tables.im_group.actual-data-nodes=ds1.im_group_$->{0..3} +spring.shardingsphere.rules.sharding.tables.im_group.table-strategy.standard.sharding-column=id +spring.shardingsphere.rules.sharding.tables.im_group.table-strategy.standard.sharding-algorithm-name=im-group-inline +spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-inline.type=INLINE +spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-inline.props.algorithm-expression=im_group_$->{id & 3} +# im_group_user +spring.shardingsphere.rules.sharding.tables.im_group_user.actual-data-nodes=ds1.im_group_user_$->{0..7} +spring.shardingsphere.rules.sharding.tables.im_group_user.table-strategy.standard.sharding-column=group_id +spring.shardingsphere.rules.sharding.tables.im_group_user.table-strategy.standard.sharding-algorithm-name=im-group-user-inline +spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-user-inline.type=INLINE +spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-user-inline.props.algorithm-expression=im_group_user_$->{group_id & 7} diff --git a/im-das/im-das-group/src/main/resources/application.yml b/im-das/im-das-group/src/main/resources/application.yml new file mode 100644 index 0000000..1787594 --- /dev/null +++ b/im-das/im-das-group/src/main/resources/application.yml @@ -0,0 +1,20 @@ +spring: + application: + name: im-das-group + +dubbo: + application: + name: ${spring.application.name} + registry: + address: nacos://124.222.131.236:3848 + group: so-im + protocol: + port: 3014 + consumer: + check: false + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + +im-segment-id: + enabled: true diff --git a/im-das/im-das-group/src/main/resources/mapper/ImGroupMapper.xml b/im-das/im-das-group/src/main/resources/mapper/ImGroupMapper.xml new file mode 100644 index 0000000..f2c7e0f --- /dev/null +++ b/im-das/im-das-group/src/main/resources/mapper/ImGroupMapper.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/im-das/im-das-user/src/main/resources/mapper/ImGroupMapper.xml b/im-das/im-das-group/src/main/resources/mapper/ImGroupUserMapper.xml similarity index 65% rename from im-das/im-das-user/src/main/resources/mapper/ImGroupMapper.xml rename to im-das/im-das-group/src/main/resources/mapper/ImGroupUserMapper.xml index 71d1c3a..bbd2311 100644 --- a/im-das/im-das-user/src/main/resources/mapper/ImGroupMapper.xml +++ b/im-das/im-das-group/src/main/resources/mapper/ImGroupUserMapper.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/im-das/im-das-message/pom.xml b/im-das/im-das-message/pom.xml new file mode 100644 index 0000000..2d6c0b1 --- /dev/null +++ b/im-das/im-das-message/pom.xml @@ -0,0 +1,26 @@ + + + + im-das + net.sopod + 1.0.0 + + 4.0.0 + + im-das-message + + + + net.sopod + im-common + ${soim.version} + + + net.sopod + im-das-message-api + ${soim.version} + + + \ No newline at end of file diff --git a/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/DasMessageApplication.java b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/DasMessageApplication.java new file mode 100644 index 0000000..074d79c --- /dev/null +++ b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/DasMessageApplication.java @@ -0,0 +1,21 @@ +package net.sopod.soim.das.message; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * DasMessageApplication + * + * @author tmy + * @date 2022-06-03 11:53 + */ +@MapperScan("net.sopod.soim.das.message.dao") +@SpringBootApplication +public class DasMessageApplication { + + public static void main(String[] args) { + SpringApplication.run(DasMessageApplication.class); + } + +} diff --git a/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/consumer/ImMessagePersistentListener.java b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/consumer/ImMessagePersistentListener.java new file mode 100644 index 0000000..d758732 --- /dev/null +++ b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/consumer/ImMessagePersistentListener.java @@ -0,0 +1,56 @@ +package net.sopod.soim.das.message.consumer; + +import lombok.AllArgsConstructor; +import net.sopod.soim.das.message.api.entity.ImGroupMessage; +import net.sopod.soim.das.message.api.entity.ImMessage; +import net.sopod.soim.das.message.api.mq.ChatQueue; +import net.sopod.soim.das.message.dao.ImGroupMessageMapper; +import net.sopod.soim.das.message.dao.ImMessageMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Service; + +/** + * Listener + * 只能接受字符串和字节数组 + * + * @author tmy + * @date 2022-05-28 16:26 + */ +@Service +@AllArgsConstructor +@RabbitListener(queues = { + ChatQueue.IM_MESSAGE_PERSISTENT, + ChatQueue.IM_GROUP_MESSAGE_PERSISTENT +}) +public class ImMessagePersistentListener { + + private static final Logger logger = LoggerFactory.getLogger(ImMessagePersistentListener.class); + + ImMessageMapper imMessageMapper; + + ImGroupMessageMapper imGroupMessageMapper; + + @RabbitHandler + public void process(ImGroupMessage imGroupMessage) { + // System.out.println("receiver2: " + imGroupMessage); + try { + imGroupMessageMapper.insert(imGroupMessage); + } catch (Exception e) { + logger.error("ImGroupMessage insert 失败: {}", imGroupMessage); + } + } + + @RabbitHandler + public void process(ImMessage imMessage) { + // System.out.println("receive3: " + imMessage); + try { + imMessageMapper.insert(imMessage); + } catch (Exception e) { + logger.error("ImMessage insert 失败: {}", imMessage); + } + } + +} diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Sender.java b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/consumer/Sender.java similarity index 92% rename from im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Sender.java rename to im-das/im-das-message/src/main/java/net/sopod/soim/das/message/consumer/Sender.java index 368881d..6b2d85e 100644 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Sender.java +++ b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/consumer/Sender.java @@ -1,11 +1,11 @@ -package net.sopod.soim.das.user.amqp; +package net.sopod.soim.das.message.consumer; import lombok.AllArgsConstructor; import net.sopod.soim.common.util.ImClock; -import net.sopod.soim.das.user.api.config.LogicTables; -import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; -import net.sopod.soim.das.user.api.model.entity.ImMessage; -import net.sopod.soim.das.user.api.mq.ChatQueueType; +import net.sopod.soim.das.common.config.LogicTables; +import net.sopod.soim.das.message.api.entity.ImGroupMessage; +import net.sopod.soim.das.message.api.entity.ImMessage; +import net.sopod.soim.das.message.api.mq.ChatQueueType; import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.boot.context.event.ApplicationReadyEvent; @@ -54,7 +54,7 @@ public class Sender implements ApplicationListener { .setId(id) .setSender(10808L) .setReceiver(180002L) - .setFriendId(101010L) + .setRelationId(101010L) .setContent(content) .setCreateTime(ImClock.date()); amqpTemplate.convertAndSend(ChatQueueType.IM_MESSAGE.getQueueName(), imMessage); diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMessageMapper.java b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/dao/ImGroupMessageMapper.java similarity index 59% rename from im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMessageMapper.java rename to im-das/im-das-message/src/main/java/net/sopod/soim/das/message/dao/ImGroupMessageMapper.java index 055da721..9cacb32 100644 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImGroupMessageMapper.java +++ b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/dao/ImGroupMessageMapper.java @@ -1,13 +1,13 @@ -package net.sopod.soim.das.user.dao; +package net.sopod.soim.das.message.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; +import net.sopod.soim.das.message.api.entity.ImGroupMessage; /** * ImGroupMessageMapper * * @author tmy - * @date 2022-05-31 9:59 + * @date 2022-06-03 17:16 */ public interface ImGroupMessageMapper extends BaseMapper { diff --git a/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/dao/ImMessageMapper.java b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/dao/ImMessageMapper.java new file mode 100644 index 0000000..baa980a --- /dev/null +++ b/im-das/im-das-message/src/main/java/net/sopod/soim/das/message/dao/ImMessageMapper.java @@ -0,0 +1,14 @@ +package net.sopod.soim.das.message.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import net.sopod.soim.das.message.api.entity.ImMessage; + +/** + * ImMessageMapper + * + * @author tmy + * @date 2022-06-03 17:16 + */ +public interface ImMessageMapper extends BaseMapper { + +} diff --git a/im-das/im-das-message/src/main/resources/application.properties b/im-das/im-das-message/src/main/resources/application.properties new file mode 100644 index 0000000..72ce39e --- /dev/null +++ b/im-das/im-das-message/src/main/resources/application.properties @@ -0,0 +1,34 @@ +# sharding-jdbc +# Դ +spring.shardingsphere.datasource.names=ds1 +spring.shardingsphere.datasource.ds1.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver +spring.shardingsphere.datasource.ds1.jdbc-url=jdbc:mysql://cd-cdb-mrz9fw80.sql.tencentcdb.com:61843/soim_db?serverTimezone=GMT%2B8 +spring.shardingsphere.datasource.ds1.username=root +spring.shardingsphere.datasource.ds1.password=sopod@2347# + +# ֱ +#spring.shardingsphere.sharding.tables.im_user.actual-data-nodes=db1.im_user_$->{0..2} +## ָim_userķƬԣƬ԰ƬͷƬ㷨 +#spring.shardingsphere.sharding.tables.im_user.table-strategy.inline.sharding-column=id +#spring.shardingsphere.sharding.tables.im_user.table-strategy.inline.algorithm-expression=im_user_$->{id % 3} + +# 5.1.0 ֱ +# https://github.com/apache/shardingsphere/blob/master/examples/shardingsphere-jdbc-example/single-feature-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-tables.yaml + +# sharding-jdbc sql־ +spring.shardingsphere.props.sql-show=true +# Ҫshardingı +spring.shardingsphere.rules.sharding.binding-tables=im_message,im_group_message +# im_message +spring.shardingsphere.rules.sharding.tables.im_message.actual-data-nodes=ds1.im_message_$->{0..7} +spring.shardingsphere.rules.sharding.tables.im_message.table-strategy.standard.sharding-column=relation_id +spring.shardingsphere.rules.sharding.tables.im_message.table-strategy.standard.sharding-algorithm-name=im-message-inline +spring.shardingsphere.rules.sharding.sharding-algorithms.im-message-inline.type=INLINE +spring.shardingsphere.rules.sharding.sharding-algorithms.im-message-inline.props.algorithm-expression=im_message_$->{relation_id & 7} +# im_group_message +spring.shardingsphere.rules.sharding.tables.im_group_message.actual-data-nodes=ds1.im_group_message_$->{0..15} +spring.shardingsphere.rules.sharding.tables.im_group_message.table-strategy.standard.sharding-column=group_id +spring.shardingsphere.rules.sharding.tables.im_group_message.table-strategy.standard.sharding-algorithm-name=im-group-message-inline +spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-message-inline.type=INLINE +spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-message-inline.props.algorithm-expression=im_group_message_$->{group_id & 15} diff --git a/im-das/im-das-message/src/main/resources/application.yml b/im-das/im-das-message/src/main/resources/application.yml new file mode 100644 index 0000000..36ba5e9 --- /dev/null +++ b/im-das/im-das-message/src/main/resources/application.yml @@ -0,0 +1,25 @@ +spring: + application: + name: im-das-message + rabbitmq: + host: 124.222.131.236 + port: 3672 + username: soim + password: sopod@rabbit# + +dubbo: + application: + name: ${spring.application.name} + registry: + address: nacos://124.222.131.236:3848 + group: so-im + protocol: + port: 3011 + consumer: + check: false + +mybatis-plus: + mapper-locations: classpath:mapper/*.xml + +im-segment-id: + enabled: true diff --git a/im-das/im-das-message/src/main/resources/mapper/ImGroupMessageMapper.xml b/im-das/im-das-message/src/main/resources/mapper/ImGroupMessageMapper.xml new file mode 100644 index 0000000..4cf3f87 --- /dev/null +++ b/im-das/im-das-message/src/main/resources/mapper/ImGroupMessageMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/im-das/im-das-user/src/main/resources/mapper/ImGroupMessageMapper.xml b/im-das/im-das-message/src/main/resources/mapper/ImMessageMapper.xml similarity index 65% rename from im-das/im-das-user/src/main/resources/mapper/ImGroupMessageMapper.xml rename to im-das/im-das-message/src/main/resources/mapper/ImMessageMapper.xml index c41c6ae..85f4a91 100644 --- a/im-das/im-das-user/src/main/resources/mapper/ImGroupMessageMapper.xml +++ b/im-das/im-das-message/src/main/resources/mapper/ImMessageMapper.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/im-das/im-das-user/pom.xml b/im-das/im-das-user/pom.xml index 96c68ec..53198b7 100644 --- a/im-das/im-das-user/pom.xml +++ b/im-das/im-das-user/pom.xml @@ -22,88 +22,6 @@ im-das-user-api ${soim.version} - - net.sopod - im-segment-id-api - ${soim.version} - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-logging - - - - - org.springframework.boot - spring-boot-starter-log4j2 - - - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - - - - - org.apache.dubbo - dubbo-spring-boot-starter - - - org.apache.dubbo - dubbo-registry-nacos - - - org.apache.shardingsphere - shardingsphere-jdbc-core-spring-boot-starter - - - - mysql - mysql-connector-java - - - com.zaxxer - HikariCP - - - com.baomidou - mybatis-plus-boot-starter - - - org.springframework - spring-orm - - - - org.springframework.boot - spring-boot-starter-amqp - - - org.msgpack - jackson-dataformat-msgpack - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - - \ No newline at end of file diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Receiver.java b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Receiver.java deleted file mode 100644 index 31abc78..0000000 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/amqp/Receiver.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.sopod.soim.das.user.amqp; - -import lombok.AllArgsConstructor; -import net.sopod.soim.das.user.api.model.entity.ImGroupMessage; -import net.sopod.soim.das.user.api.model.entity.ImMessage; -import net.sopod.soim.das.user.api.mq.ChatQueue; -import net.sopod.soim.das.user.dao.ImGroupMessageMapper; -import net.sopod.soim.das.user.dao.ImMessageMapper; -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.stereotype.Service; - -/** - * Listener - * 只能接受字符串和字节数组 - * - * @author tmy - * @date 2022-05-28 16:26 - */ -@Service -@AllArgsConstructor -@RabbitListener(queues = { - ChatQueue.IM_MESSAGE_PERSISTENT, - ChatQueue.IM_GROUP_MESSAGE_PERSISTENT -}) -public class Receiver { - - ImMessageMapper imMessageMapper; - - ImGroupMessageMapper imGroupMessageMapper; - - @RabbitHandler - public void process(ImGroupMessage imGroupMessage) { - System.out.println("receiver2: " + imGroupMessage); - imGroupMessageMapper.insert(imGroupMessage); - } - - @RabbitHandler - public void process(ImMessage imMessage) { - System.out.println("receive3: " + imMessage); - imMessageMapper.insert(imMessage); - } - -} diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImMessageMapper.java b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImMessageMapper.java deleted file mode 100644 index 322b321..0000000 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/ImMessageMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package net.sopod.soim.das.user.dao; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import net.sopod.soim.das.user.api.model.entity.ImMessage; - -/** - * ImMessageMapper - * - * @author tmy - * @date 2022-05-31 9:47 - */ -public interface ImMessageMapper extends BaseMapper { - -} diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java index 06f147b..0c5a837 100644 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java +++ b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.AllArgsConstructor; import net.sopod.soim.common.util.Collects; import net.sopod.soim.common.util.ImClock; -import net.sopod.soim.das.user.api.config.LogicTables; +import net.sopod.soim.das.common.config.LogicTables; import net.sopod.soim.das.user.api.model.entity.ImFriend; import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.service.FriendDas; @@ -37,27 +37,40 @@ public class FriendDasImpl implements FriendDas { private UserMapper userMapper; - @Override - public int insert(Long uid, Long fid) { + public int saveFriendRelation(Long uid, Long fid) { long id = segmentIdGenerator.nextId(LogicTables.IM_FRIEND); + long relationId = segmentIdGenerator.nextId(LogicTables.IM_FRIEND_RELATION); ImFriend imFriend = new ImFriend() .setId(id) + .setRelationId(relationId) .setUid(uid) .setFid(fid) .setStatus(1) .setUnreadNum(0) .setUnreadOffsetId(0L) .setCreateTime(ImClock.date()); - return friendMapper.insert(imFriend); + // 相互添加好友 + ImFriend imFriend2 = new ImFriend() + .setId(id) + .setRelationId(relationId) + .setUid(fid) + .setFid(uid) + .setStatus(1) + .setUnreadNum(0) + .setUnreadOffsetId(0L) + .setCreateTime(ImClock.date()); + friendMapper.insert(imFriend); + return friendMapper.insert(imFriend2); } /** * TODO cache */ @Override - public Long getFriendId(Long uid, Long fid) { + public Long getRelationId(Long uid, Long fid) { LambdaQueryWrapper friendQuery = new QueryWrapper().lambda() + .select(ImFriend::getId, ImFriend::getRelationId) .eq(ImFriend::getUid, uid) .eq(ImFriend::getFid, fid) .eq(ImFriend::getStatus, LogicTables.STATUS_NORMAL); @@ -68,12 +81,12 @@ public class FriendDasImpl implements FriendDas { if (imFriends.size() > 1) { logger.warn("重复的好友数据: user={}, friend={}", uid, fid); } - return imFriends.get(0).getId(); + return imFriends.get(0).getRelationId(); } @Override public Boolean isExists(Long uid, Long fid) { - return getFriendId(uid, fid) != null; + return getRelationId(uid, fid) != null; } @Override diff --git a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasImpl.java b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasImpl.java index 39fd59a..9732684 100644 --- a/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasImpl.java +++ b/im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasImpl.java @@ -10,6 +10,7 @@ import net.sopod.soim.das.user.api.service.UserDas; import net.sopod.soim.das.user.dao.UserMapper; import org.apache.dubbo.config.annotation.DubboService; +import java.util.Collection; import java.util.List; /** @@ -49,5 +50,10 @@ public class UserDasImpl implements UserDas { return imUserPage.getRecords(); } + @Override + public List listUsers(Collection uids) { + return userMapper.selectBatchIds(uids); + } + } diff --git a/im-das/im-das-user/src/main/resources/application.properties b/im-das/im-das-user/src/main/resources/application.properties index 9cd4daa..b5fbc07 100644 --- a/im-das/im-das-user/src/main/resources/application.properties +++ b/im-das/im-das-user/src/main/resources/application.properties @@ -1,5 +1,3 @@ -spring.profiles.active=${SPRING_PROFILES_ACTIVE:dev} - # sharding-jdbc # Դ spring.shardingsphere.datasource.names=ds1 @@ -21,7 +19,7 @@ spring.shardingsphere.datasource.ds1.password=sopod@2347# # sharding-jdbc sql־ spring.shardingsphere.props.sql-show=true # Ҫshardingı -spring.shardingsphere.rules.sharding.binding-tables=im_user,im_friend,im_message,im_group,im_group_user,im_group_message +spring.shardingsphere.rules.sharding.binding-tables=im_user,im_friend,im_message # im_user spring.shardingsphere.rules.sharding.tables.im_user.actual-data-nodes=ds1.im_user_$->{0..3} spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-column=id @@ -40,21 +38,3 @@ spring.shardingsphere.rules.sharding.tables.im_message.table-strategy.standard.s spring.shardingsphere.rules.sharding.tables.im_message.table-strategy.standard.sharding-algorithm-name=im-message-inline spring.shardingsphere.rules.sharding.sharding-algorithms.im-message-inline.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.im-message-inline.props.algorithm-expression=im_message_$->{friend_id & 7} -# im_group -spring.shardingsphere.rules.sharding.tables.im_group.actual-data-nodes=ds1.im_group_$->{0..3} -spring.shardingsphere.rules.sharding.tables.im_group.table-strategy.standard.sharding-column=id -spring.shardingsphere.rules.sharding.tables.im_group.table-strategy.standard.sharding-algorithm-name=im-group-inline -spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-inline.type=INLINE -spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-inline.props.algorithm-expression=im_group_$->{id & 3} -# im_group_user -spring.shardingsphere.rules.sharding.tables.im_group_user.actual-data-nodes=ds1.im_group_user_$->{0..7} -spring.shardingsphere.rules.sharding.tables.im_group_user.table-strategy.standard.sharding-column=uid -spring.shardingsphere.rules.sharding.tables.im_group_user.table-strategy.standard.sharding-algorithm-name=im-group-user-inline -spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-user-inline.type=INLINE -spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-user-inline.props.algorithm-expression=im_group_user_$->{uid & 7} -# im_group_message -spring.shardingsphere.rules.sharding.tables.im_group_message.actual-data-nodes=ds1.im_group_message_$->{0..15} -spring.shardingsphere.rules.sharding.tables.im_group_message.table-strategy.standard.sharding-column=group_id -spring.shardingsphere.rules.sharding.tables.im_group_message.table-strategy.standard.sharding-algorithm-name=im-group-message-inline -spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-message-inline.type=INLINE -spring.shardingsphere.rules.sharding.sharding-algorithms.im-group-message-inline.props.algorithm-expression=im_group_message_$->{group_id & 15} diff --git a/im-das/im-das-user/src/main/resources/application.yml b/im-das/im-das-user/src/main/resources/application.yml index 55ec068..1b38265 100644 --- a/im-das/im-das-user/src/main/resources/application.yml +++ b/im-das/im-das-user/src/main/resources/application.yml @@ -1,11 +1,6 @@ spring: application: name: im-das-user - rabbitmq: - host: 124.222.131.236 - port: 3672 - username: soim - password: sopod@rabbit# dubbo: application: diff --git a/im-das/im-das-user/src/main/resources/mapper/ImMessageMapper.xml b/im-das/im-das-user/src/main/resources/mapper/ImMessageMapper.xml deleted file mode 100644 index 9a010c3..0000000 --- a/im-das/im-das-user/src/main/resources/mapper/ImMessageMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/im-das/im-das-user/src/test/java/nets/sopod/soim/das/user/dao/DasImUserShardingTest.java b/im-das/im-das-user/src/test/java/nets/sopod/soim/das/user/dao/DasImUserShardingTest.java index 8f5991d..d0279b4 100644 --- a/im-das/im-das-user/src/test/java/nets/sopod/soim/das/user/dao/DasImUserShardingTest.java +++ b/im-das/im-das-user/src/test/java/nets/sopod/soim/das/user/dao/DasImUserShardingTest.java @@ -2,9 +2,9 @@ package nets.sopod.soim.das.user.dao; import com.google.common.base.Preconditions; import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.das.common.config.LogicTables; import net.sopod.soim.das.user.DasUserApplication; import net.sopod.soim.das.user.api.model.entity.ImUser; -import net.sopod.soim.das.user.api.config.LogicTables; import net.sopod.soim.das.user.dao.UserMapper; import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; import org.junit.Test; diff --git a/im-das/pom.xml b/im-das/pom.xml index 2ae5867..6da8796 100644 --- a/im-das/pom.xml +++ b/im-das/pom.xml @@ -13,6 +13,89 @@ pom im-das-user + im-das-group + im-das-message + + + net.sopod + im-segment-id-api + ${soim.version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + + org.apache.dubbo + dubbo-spring-boot-starter + + + org.apache.dubbo + dubbo-registry-nacos + + + org.apache.shardingsphere + shardingsphere-jdbc-core-spring-boot-starter + + + mysql + mysql-connector-java + + + com.zaxxer + HikariCP + + + com.baomidou + mybatis-plus-boot-starter + + + org.springframework + spring-orm + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.msgpack + jackson-dataformat-msgpack + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + \ No newline at end of file diff --git a/im-entry/pom.xml b/im-entry/pom.xml index be965f3..93fa74e 100644 --- a/im-entry/pom.xml +++ b/im-entry/pom.xml @@ -36,11 +36,11 @@ im-logic-user-api ${soim.version} - - - - - + + net.sopod + im-logic-group-api + ${soim.version} + org.projectlombok lombok diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/auth/ReqTokenAuthHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/auth/ReqTokenAuthHandler.java index 5398c6f..12f01b2 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/auth/ReqTokenAuthHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/auth/ReqTokenAuthHandler.java @@ -2,6 +2,7 @@ package net.sopod.soim.entry.handlers.auth; import com.google.protobuf.MessageLite; import net.sopod.soim.entry.config.ImEntryAppContextHolder; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.handler.NetUserMessageHandler; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.entry.server.session.NetUser; @@ -43,7 +44,7 @@ public class ReqTokenAuthHandler extends NetUserMessageHandler { + + @Override + public MessageLite handle(ImContext ctx, Account account, Group.ReqGroupMessage req) { + return null; + } + +} diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/chat/ReqTextChatHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/chat/ReqTextChatHandler.java index 64f32c2..7ee1cd0 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/chat/ReqTextChatHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/chat/ReqTextChatHandler.java @@ -2,6 +2,7 @@ package net.sopod.soim.entry.handlers.chat; import com.google.protobuf.MessageLite; import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.data.msg.chat.Chat; import net.sopod.soim.logic.common.model.TextChat; @@ -26,7 +27,7 @@ public class ReqTextChatHandler extends AccountMessageHandler { private ChatService chatService; @Override - public MessageLite handle(Account account, Chat.TextChat msg) { + public MessageLite handle(ImContext ctx, Account account, Chat.TextChat msg) { TextChat textChat = new TextChat() .setUid(msg.getSender()) .setReceiverUid(msg.getReceiver()) diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqCreateGroupHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqCreateGroupHandler.java new file mode 100644 index 0000000..451c26f --- /dev/null +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqCreateGroupHandler.java @@ -0,0 +1,41 @@ +package net.sopod.soim.entry.handlers.group; + +import com.google.protobuf.MessageLite; +import net.sopod.soim.common.dubbo.exception.SoimException; +import net.sopod.soim.data.msg.common.Res; +import net.sopod.soim.data.msg.group.Group; +import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; +import net.sopod.soim.entry.server.session.Account; +import net.sopod.soim.logic.api.group.service.ImGroupService; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +/** + * ReqCreateGroupHandler + * + * @author tmy + * @date 2022-06-03 10:43 + */ +@Service +public class ReqCreateGroupHandler extends AccountMessageHandler { + + @DubboReference + private ImGroupService imGroupService; + + @Override + public MessageLite handle(ImContext ctx, Account account, Group.ReqCreateGroup req) { + String groupName = req.getGroupName(); + Res.ResState.Builder resBuilder = Res.ResState.newBuilder(); + try { + Long groupId = imGroupService.createGroup(account.getUid(), groupName); + resBuilder.setSuccess(true) + .setMessage("群聊创建成功:" + groupId); + } catch (SoimException e) { + resBuilder.setSuccess(false) + .setMessage(e.getMessage()); + } + return resBuilder.build(); + } + +} diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqGroupUsersHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqGroupUsersHandler.java new file mode 100644 index 0000000..9a30717 --- /dev/null +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqGroupUsersHandler.java @@ -0,0 +1,44 @@ +package net.sopod.soim.entry.handlers.group; + +import com.google.protobuf.MessageLite; +import net.sopod.soim.data.msg.group.Group; +import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; +import net.sopod.soim.entry.server.session.Account; +import net.sopod.soim.logic.api.group.model.dto.GroupUserInfo; +import net.sopod.soim.logic.api.group.service.ImGroupService; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * ReqGroupUsersHandler + * + * @author tmy + * @date 2022-06-05 10:33 + */ +@Service +public class ReqGroupUsersHandler extends AccountMessageHandler { + + @DubboReference + private ImGroupService imGroupService; + + @Override + public MessageLite handle(ImContext ctx, Account account, Group.ReqGroupUsers req) { + List groupUserInfos = imGroupService.listGroupUsers(req.getGid()); + List userInfos = groupUserInfos.stream().map(gu -> Group.UserInfo.newBuilder() + .setUid(gu.getUid()) + .setAccount(gu.getAccount()) + .setNickname(gu.getNickname()) + .setOnline(Boolean.TRUE.equals(gu.getOnline())) + .setLastActive(gu.getLastActive()) + .build() + ).collect(Collectors.toList()); + return Group.ResGroupUsers.newBuilder() + .addAllUsers(userInfos) + .build(); + } + +} diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqJoinGroupHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqJoinGroupHandler.java new file mode 100644 index 0000000..0ea4536 --- /dev/null +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqJoinGroupHandler.java @@ -0,0 +1,41 @@ +package net.sopod.soim.entry.handlers.group; + +import com.google.protobuf.MessageLite; +import net.sopod.soim.common.dubbo.exception.SoimException; +import net.sopod.soim.data.msg.common.Res; +import net.sopod.soim.data.msg.group.Group; +import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; +import net.sopod.soim.entry.server.session.Account; +import net.sopod.soim.logic.api.group.service.ImGroupService; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +/** + * ReqJoinGroupHandler + * + * @author tmy + * @date 2022-06-05 10:28 + */ +@Service +public class ReqJoinGroupHandler extends AccountMessageHandler { + + @DubboReference + private ImGroupService imGroupService; + + @Override + public MessageLite handle(ImContext ctx, Account account, Group.ReqJoinGroup req) { + long groupId = req.getGid(); + Res.ResState.Builder resBuilder = Res.ResState.newBuilder(); + try { + Long joinId = imGroupService.joinGroup(groupId, account.getUid()); + resBuilder.setSuccess(true) + .setMessage("加入群聊成功:" + joinId); + } catch (SoimException e) { + resBuilder.setSuccess(false) + .setMessage(e.getMessage()); + } + return resBuilder.build(); + } + +} diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqSearchGroupHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqSearchGroupHandler.java new file mode 100644 index 0000000..aa05a9d --- /dev/null +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/group/ReqSearchGroupHandler.java @@ -0,0 +1,43 @@ +package net.sopod.soim.entry.handlers.group; + +import com.google.protobuf.MessageLite; +import net.sopod.soim.das.group.api.model.entity.ImGroup; +import net.sopod.soim.data.msg.group.Group; +import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; +import net.sopod.soim.entry.server.session.Account; +import net.sopod.soim.logic.api.group.service.ImGroupService; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * ReqSearchGroupHandler + * + * @author tmy + * @date 2022-06-05 09:20 + */ +@Service +public class ReqSearchGroupHandler extends AccountMessageHandler { + + @DubboReference + private ImGroupService imGroupService; + + @Override + public MessageLite handle(ImContext ctx, Account account, Group.ReqSearchGroup req) { + String groupName = req.getGroupName(); + List imGroups = imGroupService.searchGroup(groupName); + List groupInfos = imGroups.stream().map(imGroup -> Group.GroupInfo.newBuilder() + .setGid(imGroup.getId()) + .setGroupName(imGroup.getGroupName()) + .setUserLimit(imGroup.getUserLimit()) + .setUserNum(imGroup.getUserNum()) + .setCreateTime(imGroup.getCreateTime().getTime()) + .build() + ).collect(Collectors.toList()); + return Group.ResSearchGroup.newBuilder().addAllGroups(groupInfos).build(); + } + +} diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/task/NetUserDelayCloseHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/task/NetUserDelayCloseHandler.java index f64d7f9..acad01d 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/task/NetUserDelayCloseHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/task/NetUserDelayCloseHandler.java @@ -1,6 +1,7 @@ package net.sopod.soim.entry.handlers.task; import com.google.protobuf.MessageLite; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.handler.NetUserMessageHandler; import net.sopod.soim.entry.server.session.NetUser; import net.sopod.soim.data.msg.task.Tasks; @@ -16,7 +17,7 @@ import org.springframework.stereotype.Service; public class NetUserDelayCloseHandler extends NetUserMessageHandler { @Override - public MessageLite handle(NetUser netUser, Tasks.NetUserDelayCloseTask msg) { + public MessageLite handle(ImContext ctx, NetUser netUser, Tasks.NetUserDelayCloseTask msg) { if (netUser.isAccount()) { return null; } diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/HelloHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/HelloHandler.java index ec7c17c..e7936c8 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/HelloHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/HelloHandler.java @@ -1,6 +1,7 @@ package net.sopod.soim.entry.handlers.user; import com.google.protobuf.MessageLite; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.data.msg.hello.HelloPB; import net.sopod.soim.entry.delay.NetUserDelayTaskManager; @@ -36,7 +37,7 @@ public class HelloHandler extends AccountMessageHandler { private SegmentIdGenerator segmentIdGenerator; @Override - public MessageLite handle(Account account, HelloPB.Hello msg) { + public MessageLite handle(ImContext ctx, Account account, HelloPB.Hello msg) { logger.info("get hello message: {}", segmentIdGenerator.nextId("im-entry-hello")); logger.info("msg={}, {}", msg.getId(), msg.getStr()); CompletableFuture hi = userBizService.sayHi("黄绿"); diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java index 09dcb30..d3fe3ff 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java @@ -5,6 +5,7 @@ import net.sopod.soim.data.msg.user.AccountSearch; import net.sopod.soim.data.msg.user.UserGroup; import net.sopod.soim.data.msg.user.UserMsg; import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.logic.api.user.service.AccountService; import net.sopod.soim.logic.common.model.UserInfo; @@ -28,7 +29,7 @@ public class ReqAccountSearchHandler extends AccountMessageHandler> future = accountService.searchAccountLikely(msg.getKeyword()); future.thenAccept(userInfos -> { List infos = userInfos.stream().map( @@ -41,7 +42,7 @@ public class ReqAccountSearchHandler extends AccountMessageHandler { diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqFriendListHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqFriendListHandler.java index f05cd5d..10bab85 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqFriendListHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqFriendListHandler.java @@ -5,6 +5,7 @@ import lombok.extern.slf4j.Slf4j; import net.sopod.soim.data.msg.user.Friend; import net.sopod.soim.data.msg.user.UserMsg; import net.sopod.soim.entry.server.handler.AccountMessageHandler; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.entry.worker.FutureExecutor; import net.sopod.soim.logic.api.user.service.FriendService; @@ -31,7 +32,7 @@ public class ReqFriendListHandler extends AccountMessageHandler> future = friendService.listFriend(account.getUid()); future.whenCompleteAsync((friends, err) -> { List userInfos = friends.stream().map(acc -> UserMsg.UserInfo.newBuilder() @@ -42,7 +43,7 @@ public class ReqFriendListHandler extends AccountMessageHandler { log.error("好友列表查询失败", err); diff --git a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqOnlineUserListHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqOnlineUserListHandler.java index 27e0cdb..a0d4d83 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqOnlineUserListHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqOnlineUserListHandler.java @@ -2,6 +2,7 @@ package net.sopod.soim.entry.handlers.user; import com.google.protobuf.MessageLite; import net.sopod.soim.data.msg.user.UserMsg; +import net.sopod.soim.entry.server.handler.ImContext; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.data.msg.user.UserGroup; import net.sopod.soim.entry.server.handler.AccountMessageHandler; @@ -30,7 +31,7 @@ public class ReqOnlineUserListHandler extends AccountMessageHandler userInfos = userBizService.onlineUserList(msg.getKeyword()); List resUserInfos = userInfos.stream().map(user -> UserMsg.UserInfo.newBuilder() diff --git a/im-entry/src/main/java/net/sopod/soim/entry/server/ImEntryInitializer.java b/im-entry/src/main/java/net/sopod/soim/entry/server/ImEntryInitializer.java index 501fe9b..b9002d3 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/server/ImEntryInitializer.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/server/ImEntryInitializer.java @@ -22,7 +22,6 @@ public class ImEntryInitializer extends ChannelInitializer { @Override protected void initChannel(SocketChannel socketChannel) { - logger.info("init channel: {}", socketChannel); LogLevel logLevel = logger.isDebugEnabled() ? LogLevel.DEBUG : LogLevel.INFO; ChannelPipeline pipeline = socketChannel.pipeline(); pipeline.addLast(new LoggingHandler(logLevel)) diff --git a/im-entry/src/main/java/net/sopod/soim/entry/server/handler/AccountMessageHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/server/handler/AccountMessageHandler.java index b77ca6b..826ae91 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/server/handler/AccountMessageHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/server/handler/AccountMessageHandler.java @@ -1,6 +1,7 @@ package net.sopod.soim.entry.server.handler; import com.google.protobuf.MessageLite; +import net.sopod.soim.common.dubbo.exception.SoimException; import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.entry.server.session.NetUser; @@ -16,14 +17,14 @@ public abstract class AccountMessageHandler implements MessageHandler { @Override public final void exec(ImContext ctx, NetUser netUser, T req) { if (!netUser.isAccount()) { - throw new IllegalStateException("NetUser is not account!" + netUser); + throw new SoimException("NetUser is not account!" + netUser); } - MessageLite res = handle((Account) netUser, req); + MessageLite res = handle(ctx, (Account) netUser, req); if (res != null) { netUser.writeNow(ctx, res); } } - public abstract MessageLite handle(Account account, T req); + public abstract MessageLite handle(ImContext ctx, Account account, T req); } diff --git a/im-entry/src/main/java/net/sopod/soim/entry/server/handler/NetUserMessageHandler.java b/im-entry/src/main/java/net/sopod/soim/entry/server/handler/NetUserMessageHandler.java index 0c4c8e5..ce17554 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/server/handler/NetUserMessageHandler.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/server/handler/NetUserMessageHandler.java @@ -13,12 +13,12 @@ public abstract class NetUserMessageHandler implements MessageHandler { @Override public final void exec(ImContext ctx, NetUser netUser, T msg) { - MessageLite res = handle(netUser, msg); + MessageLite res = handle(ctx, netUser, msg); if (res != null) { netUser.writeNow(ctx, res); } } - public abstract MessageLite handle(NetUser netUser, T msg); + public abstract MessageLite handle(ImContext ctx, NetUser netUser, T msg); } diff --git a/im-entry/src/main/java/net/sopod/soim/entry/server/session/NetUser.java b/im-entry/src/main/java/net/sopod/soim/entry/server/session/NetUser.java index ed589cf..2653db9 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/server/session/NetUser.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/server/session/NetUser.java @@ -47,10 +47,16 @@ public class NetUser { } } + /** + * 客户端通过 dispatcher 消费 + */ public void writeNow(MessageLite message) { write0(null, message); } + /** + * 客户端可同步消费,根据请求id对应响应 + */ public void writeNow(ImContext ctx, MessageLite message) { write0(ctx.getSerialNo(), message); } diff --git a/im-entry/src/main/java/net/sopod/soim/entry/service/TextChatServiceImpl.java b/im-entry/src/main/java/net/sopod/soim/entry/service/TextChatServiceImpl.java index 969b6cc..dbcaeaf 100644 --- a/im-entry/src/main/java/net/sopod/soim/entry/service/TextChatServiceImpl.java +++ b/im-entry/src/main/java/net/sopod/soim/entry/service/TextChatServiceImpl.java @@ -41,7 +41,7 @@ public class TextChatServiceImpl implements TextChatService { .setMessage(chat.getMessage()) .setTime(chat.getTime()) .build(); - account.channel().writeAndFlush(resTextChat); + account.writeNow(resTextChat); logger.info("write client msg: {}", resTextChat); return Boolean.TRUE; } diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/GenProtoSerialNo.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/GenProtoSerialNo.java index 9195343..9a28987 100644 --- a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/GenProtoSerialNo.java +++ b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/GenProtoSerialNo.java @@ -48,5 +48,4 @@ public class GenProtoSerialNo { fileWriter.close(); } - } diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/common/Res.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/common/Res.java new file mode 100644 index 0000000..78a5d7e --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/common/Res.java @@ -0,0 +1,930 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: proto/common/Res.proto + +package net.sopod.soim.data.msg.common; + +public final class Res { + private Res() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface ResStateOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.common.ResState) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * 是否成功
+     * 
+ * + * bool success = 1; + * @return The success. + */ + boolean getSuccess(); + + /** + *
+     * 失败消息
+     * 
+ * + * string message = 2; + * @return The message. + */ + java.lang.String getMessage(); + /** + *
+     * 失败消息
+     * 
+ * + * string message = 2; + * @return The bytes for message. + */ + com.google.protobuf.ByteString + getMessageBytes(); + + /** + *
+     * 成功通知
+     * 
+ * + * string notice = 3; + * @return The notice. + */ + java.lang.String getNotice(); + /** + *
+     * 成功通知
+     * 
+ * + * string notice = 3; + * @return The bytes for notice. + */ + com.google.protobuf.ByteString + getNoticeBytes(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.common.ResState} + */ + public static final class ResState extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.common.ResState) + ResStateOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResState.newBuilder() to construct. + private ResState(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ResState() { + message_ = ""; + notice_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ResState(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ResState( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + success_ = input.readBool(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + message_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + notice_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.common.Res.internal_static_net_sopod_soim_data_msg_common_ResState_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.common.Res.internal_static_net_sopod_soim_data_msg_common_ResState_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.common.Res.ResState.class, net.sopod.soim.data.msg.common.Res.ResState.Builder.class); + } + + public static final int SUCCESS_FIELD_NUMBER = 1; + private boolean success_; + /** + *
+     * 是否成功
+     * 
+ * + * bool success = 1; + * @return The success. + */ + @java.lang.Override + public boolean getSuccess() { + return success_; + } + + public static final int MESSAGE_FIELD_NUMBER = 2; + private volatile java.lang.Object message_; + /** + *
+     * 失败消息
+     * 
+ * + * string message = 2; + * @return The message. + */ + @java.lang.Override + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } + } + /** + *
+     * 失败消息
+     * 
+ * + * string message = 2; + * @return The bytes for message. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NOTICE_FIELD_NUMBER = 3; + private volatile java.lang.Object notice_; + /** + *
+     * 成功通知
+     * 
+ * + * string notice = 3; + * @return The notice. + */ + @java.lang.Override + public java.lang.String getNotice() { + java.lang.Object ref = notice_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + notice_ = s; + return s; + } + } + /** + *
+     * 成功通知
+     * 
+ * + * string notice = 3; + * @return The bytes for notice. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNoticeBytes() { + java.lang.Object ref = notice_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + notice_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (success_ != false) { + output.writeBool(1, success_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(notice_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, notice_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (success_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, success_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(notice_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, notice_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.common.Res.ResState)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.common.Res.ResState other = (net.sopod.soim.data.msg.common.Res.ResState) obj; + + if (getSuccess() + != other.getSuccess()) return false; + if (!getMessage() + .equals(other.getMessage())) return false; + if (!getNotice() + .equals(other.getNotice())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUCCESS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getSuccess()); + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (37 * hash) + NOTICE_FIELD_NUMBER; + hash = (53 * hash) + getNotice().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.common.Res.ResState parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.common.Res.ResState prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.common.ResState} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.common.ResState) + net.sopod.soim.data.msg.common.Res.ResStateOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.common.Res.internal_static_net_sopod_soim_data_msg_common_ResState_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.common.Res.internal_static_net_sopod_soim_data_msg_common_ResState_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.common.Res.ResState.class, net.sopod.soim.data.msg.common.Res.ResState.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.common.Res.ResState.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + success_ = false; + + message_ = ""; + + notice_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.common.Res.internal_static_net_sopod_soim_data_msg_common_ResState_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.common.Res.ResState getDefaultInstanceForType() { + return net.sopod.soim.data.msg.common.Res.ResState.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.common.Res.ResState build() { + net.sopod.soim.data.msg.common.Res.ResState result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.common.Res.ResState buildPartial() { + net.sopod.soim.data.msg.common.Res.ResState result = new net.sopod.soim.data.msg.common.Res.ResState(this); + result.success_ = success_; + result.message_ = message_; + result.notice_ = notice_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.common.Res.ResState) { + return mergeFrom((net.sopod.soim.data.msg.common.Res.ResState)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.common.Res.ResState other) { + if (other == net.sopod.soim.data.msg.common.Res.ResState.getDefaultInstance()) return this; + if (other.getSuccess() != false) { + setSuccess(other.getSuccess()); + } + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + onChanged(); + } + if (!other.getNotice().isEmpty()) { + notice_ = other.notice_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.common.Res.ResState parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.common.Res.ResState) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private boolean success_ ; + /** + *
+       * 是否成功
+       * 
+ * + * bool success = 1; + * @return The success. + */ + @java.lang.Override + public boolean getSuccess() { + return success_; + } + /** + *
+       * 是否成功
+       * 
+ * + * bool success = 1; + * @param value The success to set. + * @return This builder for chaining. + */ + public Builder setSuccess(boolean value) { + + success_ = value; + onChanged(); + return this; + } + /** + *
+       * 是否成功
+       * 
+ * + * bool success = 1; + * @return This builder for chaining. + */ + public Builder clearSuccess() { + + success_ = false; + onChanged(); + return this; + } + + private java.lang.Object message_ = ""; + /** + *
+       * 失败消息
+       * 
+ * + * string message = 2; + * @return The message. + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 失败消息
+       * 
+ * + * string message = 2; + * @return The bytes for message. + */ + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 失败消息
+       * 
+ * + * string message = 2; + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + message_ = value; + onChanged(); + return this; + } + /** + *
+       * 失败消息
+       * 
+ * + * string message = 2; + * @return This builder for chaining. + */ + public Builder clearMessage() { + + message_ = getDefaultInstance().getMessage(); + onChanged(); + return this; + } + /** + *
+       * 失败消息
+       * 
+ * + * string message = 2; + * @param value The bytes for message to set. + * @return This builder for chaining. + */ + public Builder setMessageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + message_ = value; + onChanged(); + return this; + } + + private java.lang.Object notice_ = ""; + /** + *
+       * 成功通知
+       * 
+ * + * string notice = 3; + * @return The notice. + */ + public java.lang.String getNotice() { + java.lang.Object ref = notice_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + notice_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 成功通知
+       * 
+ * + * string notice = 3; + * @return The bytes for notice. + */ + public com.google.protobuf.ByteString + getNoticeBytes() { + java.lang.Object ref = notice_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + notice_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 成功通知
+       * 
+ * + * string notice = 3; + * @param value The notice to set. + * @return This builder for chaining. + */ + public Builder setNotice( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + notice_ = value; + onChanged(); + return this; + } + /** + *
+       * 成功通知
+       * 
+ * + * string notice = 3; + * @return This builder for chaining. + */ + public Builder clearNotice() { + + notice_ = getDefaultInstance().getNotice(); + onChanged(); + return this; + } + /** + *
+       * 成功通知
+       * 
+ * + * string notice = 3; + * @param value The bytes for notice to set. + * @return This builder for chaining. + */ + public Builder setNoticeBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + notice_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.common.ResState) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.common.ResState) + private static final net.sopod.soim.data.msg.common.Res.ResState DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.common.Res.ResState(); + } + + public static net.sopod.soim.data.msg.common.Res.ResState getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResState parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResState(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.common.Res.ResState getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_common_ResState_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_common_ResState_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\026proto/common/Res.proto\022\036net.sopod.soim" + + ".data.msg.common\"<\n\010ResState\022\017\n\007success\030" + + "\001 \001(\010\022\017\n\007message\030\002 \001(\t\022\016\n\006notice\030\003 \001(\tB\007" + + "B\003ResP\000b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_net_sopod_soim_data_msg_common_ResState_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_net_sopod_soim_data_msg_common_ResState_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_common_ResState_descriptor, + new java.lang.String[] { "Success", "Message", "Notice", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/group/Group.java b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/group/Group.java new file mode 100644 index 0000000..03a667a --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/group/Group.java @@ -0,0 +1,7664 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: proto/group/Group.proto + +package net.sopod.soim.data.msg.group; + +public final class Group { + private Group() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface GroupInfoOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.GroupInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 gid = 1; + * @return The gid. + */ + long getGid(); + + /** + * string groupName = 2; + * @return The groupName. + */ + java.lang.String getGroupName(); + /** + * string groupName = 2; + * @return The bytes for groupName. + */ + com.google.protobuf.ByteString + getGroupNameBytes(); + + /** + * int32 userLimit = 3; + * @return The userLimit. + */ + int getUserLimit(); + + /** + * int32 userNum = 4; + * @return The userNum. + */ + int getUserNum(); + + /** + * int64 createTime = 5; + * @return The createTime. + */ + long getCreateTime(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.GroupInfo} + */ + public static final class GroupInfo extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.GroupInfo) + GroupInfoOrBuilder { + private static final long serialVersionUID = 0L; + // Use GroupInfo.newBuilder() to construct. + private GroupInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GroupInfo() { + groupName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GroupInfo(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GroupInfo( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + gid_ = input.readInt64(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + groupName_ = s; + break; + } + case 24: { + + userLimit_ = input.readInt32(); + break; + } + case 32: { + + userNum_ = input.readInt32(); + break; + } + case 40: { + + createTime_ = input.readInt64(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_GroupInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_GroupInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.GroupInfo.class, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder.class); + } + + public static final int GID_FIELD_NUMBER = 1; + private long gid_; + /** + * int64 gid = 1; + * @return The gid. + */ + @java.lang.Override + public long getGid() { + return gid_; + } + + public static final int GROUPNAME_FIELD_NUMBER = 2; + private volatile java.lang.Object groupName_; + /** + * string groupName = 2; + * @return The groupName. + */ + @java.lang.Override + public java.lang.String getGroupName() { + java.lang.Object ref = groupName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + groupName_ = s; + return s; + } + } + /** + * string groupName = 2; + * @return The bytes for groupName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getGroupNameBytes() { + java.lang.Object ref = groupName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + groupName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int USERLIMIT_FIELD_NUMBER = 3; + private int userLimit_; + /** + * int32 userLimit = 3; + * @return The userLimit. + */ + @java.lang.Override + public int getUserLimit() { + return userLimit_; + } + + public static final int USERNUM_FIELD_NUMBER = 4; + private int userNum_; + /** + * int32 userNum = 4; + * @return The userNum. + */ + @java.lang.Override + public int getUserNum() { + return userNum_; + } + + public static final int CREATETIME_FIELD_NUMBER = 5; + private long createTime_; + /** + * int64 createTime = 5; + * @return The createTime. + */ + @java.lang.Override + public long getCreateTime() { + return createTime_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (gid_ != 0L) { + output.writeInt64(1, gid_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(groupName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, groupName_); + } + if (userLimit_ != 0) { + output.writeInt32(3, userLimit_); + } + if (userNum_ != 0) { + output.writeInt32(4, userNum_); + } + if (createTime_ != 0L) { + output.writeInt64(5, createTime_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (gid_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, gid_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(groupName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, groupName_); + } + if (userLimit_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, userLimit_); + } + if (userNum_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, userNum_); + } + if (createTime_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(5, createTime_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.GroupInfo)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.GroupInfo other = (net.sopod.soim.data.msg.group.Group.GroupInfo) obj; + + if (getGid() + != other.getGid()) return false; + if (!getGroupName() + .equals(other.getGroupName())) return false; + if (getUserLimit() + != other.getUserLimit()) return false; + if (getUserNum() + != other.getUserNum()) return false; + if (getCreateTime() + != other.getCreateTime()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + GID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getGid()); + hash = (37 * hash) + GROUPNAME_FIELD_NUMBER; + hash = (53 * hash) + getGroupName().hashCode(); + hash = (37 * hash) + USERLIMIT_FIELD_NUMBER; + hash = (53 * hash) + getUserLimit(); + hash = (37 * hash) + USERNUM_FIELD_NUMBER; + hash = (53 * hash) + getUserNum(); + hash = (37 * hash) + CREATETIME_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getCreateTime()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.GroupInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.GroupInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.GroupInfo} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.GroupInfo) + net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_GroupInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_GroupInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.GroupInfo.class, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.GroupInfo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + gid_ = 0L; + + groupName_ = ""; + + userLimit_ = 0; + + userNum_ = 0; + + createTime_ = 0L; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_GroupInfo_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.GroupInfo getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.GroupInfo.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.GroupInfo build() { + net.sopod.soim.data.msg.group.Group.GroupInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.GroupInfo buildPartial() { + net.sopod.soim.data.msg.group.Group.GroupInfo result = new net.sopod.soim.data.msg.group.Group.GroupInfo(this); + result.gid_ = gid_; + result.groupName_ = groupName_; + result.userLimit_ = userLimit_; + result.userNum_ = userNum_; + result.createTime_ = createTime_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.GroupInfo) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.GroupInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.GroupInfo other) { + if (other == net.sopod.soim.data.msg.group.Group.GroupInfo.getDefaultInstance()) return this; + if (other.getGid() != 0L) { + setGid(other.getGid()); + } + if (!other.getGroupName().isEmpty()) { + groupName_ = other.groupName_; + onChanged(); + } + if (other.getUserLimit() != 0) { + setUserLimit(other.getUserLimit()); + } + if (other.getUserNum() != 0) { + setUserNum(other.getUserNum()); + } + if (other.getCreateTime() != 0L) { + setCreateTime(other.getCreateTime()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.GroupInfo parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.GroupInfo) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private long gid_ ; + /** + * int64 gid = 1; + * @return The gid. + */ + @java.lang.Override + public long getGid() { + return gid_; + } + /** + * int64 gid = 1; + * @param value The gid to set. + * @return This builder for chaining. + */ + public Builder setGid(long value) { + + gid_ = value; + onChanged(); + return this; + } + /** + * int64 gid = 1; + * @return This builder for chaining. + */ + public Builder clearGid() { + + gid_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object groupName_ = ""; + /** + * string groupName = 2; + * @return The groupName. + */ + public java.lang.String getGroupName() { + java.lang.Object ref = groupName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + groupName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string groupName = 2; + * @return The bytes for groupName. + */ + public com.google.protobuf.ByteString + getGroupNameBytes() { + java.lang.Object ref = groupName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + groupName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string groupName = 2; + * @param value The groupName to set. + * @return This builder for chaining. + */ + public Builder setGroupName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + groupName_ = value; + onChanged(); + return this; + } + /** + * string groupName = 2; + * @return This builder for chaining. + */ + public Builder clearGroupName() { + + groupName_ = getDefaultInstance().getGroupName(); + onChanged(); + return this; + } + /** + * string groupName = 2; + * @param value The bytes for groupName to set. + * @return This builder for chaining. + */ + public Builder setGroupNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + groupName_ = value; + onChanged(); + return this; + } + + private int userLimit_ ; + /** + * int32 userLimit = 3; + * @return The userLimit. + */ + @java.lang.Override + public int getUserLimit() { + return userLimit_; + } + /** + * int32 userLimit = 3; + * @param value The userLimit to set. + * @return This builder for chaining. + */ + public Builder setUserLimit(int value) { + + userLimit_ = value; + onChanged(); + return this; + } + /** + * int32 userLimit = 3; + * @return This builder for chaining. + */ + public Builder clearUserLimit() { + + userLimit_ = 0; + onChanged(); + return this; + } + + private int userNum_ ; + /** + * int32 userNum = 4; + * @return The userNum. + */ + @java.lang.Override + public int getUserNum() { + return userNum_; + } + /** + * int32 userNum = 4; + * @param value The userNum to set. + * @return This builder for chaining. + */ + public Builder setUserNum(int value) { + + userNum_ = value; + onChanged(); + return this; + } + /** + * int32 userNum = 4; + * @return This builder for chaining. + */ + public Builder clearUserNum() { + + userNum_ = 0; + onChanged(); + return this; + } + + private long createTime_ ; + /** + * int64 createTime = 5; + * @return The createTime. + */ + @java.lang.Override + public long getCreateTime() { + return createTime_; + } + /** + * int64 createTime = 5; + * @param value The createTime to set. + * @return This builder for chaining. + */ + public Builder setCreateTime(long value) { + + createTime_ = value; + onChanged(); + return this; + } + /** + * int64 createTime = 5; + * @return This builder for chaining. + */ + public Builder clearCreateTime() { + + createTime_ = 0L; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.GroupInfo) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.GroupInfo) + private static final net.sopod.soim.data.msg.group.Group.GroupInfo DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.GroupInfo(); + } + + public static net.sopod.soim.data.msg.group.Group.GroupInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GroupInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GroupInfo(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.GroupInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface UserInfoOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.UserInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 uid = 1; + * @return The uid. + */ + long getUid(); + + /** + * string account = 2; + * @return The account. + */ + java.lang.String getAccount(); + /** + * string account = 2; + * @return The bytes for account. + */ + com.google.protobuf.ByteString + getAccountBytes(); + + /** + * string nickname = 3; + * @return The nickname. + */ + java.lang.String getNickname(); + /** + * string nickname = 3; + * @return The bytes for nickname. + */ + com.google.protobuf.ByteString + getNicknameBytes(); + + /** + * bool online = 4; + * @return The online. + */ + boolean getOnline(); + + /** + *
+     * 最后活跃时间
+     * 
+ * + * int64 lastActive = 5; + * @return The lastActive. + */ + long getLastActive(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.UserInfo} + */ + public static final class UserInfo extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.UserInfo) + UserInfoOrBuilder { + private static final long serialVersionUID = 0L; + // Use UserInfo.newBuilder() to construct. + private UserInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private UserInfo() { + account_ = ""; + nickname_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new UserInfo(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private UserInfo( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + uid_ = input.readInt64(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + account_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + nickname_ = s; + break; + } + case 32: { + + online_ = input.readBool(); + break; + } + case 40: { + + lastActive_ = input.readInt64(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_UserInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_UserInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.UserInfo.class, net.sopod.soim.data.msg.group.Group.UserInfo.Builder.class); + } + + public static final int UID_FIELD_NUMBER = 1; + private long uid_; + /** + * int64 uid = 1; + * @return The uid. + */ + @java.lang.Override + public long getUid() { + return uid_; + } + + public static final int ACCOUNT_FIELD_NUMBER = 2; + private volatile java.lang.Object account_; + /** + * string account = 2; + * @return The account. + */ + @java.lang.Override + public java.lang.String getAccount() { + java.lang.Object ref = account_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + account_ = s; + return s; + } + } + /** + * string account = 2; + * @return The bytes for account. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getAccountBytes() { + java.lang.Object ref = account_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + account_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NICKNAME_FIELD_NUMBER = 3; + private volatile java.lang.Object nickname_; + /** + * string nickname = 3; + * @return The nickname. + */ + @java.lang.Override + public java.lang.String getNickname() { + java.lang.Object ref = nickname_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nickname_ = s; + return s; + } + } + /** + * string nickname = 3; + * @return The bytes for nickname. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNicknameBytes() { + java.lang.Object ref = nickname_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + nickname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ONLINE_FIELD_NUMBER = 4; + private boolean online_; + /** + * bool online = 4; + * @return The online. + */ + @java.lang.Override + public boolean getOnline() { + return online_; + } + + public static final int LASTACTIVE_FIELD_NUMBER = 5; + private long lastActive_; + /** + *
+     * 最后活跃时间
+     * 
+ * + * int64 lastActive = 5; + * @return The lastActive. + */ + @java.lang.Override + public long getLastActive() { + return lastActive_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (uid_ != 0L) { + output.writeInt64(1, uid_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, account_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nickname_); + } + if (online_ != false) { + output.writeBool(4, online_); + } + if (lastActive_ != 0L) { + output.writeInt64(5, lastActive_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (uid_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, uid_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, account_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nickname_); + } + if (online_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, online_); + } + if (lastActive_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(5, lastActive_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.UserInfo)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.UserInfo other = (net.sopod.soim.data.msg.group.Group.UserInfo) obj; + + if (getUid() + != other.getUid()) return false; + if (!getAccount() + .equals(other.getAccount())) return false; + if (!getNickname() + .equals(other.getNickname())) return false; + if (getOnline() + != other.getOnline()) return false; + if (getLastActive() + != other.getLastActive()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getUid()); + hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; + hash = (53 * hash) + getAccount().hashCode(); + hash = (37 * hash) + NICKNAME_FIELD_NUMBER; + hash = (53 * hash) + getNickname().hashCode(); + hash = (37 * hash) + ONLINE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getOnline()); + hash = (37 * hash) + LASTACTIVE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getLastActive()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.UserInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.UserInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.UserInfo} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.UserInfo) + net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_UserInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_UserInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.UserInfo.class, net.sopod.soim.data.msg.group.Group.UserInfo.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.UserInfo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + uid_ = 0L; + + account_ = ""; + + nickname_ = ""; + + online_ = false; + + lastActive_ = 0L; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_UserInfo_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.UserInfo getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.UserInfo.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.UserInfo build() { + net.sopod.soim.data.msg.group.Group.UserInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.UserInfo buildPartial() { + net.sopod.soim.data.msg.group.Group.UserInfo result = new net.sopod.soim.data.msg.group.Group.UserInfo(this); + result.uid_ = uid_; + result.account_ = account_; + result.nickname_ = nickname_; + result.online_ = online_; + result.lastActive_ = lastActive_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.UserInfo) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.UserInfo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.UserInfo other) { + if (other == net.sopod.soim.data.msg.group.Group.UserInfo.getDefaultInstance()) return this; + if (other.getUid() != 0L) { + setUid(other.getUid()); + } + if (!other.getAccount().isEmpty()) { + account_ = other.account_; + onChanged(); + } + if (!other.getNickname().isEmpty()) { + nickname_ = other.nickname_; + onChanged(); + } + if (other.getOnline() != false) { + setOnline(other.getOnline()); + } + if (other.getLastActive() != 0L) { + setLastActive(other.getLastActive()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.UserInfo parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.UserInfo) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private long uid_ ; + /** + * int64 uid = 1; + * @return The uid. + */ + @java.lang.Override + public long getUid() { + return uid_; + } + /** + * int64 uid = 1; + * @param value The uid to set. + * @return This builder for chaining. + */ + public Builder setUid(long value) { + + uid_ = value; + onChanged(); + return this; + } + /** + * int64 uid = 1; + * @return This builder for chaining. + */ + public Builder clearUid() { + + uid_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object account_ = ""; + /** + * string account = 2; + * @return The account. + */ + public java.lang.String getAccount() { + java.lang.Object ref = account_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + account_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string account = 2; + * @return The bytes for account. + */ + public com.google.protobuf.ByteString + getAccountBytes() { + java.lang.Object ref = account_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + account_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string account = 2; + * @param value The account to set. + * @return This builder for chaining. + */ + public Builder setAccount( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + account_ = value; + onChanged(); + return this; + } + /** + * string account = 2; + * @return This builder for chaining. + */ + public Builder clearAccount() { + + account_ = getDefaultInstance().getAccount(); + onChanged(); + return this; + } + /** + * string account = 2; + * @param value The bytes for account to set. + * @return This builder for chaining. + */ + public Builder setAccountBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + account_ = value; + onChanged(); + return this; + } + + private java.lang.Object nickname_ = ""; + /** + * string nickname = 3; + * @return The nickname. + */ + public java.lang.String getNickname() { + java.lang.Object ref = nickname_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + nickname_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string nickname = 3; + * @return The bytes for nickname. + */ + public com.google.protobuf.ByteString + getNicknameBytes() { + java.lang.Object ref = nickname_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + nickname_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string nickname = 3; + * @param value The nickname to set. + * @return This builder for chaining. + */ + public Builder setNickname( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + nickname_ = value; + onChanged(); + return this; + } + /** + * string nickname = 3; + * @return This builder for chaining. + */ + public Builder clearNickname() { + + nickname_ = getDefaultInstance().getNickname(); + onChanged(); + return this; + } + /** + * string nickname = 3; + * @param value The bytes for nickname to set. + * @return This builder for chaining. + */ + public Builder setNicknameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + nickname_ = value; + onChanged(); + return this; + } + + private boolean online_ ; + /** + * bool online = 4; + * @return The online. + */ + @java.lang.Override + public boolean getOnline() { + return online_; + } + /** + * bool online = 4; + * @param value The online to set. + * @return This builder for chaining. + */ + public Builder setOnline(boolean value) { + + online_ = value; + onChanged(); + return this; + } + /** + * bool online = 4; + * @return This builder for chaining. + */ + public Builder clearOnline() { + + online_ = false; + onChanged(); + return this; + } + + private long lastActive_ ; + /** + *
+       * 最后活跃时间
+       * 
+ * + * int64 lastActive = 5; + * @return The lastActive. + */ + @java.lang.Override + public long getLastActive() { + return lastActive_; + } + /** + *
+       * 最后活跃时间
+       * 
+ * + * int64 lastActive = 5; + * @param value The lastActive to set. + * @return This builder for chaining. + */ + public Builder setLastActive(long value) { + + lastActive_ = value; + onChanged(); + return this; + } + /** + *
+       * 最后活跃时间
+       * 
+ * + * int64 lastActive = 5; + * @return This builder for chaining. + */ + public Builder clearLastActive() { + + lastActive_ = 0L; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.UserInfo) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.UserInfo) + private static final net.sopod.soim.data.msg.group.Group.UserInfo DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.UserInfo(); + } + + public static net.sopod.soim.data.msg.group.Group.UserInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UserInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new UserInfo(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.UserInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReqCreateGroupOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ReqCreateGroup) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * 群名称
+     * 
+ * + * string groupName = 1; + * @return The groupName. + */ + java.lang.String getGroupName(); + /** + *
+     * 群名称
+     * 
+ * + * string groupName = 1; + * @return The bytes for groupName. + */ + com.google.protobuf.ByteString + getGroupNameBytes(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqCreateGroup} + */ + public static final class ReqCreateGroup extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ReqCreateGroup) + ReqCreateGroupOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqCreateGroup.newBuilder() to construct. + private ReqCreateGroup(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqCreateGroup() { + groupName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqCreateGroup(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqCreateGroup( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + groupName_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqCreateGroup.class, net.sopod.soim.data.msg.group.Group.ReqCreateGroup.Builder.class); + } + + public static final int GROUPNAME_FIELD_NUMBER = 1; + private volatile java.lang.Object groupName_; + /** + *
+     * 群名称
+     * 
+ * + * string groupName = 1; + * @return The groupName. + */ + @java.lang.Override + public java.lang.String getGroupName() { + java.lang.Object ref = groupName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + groupName_ = s; + return s; + } + } + /** + *
+     * 群名称
+     * 
+ * + * string groupName = 1; + * @return The bytes for groupName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getGroupNameBytes() { + java.lang.Object ref = groupName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + groupName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(groupName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, groupName_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(groupName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, groupName_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ReqCreateGroup)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ReqCreateGroup other = (net.sopod.soim.data.msg.group.Group.ReqCreateGroup) obj; + + if (!getGroupName() + .equals(other.getGroupName())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + GROUPNAME_FIELD_NUMBER; + hash = (53 * hash) + getGroupName().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ReqCreateGroup prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqCreateGroup} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ReqCreateGroup) + net.sopod.soim.data.msg.group.Group.ReqCreateGroupOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqCreateGroup.class, net.sopod.soim.data.msg.group.Group.ReqCreateGroup.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ReqCreateGroup.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + groupName_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqCreateGroup getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ReqCreateGroup.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqCreateGroup build() { + net.sopod.soim.data.msg.group.Group.ReqCreateGroup result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqCreateGroup buildPartial() { + net.sopod.soim.data.msg.group.Group.ReqCreateGroup result = new net.sopod.soim.data.msg.group.Group.ReqCreateGroup(this); + result.groupName_ = groupName_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ReqCreateGroup) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ReqCreateGroup)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ReqCreateGroup other) { + if (other == net.sopod.soim.data.msg.group.Group.ReqCreateGroup.getDefaultInstance()) return this; + if (!other.getGroupName().isEmpty()) { + groupName_ = other.groupName_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ReqCreateGroup parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ReqCreateGroup) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object groupName_ = ""; + /** + *
+       * 群名称
+       * 
+ * + * string groupName = 1; + * @return The groupName. + */ + public java.lang.String getGroupName() { + java.lang.Object ref = groupName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + groupName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 群名称
+       * 
+ * + * string groupName = 1; + * @return The bytes for groupName. + */ + public com.google.protobuf.ByteString + getGroupNameBytes() { + java.lang.Object ref = groupName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + groupName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 群名称
+       * 
+ * + * string groupName = 1; + * @param value The groupName to set. + * @return This builder for chaining. + */ + public Builder setGroupName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + groupName_ = value; + onChanged(); + return this; + } + /** + *
+       * 群名称
+       * 
+ * + * string groupName = 1; + * @return This builder for chaining. + */ + public Builder clearGroupName() { + + groupName_ = getDefaultInstance().getGroupName(); + onChanged(); + return this; + } + /** + *
+       * 群名称
+       * 
+ * + * string groupName = 1; + * @param value The bytes for groupName to set. + * @return This builder for chaining. + */ + public Builder setGroupNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + groupName_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ReqCreateGroup) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ReqCreateGroup) + private static final net.sopod.soim.data.msg.group.Group.ReqCreateGroup DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ReqCreateGroup(); + } + + public static net.sopod.soim.data.msg.group.Group.ReqCreateGroup getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqCreateGroup parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqCreateGroup(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqCreateGroup getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReqSearchGroupOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ReqSearchGroup) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * 群名称模糊搜素
+     * 
+ * + * string groupName = 1; + * @return The groupName. + */ + java.lang.String getGroupName(); + /** + *
+     * 群名称模糊搜素
+     * 
+ * + * string groupName = 1; + * @return The bytes for groupName. + */ + com.google.protobuf.ByteString + getGroupNameBytes(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqSearchGroup} + */ + public static final class ReqSearchGroup extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ReqSearchGroup) + ReqSearchGroupOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqSearchGroup.newBuilder() to construct. + private ReqSearchGroup(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqSearchGroup() { + groupName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqSearchGroup(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqSearchGroup( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + groupName_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqSearchGroup.class, net.sopod.soim.data.msg.group.Group.ReqSearchGroup.Builder.class); + } + + public static final int GROUPNAME_FIELD_NUMBER = 1; + private volatile java.lang.Object groupName_; + /** + *
+     * 群名称模糊搜素
+     * 
+ * + * string groupName = 1; + * @return The groupName. + */ + @java.lang.Override + public java.lang.String getGroupName() { + java.lang.Object ref = groupName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + groupName_ = s; + return s; + } + } + /** + *
+     * 群名称模糊搜素
+     * 
+ * + * string groupName = 1; + * @return The bytes for groupName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getGroupNameBytes() { + java.lang.Object ref = groupName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + groupName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(groupName_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, groupName_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(groupName_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, groupName_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ReqSearchGroup)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ReqSearchGroup other = (net.sopod.soim.data.msg.group.Group.ReqSearchGroup) obj; + + if (!getGroupName() + .equals(other.getGroupName())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + GROUPNAME_FIELD_NUMBER; + hash = (53 * hash) + getGroupName().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ReqSearchGroup prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqSearchGroup} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ReqSearchGroup) + net.sopod.soim.data.msg.group.Group.ReqSearchGroupOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqSearchGroup.class, net.sopod.soim.data.msg.group.Group.ReqSearchGroup.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ReqSearchGroup.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + groupName_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqSearchGroup getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ReqSearchGroup.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqSearchGroup build() { + net.sopod.soim.data.msg.group.Group.ReqSearchGroup result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqSearchGroup buildPartial() { + net.sopod.soim.data.msg.group.Group.ReqSearchGroup result = new net.sopod.soim.data.msg.group.Group.ReqSearchGroup(this); + result.groupName_ = groupName_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ReqSearchGroup) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ReqSearchGroup)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ReqSearchGroup other) { + if (other == net.sopod.soim.data.msg.group.Group.ReqSearchGroup.getDefaultInstance()) return this; + if (!other.getGroupName().isEmpty()) { + groupName_ = other.groupName_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ReqSearchGroup parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ReqSearchGroup) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object groupName_ = ""; + /** + *
+       * 群名称模糊搜素
+       * 
+ * + * string groupName = 1; + * @return The groupName. + */ + public java.lang.String getGroupName() { + java.lang.Object ref = groupName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + groupName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 群名称模糊搜素
+       * 
+ * + * string groupName = 1; + * @return The bytes for groupName. + */ + public com.google.protobuf.ByteString + getGroupNameBytes() { + java.lang.Object ref = groupName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + groupName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 群名称模糊搜素
+       * 
+ * + * string groupName = 1; + * @param value The groupName to set. + * @return This builder for chaining. + */ + public Builder setGroupName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + groupName_ = value; + onChanged(); + return this; + } + /** + *
+       * 群名称模糊搜素
+       * 
+ * + * string groupName = 1; + * @return This builder for chaining. + */ + public Builder clearGroupName() { + + groupName_ = getDefaultInstance().getGroupName(); + onChanged(); + return this; + } + /** + *
+       * 群名称模糊搜素
+       * 
+ * + * string groupName = 1; + * @param value The bytes for groupName to set. + * @return This builder for chaining. + */ + public Builder setGroupNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + groupName_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ReqSearchGroup) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ReqSearchGroup) + private static final net.sopod.soim.data.msg.group.Group.ReqSearchGroup DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ReqSearchGroup(); + } + + public static net.sopod.soim.data.msg.group.Group.ReqSearchGroup getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqSearchGroup parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqSearchGroup(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqSearchGroup getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ResSearchGroupOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ResSearchGroup) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + java.util.List + getGroupsList(); + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + net.sopod.soim.data.msg.group.Group.GroupInfo getGroups(int index); + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + int getGroupsCount(); + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + java.util.List + getGroupsOrBuilderList(); + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder getGroupsOrBuilder( + int index); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ResSearchGroup} + */ + public static final class ResSearchGroup extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ResSearchGroup) + ResSearchGroupOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResSearchGroup.newBuilder() to construct. + private ResSearchGroup(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ResSearchGroup() { + groups_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ResSearchGroup(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ResSearchGroup( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 26: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + groups_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + groups_.add( + input.readMessage(net.sopod.soim.data.msg.group.Group.GroupInfo.parser(), extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + groups_ = java.util.Collections.unmodifiableList(groups_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ResSearchGroup.class, net.sopod.soim.data.msg.group.Group.ResSearchGroup.Builder.class); + } + + public static final int GROUPS_FIELD_NUMBER = 3; + private java.util.List groups_; + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + @java.lang.Override + public java.util.List getGroupsList() { + return groups_; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + @java.lang.Override + public java.util.List + getGroupsOrBuilderList() { + return groups_; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + @java.lang.Override + public int getGroupsCount() { + return groups_.size(); + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.GroupInfo getGroups(int index) { + return groups_.get(index); + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder getGroupsOrBuilder( + int index) { + return groups_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < groups_.size(); i++) { + output.writeMessage(3, groups_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < groups_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, groups_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ResSearchGroup)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ResSearchGroup other = (net.sopod.soim.data.msg.group.Group.ResSearchGroup) obj; + + if (!getGroupsList() + .equals(other.getGroupsList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getGroupsCount() > 0) { + hash = (37 * hash) + GROUPS_FIELD_NUMBER; + hash = (53 * hash) + getGroupsList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ResSearchGroup prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ResSearchGroup} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ResSearchGroup) + net.sopod.soim.data.msg.group.Group.ResSearchGroupOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ResSearchGroup.class, net.sopod.soim.data.msg.group.Group.ResSearchGroup.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ResSearchGroup.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getGroupsFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (groupsBuilder_ == null) { + groups_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + groupsBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResSearchGroup getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ResSearchGroup.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResSearchGroup build() { + net.sopod.soim.data.msg.group.Group.ResSearchGroup result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResSearchGroup buildPartial() { + net.sopod.soim.data.msg.group.Group.ResSearchGroup result = new net.sopod.soim.data.msg.group.Group.ResSearchGroup(this); + int from_bitField0_ = bitField0_; + if (groupsBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + groups_ = java.util.Collections.unmodifiableList(groups_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.groups_ = groups_; + } else { + result.groups_ = groupsBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ResSearchGroup) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ResSearchGroup)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ResSearchGroup other) { + if (other == net.sopod.soim.data.msg.group.Group.ResSearchGroup.getDefaultInstance()) return this; + if (groupsBuilder_ == null) { + if (!other.groups_.isEmpty()) { + if (groups_.isEmpty()) { + groups_ = other.groups_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureGroupsIsMutable(); + groups_.addAll(other.groups_); + } + onChanged(); + } + } else { + if (!other.groups_.isEmpty()) { + if (groupsBuilder_.isEmpty()) { + groupsBuilder_.dispose(); + groupsBuilder_ = null; + groups_ = other.groups_; + bitField0_ = (bitField0_ & ~0x00000001); + groupsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getGroupsFieldBuilder() : null; + } else { + groupsBuilder_.addAllMessages(other.groups_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ResSearchGroup parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ResSearchGroup) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List groups_ = + java.util.Collections.emptyList(); + private void ensureGroupsIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + groups_ = new java.util.ArrayList(groups_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.group.Group.GroupInfo, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder, net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder> groupsBuilder_; + + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public java.util.List getGroupsList() { + if (groupsBuilder_ == null) { + return java.util.Collections.unmodifiableList(groups_); + } else { + return groupsBuilder_.getMessageList(); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public int getGroupsCount() { + if (groupsBuilder_ == null) { + return groups_.size(); + } else { + return groupsBuilder_.getCount(); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public net.sopod.soim.data.msg.group.Group.GroupInfo getGroups(int index) { + if (groupsBuilder_ == null) { + return groups_.get(index); + } else { + return groupsBuilder_.getMessage(index); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder setGroups( + int index, net.sopod.soim.data.msg.group.Group.GroupInfo value) { + if (groupsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGroupsIsMutable(); + groups_.set(index, value); + onChanged(); + } else { + groupsBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder setGroups( + int index, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder builderForValue) { + if (groupsBuilder_ == null) { + ensureGroupsIsMutable(); + groups_.set(index, builderForValue.build()); + onChanged(); + } else { + groupsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder addGroups(net.sopod.soim.data.msg.group.Group.GroupInfo value) { + if (groupsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGroupsIsMutable(); + groups_.add(value); + onChanged(); + } else { + groupsBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder addGroups( + int index, net.sopod.soim.data.msg.group.Group.GroupInfo value) { + if (groupsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureGroupsIsMutable(); + groups_.add(index, value); + onChanged(); + } else { + groupsBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder addGroups( + net.sopod.soim.data.msg.group.Group.GroupInfo.Builder builderForValue) { + if (groupsBuilder_ == null) { + ensureGroupsIsMutable(); + groups_.add(builderForValue.build()); + onChanged(); + } else { + groupsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder addGroups( + int index, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder builderForValue) { + if (groupsBuilder_ == null) { + ensureGroupsIsMutable(); + groups_.add(index, builderForValue.build()); + onChanged(); + } else { + groupsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder addAllGroups( + java.lang.Iterable values) { + if (groupsBuilder_ == null) { + ensureGroupsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, groups_); + onChanged(); + } else { + groupsBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder clearGroups() { + if (groupsBuilder_ == null) { + groups_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + groupsBuilder_.clear(); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public Builder removeGroups(int index) { + if (groupsBuilder_ == null) { + ensureGroupsIsMutable(); + groups_.remove(index); + onChanged(); + } else { + groupsBuilder_.remove(index); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public net.sopod.soim.data.msg.group.Group.GroupInfo.Builder getGroupsBuilder( + int index) { + return getGroupsFieldBuilder().getBuilder(index); + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder getGroupsOrBuilder( + int index) { + if (groupsBuilder_ == null) { + return groups_.get(index); } else { + return groupsBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public java.util.List + getGroupsOrBuilderList() { + if (groupsBuilder_ != null) { + return groupsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(groups_); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public net.sopod.soim.data.msg.group.Group.GroupInfo.Builder addGroupsBuilder() { + return getGroupsFieldBuilder().addBuilder( + net.sopod.soim.data.msg.group.Group.GroupInfo.getDefaultInstance()); + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public net.sopod.soim.data.msg.group.Group.GroupInfo.Builder addGroupsBuilder( + int index) { + return getGroupsFieldBuilder().addBuilder( + index, net.sopod.soim.data.msg.group.Group.GroupInfo.getDefaultInstance()); + } + /** + * repeated .net.sopod.soim.data.msg.group.GroupInfo groups = 3; + */ + public java.util.List + getGroupsBuilderList() { + return getGroupsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.group.Group.GroupInfo, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder, net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder> + getGroupsFieldBuilder() { + if (groupsBuilder_ == null) { + groupsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.group.Group.GroupInfo, net.sopod.soim.data.msg.group.Group.GroupInfo.Builder, net.sopod.soim.data.msg.group.Group.GroupInfoOrBuilder>( + groups_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + groups_ = null; + } + return groupsBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ResSearchGroup) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ResSearchGroup) + private static final net.sopod.soim.data.msg.group.Group.ResSearchGroup DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ResSearchGroup(); + } + + public static net.sopod.soim.data.msg.group.Group.ResSearchGroup getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResSearchGroup parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResSearchGroup(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResSearchGroup getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReqJoinGroupOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ReqJoinGroup) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 gid = 1; + * @return The gid. + */ + long getGid(); + + /** + * int64 uid = 2; + * @return The uid. + */ + long getUid(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqJoinGroup} + */ + public static final class ReqJoinGroup extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ReqJoinGroup) + ReqJoinGroupOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqJoinGroup.newBuilder() to construct. + private ReqJoinGroup(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqJoinGroup() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqJoinGroup(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqJoinGroup( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + gid_ = input.readInt64(); + break; + } + case 16: { + + uid_ = input.readInt64(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqJoinGroup.class, net.sopod.soim.data.msg.group.Group.ReqJoinGroup.Builder.class); + } + + public static final int GID_FIELD_NUMBER = 1; + private long gid_; + /** + * int64 gid = 1; + * @return The gid. + */ + @java.lang.Override + public long getGid() { + return gid_; + } + + public static final int UID_FIELD_NUMBER = 2; + private long uid_; + /** + * int64 uid = 2; + * @return The uid. + */ + @java.lang.Override + public long getUid() { + return uid_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (gid_ != 0L) { + output.writeInt64(1, gid_); + } + if (uid_ != 0L) { + output.writeInt64(2, uid_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (gid_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, gid_); + } + if (uid_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, uid_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ReqJoinGroup)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ReqJoinGroup other = (net.sopod.soim.data.msg.group.Group.ReqJoinGroup) obj; + + if (getGid() + != other.getGid()) return false; + if (getUid() + != other.getUid()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + GID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getGid()); + hash = (37 * hash) + UID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getUid()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ReqJoinGroup prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqJoinGroup} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ReqJoinGroup) + net.sopod.soim.data.msg.group.Group.ReqJoinGroupOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqJoinGroup.class, net.sopod.soim.data.msg.group.Group.ReqJoinGroup.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ReqJoinGroup.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + gid_ = 0L; + + uid_ = 0L; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqJoinGroup getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ReqJoinGroup.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqJoinGroup build() { + net.sopod.soim.data.msg.group.Group.ReqJoinGroup result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqJoinGroup buildPartial() { + net.sopod.soim.data.msg.group.Group.ReqJoinGroup result = new net.sopod.soim.data.msg.group.Group.ReqJoinGroup(this); + result.gid_ = gid_; + result.uid_ = uid_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ReqJoinGroup) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ReqJoinGroup)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ReqJoinGroup other) { + if (other == net.sopod.soim.data.msg.group.Group.ReqJoinGroup.getDefaultInstance()) return this; + if (other.getGid() != 0L) { + setGid(other.getGid()); + } + if (other.getUid() != 0L) { + setUid(other.getUid()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ReqJoinGroup parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ReqJoinGroup) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private long gid_ ; + /** + * int64 gid = 1; + * @return The gid. + */ + @java.lang.Override + public long getGid() { + return gid_; + } + /** + * int64 gid = 1; + * @param value The gid to set. + * @return This builder for chaining. + */ + public Builder setGid(long value) { + + gid_ = value; + onChanged(); + return this; + } + /** + * int64 gid = 1; + * @return This builder for chaining. + */ + public Builder clearGid() { + + gid_ = 0L; + onChanged(); + return this; + } + + private long uid_ ; + /** + * int64 uid = 2; + * @return The uid. + */ + @java.lang.Override + public long getUid() { + return uid_; + } + /** + * int64 uid = 2; + * @param value The uid to set. + * @return This builder for chaining. + */ + public Builder setUid(long value) { + + uid_ = value; + onChanged(); + return this; + } + /** + * int64 uid = 2; + * @return This builder for chaining. + */ + public Builder clearUid() { + + uid_ = 0L; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ReqJoinGroup) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ReqJoinGroup) + private static final net.sopod.soim.data.msg.group.Group.ReqJoinGroup DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ReqJoinGroup(); + } + + public static net.sopod.soim.data.msg.group.Group.ReqJoinGroup getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqJoinGroup parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqJoinGroup(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqJoinGroup getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReqGroupUsersOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ReqGroupUsers) + com.google.protobuf.MessageOrBuilder { + + /** + * int64 gid = 1; + * @return The gid. + */ + long getGid(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqGroupUsers} + */ + public static final class ReqGroupUsers extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ReqGroupUsers) + ReqGroupUsersOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqGroupUsers.newBuilder() to construct. + private ReqGroupUsers(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqGroupUsers() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqGroupUsers(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqGroupUsers( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + gid_ = input.readInt64(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqGroupUsers.class, net.sopod.soim.data.msg.group.Group.ReqGroupUsers.Builder.class); + } + + public static final int GID_FIELD_NUMBER = 1; + private long gid_; + /** + * int64 gid = 1; + * @return The gid. + */ + @java.lang.Override + public long getGid() { + return gid_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (gid_ != 0L) { + output.writeInt64(1, gid_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (gid_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, gid_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ReqGroupUsers)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ReqGroupUsers other = (net.sopod.soim.data.msg.group.Group.ReqGroupUsers) obj; + + if (getGid() + != other.getGid()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + GID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getGid()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ReqGroupUsers prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqGroupUsers} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ReqGroupUsers) + net.sopod.soim.data.msg.group.Group.ReqGroupUsersOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqGroupUsers.class, net.sopod.soim.data.msg.group.Group.ReqGroupUsers.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ReqGroupUsers.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + gid_ = 0L; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupUsers getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ReqGroupUsers.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupUsers build() { + net.sopod.soim.data.msg.group.Group.ReqGroupUsers result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupUsers buildPartial() { + net.sopod.soim.data.msg.group.Group.ReqGroupUsers result = new net.sopod.soim.data.msg.group.Group.ReqGroupUsers(this); + result.gid_ = gid_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ReqGroupUsers) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ReqGroupUsers)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ReqGroupUsers other) { + if (other == net.sopod.soim.data.msg.group.Group.ReqGroupUsers.getDefaultInstance()) return this; + if (other.getGid() != 0L) { + setGid(other.getGid()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ReqGroupUsers parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ReqGroupUsers) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private long gid_ ; + /** + * int64 gid = 1; + * @return The gid. + */ + @java.lang.Override + public long getGid() { + return gid_; + } + /** + * int64 gid = 1; + * @param value The gid to set. + * @return This builder for chaining. + */ + public Builder setGid(long value) { + + gid_ = value; + onChanged(); + return this; + } + /** + * int64 gid = 1; + * @return This builder for chaining. + */ + public Builder clearGid() { + + gid_ = 0L; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ReqGroupUsers) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ReqGroupUsers) + private static final net.sopod.soim.data.msg.group.Group.ReqGroupUsers DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ReqGroupUsers(); + } + + public static net.sopod.soim.data.msg.group.Group.ReqGroupUsers getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqGroupUsers parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqGroupUsers(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupUsers getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ResGroupUsersOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ResGroupUsers) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + java.util.List + getUsersList(); + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + net.sopod.soim.data.msg.group.Group.UserInfo getUsers(int index); + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + int getUsersCount(); + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + java.util.List + getUsersOrBuilderList(); + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder getUsersOrBuilder( + int index); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ResGroupUsers} + */ + public static final class ResGroupUsers extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ResGroupUsers) + ResGroupUsersOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResGroupUsers.newBuilder() to construct. + private ResGroupUsers(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ResGroupUsers() { + users_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ResGroupUsers(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ResGroupUsers( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 26: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + users_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + users_.add( + input.readMessage(net.sopod.soim.data.msg.group.Group.UserInfo.parser(), extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + users_ = java.util.Collections.unmodifiableList(users_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ResGroupUsers.class, net.sopod.soim.data.msg.group.Group.ResGroupUsers.Builder.class); + } + + public static final int USERS_FIELD_NUMBER = 3; + private java.util.List users_; + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + @java.lang.Override + public java.util.List getUsersList() { + return users_; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + @java.lang.Override + public java.util.List + getUsersOrBuilderList() { + return users_; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + @java.lang.Override + public int getUsersCount() { + return users_.size(); + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.UserInfo getUsers(int index) { + return users_.get(index); + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder getUsersOrBuilder( + int index) { + return users_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < users_.size(); i++) { + output.writeMessage(3, users_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < users_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, users_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ResGroupUsers)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ResGroupUsers other = (net.sopod.soim.data.msg.group.Group.ResGroupUsers) obj; + + if (!getUsersList() + .equals(other.getUsersList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getUsersCount() > 0) { + hash = (37 * hash) + USERS_FIELD_NUMBER; + hash = (53 * hash) + getUsersList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ResGroupUsers prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ResGroupUsers} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ResGroupUsers) + net.sopod.soim.data.msg.group.Group.ResGroupUsersOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ResGroupUsers.class, net.sopod.soim.data.msg.group.Group.ResGroupUsers.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ResGroupUsers.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getUsersFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (usersBuilder_ == null) { + users_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + usersBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupUsers getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ResGroupUsers.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupUsers build() { + net.sopod.soim.data.msg.group.Group.ResGroupUsers result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupUsers buildPartial() { + net.sopod.soim.data.msg.group.Group.ResGroupUsers result = new net.sopod.soim.data.msg.group.Group.ResGroupUsers(this); + int from_bitField0_ = bitField0_; + if (usersBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + users_ = java.util.Collections.unmodifiableList(users_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.users_ = users_; + } else { + result.users_ = usersBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ResGroupUsers) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ResGroupUsers)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ResGroupUsers other) { + if (other == net.sopod.soim.data.msg.group.Group.ResGroupUsers.getDefaultInstance()) return this; + if (usersBuilder_ == null) { + if (!other.users_.isEmpty()) { + if (users_.isEmpty()) { + users_ = other.users_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureUsersIsMutable(); + users_.addAll(other.users_); + } + onChanged(); + } + } else { + if (!other.users_.isEmpty()) { + if (usersBuilder_.isEmpty()) { + usersBuilder_.dispose(); + usersBuilder_ = null; + users_ = other.users_; + bitField0_ = (bitField0_ & ~0x00000001); + usersBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getUsersFieldBuilder() : null; + } else { + usersBuilder_.addAllMessages(other.users_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ResGroupUsers parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ResGroupUsers) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List users_ = + java.util.Collections.emptyList(); + private void ensureUsersIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + users_ = new java.util.ArrayList(users_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.group.Group.UserInfo, net.sopod.soim.data.msg.group.Group.UserInfo.Builder, net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder> usersBuilder_; + + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public java.util.List getUsersList() { + if (usersBuilder_ == null) { + return java.util.Collections.unmodifiableList(users_); + } else { + return usersBuilder_.getMessageList(); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public int getUsersCount() { + if (usersBuilder_ == null) { + return users_.size(); + } else { + return usersBuilder_.getCount(); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public net.sopod.soim.data.msg.group.Group.UserInfo getUsers(int index) { + if (usersBuilder_ == null) { + return users_.get(index); + } else { + return usersBuilder_.getMessage(index); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder setUsers( + int index, net.sopod.soim.data.msg.group.Group.UserInfo value) { + if (usersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUsersIsMutable(); + users_.set(index, value); + onChanged(); + } else { + usersBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder setUsers( + int index, net.sopod.soim.data.msg.group.Group.UserInfo.Builder builderForValue) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.set(index, builderForValue.build()); + onChanged(); + } else { + usersBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder addUsers(net.sopod.soim.data.msg.group.Group.UserInfo value) { + if (usersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUsersIsMutable(); + users_.add(value); + onChanged(); + } else { + usersBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder addUsers( + int index, net.sopod.soim.data.msg.group.Group.UserInfo value) { + if (usersBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureUsersIsMutable(); + users_.add(index, value); + onChanged(); + } else { + usersBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder addUsers( + net.sopod.soim.data.msg.group.Group.UserInfo.Builder builderForValue) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.add(builderForValue.build()); + onChanged(); + } else { + usersBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder addUsers( + int index, net.sopod.soim.data.msg.group.Group.UserInfo.Builder builderForValue) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.add(index, builderForValue.build()); + onChanged(); + } else { + usersBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder addAllUsers( + java.lang.Iterable values) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, users_); + onChanged(); + } else { + usersBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder clearUsers() { + if (usersBuilder_ == null) { + users_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + usersBuilder_.clear(); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public Builder removeUsers(int index) { + if (usersBuilder_ == null) { + ensureUsersIsMutable(); + users_.remove(index); + onChanged(); + } else { + usersBuilder_.remove(index); + } + return this; + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public net.sopod.soim.data.msg.group.Group.UserInfo.Builder getUsersBuilder( + int index) { + return getUsersFieldBuilder().getBuilder(index); + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder getUsersOrBuilder( + int index) { + if (usersBuilder_ == null) { + return users_.get(index); } else { + return usersBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public java.util.List + getUsersOrBuilderList() { + if (usersBuilder_ != null) { + return usersBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(users_); + } + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public net.sopod.soim.data.msg.group.Group.UserInfo.Builder addUsersBuilder() { + return getUsersFieldBuilder().addBuilder( + net.sopod.soim.data.msg.group.Group.UserInfo.getDefaultInstance()); + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public net.sopod.soim.data.msg.group.Group.UserInfo.Builder addUsersBuilder( + int index) { + return getUsersFieldBuilder().addBuilder( + index, net.sopod.soim.data.msg.group.Group.UserInfo.getDefaultInstance()); + } + /** + * repeated .net.sopod.soim.data.msg.group.UserInfo users = 3; + */ + public java.util.List + getUsersBuilderList() { + return getUsersFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.group.Group.UserInfo, net.sopod.soim.data.msg.group.Group.UserInfo.Builder, net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder> + getUsersFieldBuilder() { + if (usersBuilder_ == null) { + usersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + net.sopod.soim.data.msg.group.Group.UserInfo, net.sopod.soim.data.msg.group.Group.UserInfo.Builder, net.sopod.soim.data.msg.group.Group.UserInfoOrBuilder>( + users_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + users_ = null; + } + return usersBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ResGroupUsers) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ResGroupUsers) + private static final net.sopod.soim.data.msg.group.Group.ResGroupUsers DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ResGroupUsers(); + } + + public static net.sopod.soim.data.msg.group.Group.ResGroupUsers getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResGroupUsers parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResGroupUsers(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupUsers getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReqGroupMessageOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ReqGroupMessage) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * 发送者uid
+     * 
+ * + * int64 sender = 1; + * @return The sender. + */ + long getSender(); + + /** + *
+     * 接收者uid
+     * 
+ * + * int64 receiver = 2; + * @return The receiver. + */ + long getReceiver(); + + /** + *
+     * 文本消息内容
+     * 
+ * + * string message = 3; + * @return The message. + */ + java.lang.String getMessage(); + /** + *
+     * 文本消息内容
+     * 
+ * + * string message = 3; + * @return The bytes for message. + */ + com.google.protobuf.ByteString + getMessageBytes(); + + /** + *
+     * 发送时间
+     * 
+ * + * int64 time = 4; + * @return The time. + */ + long getTime(); + + /** + *
+     * 接收者账号
+     * 
+ * + * string receiverAccount = 5; + * @return The receiverAccount. + */ + java.lang.String getReceiverAccount(); + /** + *
+     * 接收者账号
+     * 
+ * + * string receiverAccount = 5; + * @return The bytes for receiverAccount. + */ + com.google.protobuf.ByteString + getReceiverAccountBytes(); + } + /** + *
+   * 文本聊天消息
+   * 
+ * + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqGroupMessage} + */ + public static final class ReqGroupMessage extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ReqGroupMessage) + ReqGroupMessageOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReqGroupMessage.newBuilder() to construct. + private ReqGroupMessage(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReqGroupMessage() { + message_ = ""; + receiverAccount_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReqGroupMessage(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReqGroupMessage( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + sender_ = input.readInt64(); + break; + } + case 16: { + + receiver_ = input.readInt64(); + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + message_ = s; + break; + } + case 32: { + + time_ = input.readInt64(); + break; + } + case 42: { + java.lang.String s = input.readStringRequireUtf8(); + + receiverAccount_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqGroupMessage.class, net.sopod.soim.data.msg.group.Group.ReqGroupMessage.Builder.class); + } + + public static final int SENDER_FIELD_NUMBER = 1; + private long sender_; + /** + *
+     * 发送者uid
+     * 
+ * + * int64 sender = 1; + * @return The sender. + */ + @java.lang.Override + public long getSender() { + return sender_; + } + + public static final int RECEIVER_FIELD_NUMBER = 2; + private long receiver_; + /** + *
+     * 接收者uid
+     * 
+ * + * int64 receiver = 2; + * @return The receiver. + */ + @java.lang.Override + public long getReceiver() { + return receiver_; + } + + public static final int MESSAGE_FIELD_NUMBER = 3; + private volatile java.lang.Object message_; + /** + *
+     * 文本消息内容
+     * 
+ * + * string message = 3; + * @return The message. + */ + @java.lang.Override + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } + } + /** + *
+     * 文本消息内容
+     * 
+ * + * string message = 3; + * @return The bytes for message. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TIME_FIELD_NUMBER = 4; + private long time_; + /** + *
+     * 发送时间
+     * 
+ * + * int64 time = 4; + * @return The time. + */ + @java.lang.Override + public long getTime() { + return time_; + } + + public static final int RECEIVERACCOUNT_FIELD_NUMBER = 5; + private volatile java.lang.Object receiverAccount_; + /** + *
+     * 接收者账号
+     * 
+ * + * string receiverAccount = 5; + * @return The receiverAccount. + */ + @java.lang.Override + public java.lang.String getReceiverAccount() { + java.lang.Object ref = receiverAccount_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + receiverAccount_ = s; + return s; + } + } + /** + *
+     * 接收者账号
+     * 
+ * + * string receiverAccount = 5; + * @return The bytes for receiverAccount. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getReceiverAccountBytes() { + java.lang.Object ref = receiverAccount_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + receiverAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (sender_ != 0L) { + output.writeInt64(1, sender_); + } + if (receiver_ != 0L) { + output.writeInt64(2, receiver_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, message_); + } + if (time_ != 0L) { + output.writeInt64(4, time_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(receiverAccount_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, receiverAccount_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (sender_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, sender_); + } + if (receiver_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, receiver_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, message_); + } + if (time_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(4, time_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(receiverAccount_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, receiverAccount_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ReqGroupMessage)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ReqGroupMessage other = (net.sopod.soim.data.msg.group.Group.ReqGroupMessage) obj; + + if (getSender() + != other.getSender()) return false; + if (getReceiver() + != other.getReceiver()) return false; + if (!getMessage() + .equals(other.getMessage())) return false; + if (getTime() + != other.getTime()) return false; + if (!getReceiverAccount() + .equals(other.getReceiverAccount())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SENDER_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getSender()); + hash = (37 * hash) + RECEIVER_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getReceiver()); + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (37 * hash) + TIME_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getTime()); + hash = (37 * hash) + RECEIVERACCOUNT_FIELD_NUMBER; + hash = (53 * hash) + getReceiverAccount().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ReqGroupMessage prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * 文本聊天消息
+     * 
+ * + * Protobuf type {@code net.sopod.soim.data.msg.group.ReqGroupMessage} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ReqGroupMessage) + net.sopod.soim.data.msg.group.Group.ReqGroupMessageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ReqGroupMessage.class, net.sopod.soim.data.msg.group.Group.ReqGroupMessage.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ReqGroupMessage.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + sender_ = 0L; + + receiver_ = 0L; + + message_ = ""; + + time_ = 0L; + + receiverAccount_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupMessage getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ReqGroupMessage.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupMessage build() { + net.sopod.soim.data.msg.group.Group.ReqGroupMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupMessage buildPartial() { + net.sopod.soim.data.msg.group.Group.ReqGroupMessage result = new net.sopod.soim.data.msg.group.Group.ReqGroupMessage(this); + result.sender_ = sender_; + result.receiver_ = receiver_; + result.message_ = message_; + result.time_ = time_; + result.receiverAccount_ = receiverAccount_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ReqGroupMessage) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ReqGroupMessage)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ReqGroupMessage other) { + if (other == net.sopod.soim.data.msg.group.Group.ReqGroupMessage.getDefaultInstance()) return this; + if (other.getSender() != 0L) { + setSender(other.getSender()); + } + if (other.getReceiver() != 0L) { + setReceiver(other.getReceiver()); + } + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + onChanged(); + } + if (other.getTime() != 0L) { + setTime(other.getTime()); + } + if (!other.getReceiverAccount().isEmpty()) { + receiverAccount_ = other.receiverAccount_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ReqGroupMessage parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ReqGroupMessage) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private long sender_ ; + /** + *
+       * 发送者uid
+       * 
+ * + * int64 sender = 1; + * @return The sender. + */ + @java.lang.Override + public long getSender() { + return sender_; + } + /** + *
+       * 发送者uid
+       * 
+ * + * int64 sender = 1; + * @param value The sender to set. + * @return This builder for chaining. + */ + public Builder setSender(long value) { + + sender_ = value; + onChanged(); + return this; + } + /** + *
+       * 发送者uid
+       * 
+ * + * int64 sender = 1; + * @return This builder for chaining. + */ + public Builder clearSender() { + + sender_ = 0L; + onChanged(); + return this; + } + + private long receiver_ ; + /** + *
+       * 接收者uid
+       * 
+ * + * int64 receiver = 2; + * @return The receiver. + */ + @java.lang.Override + public long getReceiver() { + return receiver_; + } + /** + *
+       * 接收者uid
+       * 
+ * + * int64 receiver = 2; + * @param value The receiver to set. + * @return This builder for chaining. + */ + public Builder setReceiver(long value) { + + receiver_ = value; + onChanged(); + return this; + } + /** + *
+       * 接收者uid
+       * 
+ * + * int64 receiver = 2; + * @return This builder for chaining. + */ + public Builder clearReceiver() { + + receiver_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object message_ = ""; + /** + *
+       * 文本消息内容
+       * 
+ * + * string message = 3; + * @return The message. + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 文本消息内容
+       * 
+ * + * string message = 3; + * @return The bytes for message. + */ + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 文本消息内容
+       * 
+ * + * string message = 3; + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + message_ = value; + onChanged(); + return this; + } + /** + *
+       * 文本消息内容
+       * 
+ * + * string message = 3; + * @return This builder for chaining. + */ + public Builder clearMessage() { + + message_ = getDefaultInstance().getMessage(); + onChanged(); + return this; + } + /** + *
+       * 文本消息内容
+       * 
+ * + * string message = 3; + * @param value The bytes for message to set. + * @return This builder for chaining. + */ + public Builder setMessageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + message_ = value; + onChanged(); + return this; + } + + private long time_ ; + /** + *
+       * 发送时间
+       * 
+ * + * int64 time = 4; + * @return The time. + */ + @java.lang.Override + public long getTime() { + return time_; + } + /** + *
+       * 发送时间
+       * 
+ * + * int64 time = 4; + * @param value The time to set. + * @return This builder for chaining. + */ + public Builder setTime(long value) { + + time_ = value; + onChanged(); + return this; + } + /** + *
+       * 发送时间
+       * 
+ * + * int64 time = 4; + * @return This builder for chaining. + */ + public Builder clearTime() { + + time_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object receiverAccount_ = ""; + /** + *
+       * 接收者账号
+       * 
+ * + * string receiverAccount = 5; + * @return The receiverAccount. + */ + public java.lang.String getReceiverAccount() { + java.lang.Object ref = receiverAccount_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + receiverAccount_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 接收者账号
+       * 
+ * + * string receiverAccount = 5; + * @return The bytes for receiverAccount. + */ + public com.google.protobuf.ByteString + getReceiverAccountBytes() { + java.lang.Object ref = receiverAccount_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + receiverAccount_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 接收者账号
+       * 
+ * + * string receiverAccount = 5; + * @param value The receiverAccount to set. + * @return This builder for chaining. + */ + public Builder setReceiverAccount( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + receiverAccount_ = value; + onChanged(); + return this; + } + /** + *
+       * 接收者账号
+       * 
+ * + * string receiverAccount = 5; + * @return This builder for chaining. + */ + public Builder clearReceiverAccount() { + + receiverAccount_ = getDefaultInstance().getReceiverAccount(); + onChanged(); + return this; + } + /** + *
+       * 接收者账号
+       * 
+ * + * string receiverAccount = 5; + * @param value The bytes for receiverAccount to set. + * @return This builder for chaining. + */ + public Builder setReceiverAccountBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + receiverAccount_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ReqGroupMessage) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ReqGroupMessage) + private static final net.sopod.soim.data.msg.group.Group.ReqGroupMessage DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ReqGroupMessage(); + } + + public static net.sopod.soim.data.msg.group.Group.ReqGroupMessage getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReqGroupMessage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReqGroupMessage(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ReqGroupMessage getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ResGroupMessageOrBuilder extends + // @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.group.ResGroupMessage) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * 是否发送成功
+     * 
+ * + * bool success = 1; + * @return The success. + */ + boolean getSuccess(); + + /** + *
+     * 失败原因
+     * 
+ * + * string message = 2; + * @return The message. + */ + java.lang.String getMessage(); + /** + *
+     * 失败原因
+     * 
+ * + * string message = 2; + * @return The bytes for message. + */ + com.google.protobuf.ByteString + getMessageBytes(); + + /** + *
+     * 消息id
+     * 
+ * + * int64 msgId = 3; + * @return The msgId. + */ + long getMsgId(); + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ResGroupMessage} + */ + public static final class ResGroupMessage extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.group.ResGroupMessage) + ResGroupMessageOrBuilder { + private static final long serialVersionUID = 0L; + // Use ResGroupMessage.newBuilder() to construct. + private ResGroupMessage(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ResGroupMessage() { + message_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ResGroupMessage(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ResGroupMessage( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + success_ = input.readBool(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + message_ = s; + break; + } + case 24: { + + msgId_ = input.readInt64(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ResGroupMessage.class, net.sopod.soim.data.msg.group.Group.ResGroupMessage.Builder.class); + } + + public static final int SUCCESS_FIELD_NUMBER = 1; + private boolean success_; + /** + *
+     * 是否发送成功
+     * 
+ * + * bool success = 1; + * @return The success. + */ + @java.lang.Override + public boolean getSuccess() { + return success_; + } + + public static final int MESSAGE_FIELD_NUMBER = 2; + private volatile java.lang.Object message_; + /** + *
+     * 失败原因
+     * 
+ * + * string message = 2; + * @return The message. + */ + @java.lang.Override + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } + } + /** + *
+     * 失败原因
+     * 
+ * + * string message = 2; + * @return The bytes for message. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MSGID_FIELD_NUMBER = 3; + private long msgId_; + /** + *
+     * 消息id
+     * 
+ * + * int64 msgId = 3; + * @return The msgId. + */ + @java.lang.Override + public long getMsgId() { + return msgId_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (success_ != false) { + output.writeBool(1, success_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, message_); + } + if (msgId_ != 0L) { + output.writeInt64(3, msgId_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (success_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, success_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, message_); + } + if (msgId_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(3, msgId_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof net.sopod.soim.data.msg.group.Group.ResGroupMessage)) { + return super.equals(obj); + } + net.sopod.soim.data.msg.group.Group.ResGroupMessage other = (net.sopod.soim.data.msg.group.Group.ResGroupMessage) obj; + + if (getSuccess() + != other.getSuccess()) return false; + if (!getMessage() + .equals(other.getMessage())) return false; + if (getMsgId() + != other.getMsgId()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SUCCESS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getSuccess()); + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (37 * hash) + MSGID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getMsgId()); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(net.sopod.soim.data.msg.group.Group.ResGroupMessage prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code net.sopod.soim.data.msg.group.ResGroupMessage} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.group.ResGroupMessage) + net.sopod.soim.data.msg.group.Group.ResGroupMessageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + net.sopod.soim.data.msg.group.Group.ResGroupMessage.class, net.sopod.soim.data.msg.group.Group.ResGroupMessage.Builder.class); + } + + // Construct using net.sopod.soim.data.msg.group.Group.ResGroupMessage.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + success_ = false; + + message_ = ""; + + msgId_ = 0L; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return net.sopod.soim.data.msg.group.Group.internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_descriptor; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupMessage getDefaultInstanceForType() { + return net.sopod.soim.data.msg.group.Group.ResGroupMessage.getDefaultInstance(); + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupMessage build() { + net.sopod.soim.data.msg.group.Group.ResGroupMessage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupMessage buildPartial() { + net.sopod.soim.data.msg.group.Group.ResGroupMessage result = new net.sopod.soim.data.msg.group.Group.ResGroupMessage(this); + result.success_ = success_; + result.message_ = message_; + result.msgId_ = msgId_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof net.sopod.soim.data.msg.group.Group.ResGroupMessage) { + return mergeFrom((net.sopod.soim.data.msg.group.Group.ResGroupMessage)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(net.sopod.soim.data.msg.group.Group.ResGroupMessage other) { + if (other == net.sopod.soim.data.msg.group.Group.ResGroupMessage.getDefaultInstance()) return this; + if (other.getSuccess() != false) { + setSuccess(other.getSuccess()); + } + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + onChanged(); + } + if (other.getMsgId() != 0L) { + setMsgId(other.getMsgId()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + net.sopod.soim.data.msg.group.Group.ResGroupMessage parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (net.sopod.soim.data.msg.group.Group.ResGroupMessage) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private boolean success_ ; + /** + *
+       * 是否发送成功
+       * 
+ * + * bool success = 1; + * @return The success. + */ + @java.lang.Override + public boolean getSuccess() { + return success_; + } + /** + *
+       * 是否发送成功
+       * 
+ * + * bool success = 1; + * @param value The success to set. + * @return This builder for chaining. + */ + public Builder setSuccess(boolean value) { + + success_ = value; + onChanged(); + return this; + } + /** + *
+       * 是否发送成功
+       * 
+ * + * bool success = 1; + * @return This builder for chaining. + */ + public Builder clearSuccess() { + + success_ = false; + onChanged(); + return this; + } + + private java.lang.Object message_ = ""; + /** + *
+       * 失败原因
+       * 
+ * + * string message = 2; + * @return The message. + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * 失败原因
+       * 
+ * + * string message = 2; + * @return The bytes for message. + */ + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * 失败原因
+       * 
+ * + * string message = 2; + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + message_ = value; + onChanged(); + return this; + } + /** + *
+       * 失败原因
+       * 
+ * + * string message = 2; + * @return This builder for chaining. + */ + public Builder clearMessage() { + + message_ = getDefaultInstance().getMessage(); + onChanged(); + return this; + } + /** + *
+       * 失败原因
+       * 
+ * + * string message = 2; + * @param value The bytes for message to set. + * @return This builder for chaining. + */ + public Builder setMessageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + message_ = value; + onChanged(); + return this; + } + + private long msgId_ ; + /** + *
+       * 消息id
+       * 
+ * + * int64 msgId = 3; + * @return The msgId. + */ + @java.lang.Override + public long getMsgId() { + return msgId_; + } + /** + *
+       * 消息id
+       * 
+ * + * int64 msgId = 3; + * @param value The msgId to set. + * @return This builder for chaining. + */ + public Builder setMsgId(long value) { + + msgId_ = value; + onChanged(); + return this; + } + /** + *
+       * 消息id
+       * 
+ * + * int64 msgId = 3; + * @return This builder for chaining. + */ + public Builder clearMsgId() { + + msgId_ = 0L; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.group.ResGroupMessage) + } + + // @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.group.ResGroupMessage) + private static final net.sopod.soim.data.msg.group.Group.ResGroupMessage DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new net.sopod.soim.data.msg.group.Group.ResGroupMessage(); + } + + public static net.sopod.soim.data.msg.group.Group.ResGroupMessage getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ResGroupMessage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ResGroupMessage(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public net.sopod.soim.data.msg.group.Group.ResGroupMessage getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_GroupInfo_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_GroupInfo_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_UserInfo_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_UserInfo_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\027proto/group/Group.proto\022\035net.sopod.soi" + + "m.data.msg.group\"c\n\tGroupInfo\022\013\n\003gid\030\001 \001" + + "(\003\022\021\n\tgroupName\030\002 \001(\t\022\021\n\tuserLimit\030\003 \001(\005" + + "\022\017\n\007userNum\030\004 \001(\005\022\022\n\ncreateTime\030\005 \001(\003\"^\n" + + "\010UserInfo\022\013\n\003uid\030\001 \001(\003\022\017\n\007account\030\002 \001(\t\022" + + "\020\n\010nickname\030\003 \001(\t\022\016\n\006online\030\004 \001(\010\022\022\n\nlas" + + "tActive\030\005 \001(\003\"#\n\016ReqCreateGroup\022\021\n\tgroup" + + "Name\030\001 \001(\t\"#\n\016ReqSearchGroup\022\021\n\tgroupNam" + + "e\030\001 \001(\t\"J\n\016ResSearchGroup\0228\n\006groups\030\003 \003(" + + "\0132(.net.sopod.soim.data.msg.group.GroupI" + + "nfo\"(\n\014ReqJoinGroup\022\013\n\003gid\030\001 \001(\003\022\013\n\003uid\030" + + "\002 \001(\003\"\034\n\rReqGroupUsers\022\013\n\003gid\030\001 \001(\003\"G\n\rR" + + "esGroupUsers\0226\n\005users\030\003 \003(\0132\'.net.sopod." + + "soim.data.msg.group.UserInfo\"k\n\017ReqGroup" + + "Message\022\016\n\006sender\030\001 \001(\003\022\020\n\010receiver\030\002 \001(" + + "\003\022\017\n\007message\030\003 \001(\t\022\014\n\004time\030\004 \001(\003\022\027\n\017rece" + + "iverAccount\030\005 \001(\t\"B\n\017ResGroupMessage\022\017\n\007" + + "success\030\001 \001(\010\022\017\n\007message\030\002 \001(\t\022\r\n\005msgId\030" + + "\003 \001(\003B\tB\005GroupP\000b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_net_sopod_soim_data_msg_group_GroupInfo_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_net_sopod_soim_data_msg_group_GroupInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_GroupInfo_descriptor, + new java.lang.String[] { "Gid", "GroupName", "UserLimit", "UserNum", "CreateTime", }); + internal_static_net_sopod_soim_data_msg_group_UserInfo_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_net_sopod_soim_data_msg_group_UserInfo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_UserInfo_descriptor, + new java.lang.String[] { "Uid", "Account", "Nickname", "Online", "LastActive", }); + internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ReqCreateGroup_descriptor, + new java.lang.String[] { "GroupName", }); + internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ReqSearchGroup_descriptor, + new java.lang.String[] { "GroupName", }); + internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ResSearchGroup_descriptor, + new java.lang.String[] { "Groups", }); + internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ReqJoinGroup_descriptor, + new java.lang.String[] { "Gid", "Uid", }); + internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ReqGroupUsers_descriptor, + new java.lang.String[] { "Gid", }); + internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ResGroupUsers_descriptor, + new java.lang.String[] { "Users", }); + internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ReqGroupMessage_descriptor, + new java.lang.String[] { "Sender", "Receiver", "Message", "Time", "ReceiverAccount", }); + internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_net_sopod_soim_data_msg_group_ResGroupMessage_descriptor, + new java.lang.String[] { "Success", "Message", "MsgId", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/im-service-api/im-entry-protocol/src/main/resources/proto/common/Res.proto b/im-service-api/im-entry-protocol/src/main/resources/proto/common/Res.proto new file mode 100644 index 0000000..3cc6d3d --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/resources/proto/common/Res.proto @@ -0,0 +1,15 @@ +syntax="proto3"; + +option java_multiple_files = false; +option java_outer_classname = "Res"; + +package net.sopod.soim.data.msg.common; + +message ResState { + // 是否成功 + bool success = 1; + // 失败消息 + string message = 2; + // 成功通知 + string notice = 3; +} diff --git a/im-service-api/im-entry-protocol/src/main/resources/proto/group/Group.proto b/im-service-api/im-entry-protocol/src/main/resources/proto/group/Group.proto new file mode 100644 index 0000000..de606c1 --- /dev/null +++ b/im-service-api/im-entry-protocol/src/main/resources/proto/group/Group.proto @@ -0,0 +1,79 @@ +syntax="proto3"; + +option java_multiple_files = false; +option java_outer_classname = "Group"; + +package net.sopod.soim.data.msg.group; + +message GroupInfo { + int64 gid = 1; + string groupName = 2; + int32 userLimit = 3; + int32 userNum = 4; + int64 createTime = 5; +} + +message UserInfo { + int64 uid = 1; + string account = 2; + string nickname = 3; + bool online = 4; + // 最后活跃时间 + int64 lastActive = 5; +} + +message ReqCreateGroup { + // 群名称 + string groupName = 1; +} + +//message ResCreateGroup { +// +//} + +message ReqSearchGroup { + // 群名称模糊搜素 + string groupName = 1; +} + +message ResSearchGroup { + repeated GroupInfo groups = 3; +} + +message ReqJoinGroup { + int64 gid = 1; + int64 uid = 2; +} + +//message ResAddGroup { +// +//} + +message ReqGroupUsers { + int64 gid = 1; +} + +message ResGroupUsers { + repeated UserInfo users = 3; +} + +// 文本聊天消息 +message ReqGroupMessage { + // 发送者uid + int64 sender = 1; + // 群聊id + int64 gid = 2; + // 文本消息内容 + string message = 3; + // 发送时间 + int64 time = 4; +} + +message ResGroupMessage { + // 是否发送成功 + bool success = 1; + // 失败原因 + string message = 2; + // 消息id + int64 msgId = 3; +} diff --git a/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt b/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt index 32daa53..5ad5bcc 100644 --- a/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt +++ b/im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt @@ -1,17 +1,28 @@ -net.sopod.soim.data.msg.user.Friend$ResAddFriend=10000 -net.sopod.soim.data.msg.chat.Chat$TextChat=10001 -net.sopod.soim.data.msg.user.Friend$ReqFriendList=10002 -net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10003 -net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10004 -net.sopod.soim.data.msg.hello.HelloPB$World=10005 -net.sopod.soim.data.msg.net.HeartBeat$Pong=10006 -net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10007 -net.sopod.soim.data.msg.net.HeartBeat$Ping=10008 -net.sopod.soim.data.msg.user.Friend$ReqAddFriend=10009 -net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10010 -net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10011 -net.sopod.soim.data.msg.user.UserMsg$UserInfo=10012 -net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10013 -net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10014 -net.sopod.soim.data.msg.user.Friend$ResFriendList=10015 -net.sopod.soim.data.msg.hello.HelloPB$Hello=10016 +net.sopod.soim.data.msg.user.Friend$ResFriendList=10000 +net.sopod.soim.data.msg.group.Group$ResSearchGroup=10001 +net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10002 +net.sopod.soim.data.msg.common.Res$ResState=10003 +net.sopod.soim.data.msg.user.Friend$ReqAddFriend=10004 +net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10005 +net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10006 +net.sopod.soim.data.msg.user.Friend$ReqFriendList=10007 +net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10008 +net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10009 +net.sopod.soim.data.msg.group.Group$ReqSearchGroup=10010 +net.sopod.soim.data.msg.chat.Chat$TextChat=10011 +net.sopod.soim.data.msg.hello.HelloPB$World=10012 +net.sopod.soim.data.msg.hello.HelloPB$Hello=10013 +net.sopod.soim.data.msg.group.Group$ResGroupMessage=10014 +net.sopod.soim.data.msg.net.HeartBeat$Pong=10015 +net.sopod.soim.data.msg.group.Group$ReqJoinGroup=10016 +net.sopod.soim.data.msg.group.Group$ReqCreateGroup=10017 +net.sopod.soim.data.msg.group.Group$UserInfo=10018 +net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10019 +net.sopod.soim.data.msg.group.Group$ReqGroupMessage=10020 +net.sopod.soim.data.msg.group.Group$ReqGroupUsers=10021 +net.sopod.soim.data.msg.group.Group$ResGroupUsers=10022 +net.sopod.soim.data.msg.net.HeartBeat$Ping=10023 +net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10024 +net.sopod.soim.data.msg.user.UserMsg$UserInfo=10025 +net.sopod.soim.data.msg.user.Friend$ResAddFriend=10026 +net.sopod.soim.data.msg.group.Group$GroupInfo=10027 diff --git a/im-service-api/im-logic-friend-api/pom.xml b/im-service-api/im-logic-friend-api/pom.xml deleted file mode 100644 index 05b6712..0000000 --- a/im-service-api/im-logic-friend-api/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - im-service-api - net.sopod - 1.0.0 - - 4.0.0 - - im-logic-friend-api - 好友功能模块 - - - - org.apache.dubbo - dubbo-serialization-protobuf - ${dubbo.protobuf.verion} - - - org.apache.dubbo - dubbo-common - - - - - com.google.protobuf - protobuf-java - ${protoc.version} - - - com.google.protobuf - protobuf-java-util - ${protoc.version} - - - - \ No newline at end of file diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountInfo.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountInfo.java deleted file mode 100644 index 4407840..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountInfo.java +++ /dev/null @@ -1,760 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -/** - * Protobuf type {@code net.sopod.soim.logic.api.friend.search.AccountInfo} - */ -public final class AccountInfo extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:net.sopod.soim.logic.api.friend.search.AccountInfo) - AccountInfoOrBuilder { -private static final long serialVersionUID = 0L; - // Use AccountInfo.newBuilder() to construct. - private AccountInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private AccountInfo() { - account_ = ""; - nickname_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new AccountInfo(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private AccountInfo( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - - uid_ = input.readInt64(); - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - account_ = s; - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - nickname_ = s; - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.logic.api.friend.search.AccountInfo.class, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder.class); - } - - public static final int UID_FIELD_NUMBER = 1; - private long uid_; - /** - * int64 uid = 1; - * @return The uid. - */ - @java.lang.Override - public long getUid() { - return uid_; - } - - public static final int ACCOUNT_FIELD_NUMBER = 2; - private volatile java.lang.Object account_; - /** - * string account = 2; - * @return The account. - */ - @java.lang.Override - public java.lang.String getAccount() { - java.lang.Object ref = account_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - account_ = s; - return s; - } - } - /** - * string account = 2; - * @return The bytes for account. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getAccountBytes() { - java.lang.Object ref = account_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int NICKNAME_FIELD_NUMBER = 3; - private volatile java.lang.Object nickname_; - /** - * string nickname = 3; - * @return The nickname. - */ - @java.lang.Override - public java.lang.String getNickname() { - java.lang.Object ref = nickname_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - nickname_ = s; - return s; - } - } - /** - * string nickname = 3; - * @return The bytes for nickname. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getNicknameBytes() { - java.lang.Object ref = nickname_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - nickname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (uid_ != 0L) { - output.writeInt64(1, uid_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, account_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nickname_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (uid_ != 0L) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, uid_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, account_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nickname_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof net.sopod.soim.logic.api.friend.search.AccountInfo)) { - return super.equals(obj); - } - net.sopod.soim.logic.api.friend.search.AccountInfo other = (net.sopod.soim.logic.api.friend.search.AccountInfo) obj; - - if (getUid() - != other.getUid()) return false; - if (!getAccount() - .equals(other.getAccount())) return false; - if (!getNickname() - .equals(other.getNickname())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + UID_FIELD_NUMBER; - hash = (53 * hash) + com.google.protobuf.Internal.hashLong( - getUid()); - hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; - hash = (53 * hash) + getAccount().hashCode(); - hash = (37 * hash) + NICKNAME_FIELD_NUMBER; - hash = (53 * hash) + getNickname().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.AccountInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(net.sopod.soim.logic.api.friend.search.AccountInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code net.sopod.soim.logic.api.friend.search.AccountInfo} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:net.sopod.soim.logic.api.friend.search.AccountInfo) - net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.logic.api.friend.search.AccountInfo.class, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder.class); - } - - // Construct using net.sopod.soim.logic.api.friend.search.AccountInfo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - uid_ = 0L; - - account_ = ""; - - nickname_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_descriptor; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.AccountInfo getDefaultInstanceForType() { - return net.sopod.soim.logic.api.friend.search.AccountInfo.getDefaultInstance(); - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.AccountInfo build() { - net.sopod.soim.logic.api.friend.search.AccountInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.AccountInfo buildPartial() { - net.sopod.soim.logic.api.friend.search.AccountInfo result = new net.sopod.soim.logic.api.friend.search.AccountInfo(this); - result.uid_ = uid_; - result.account_ = account_; - result.nickname_ = nickname_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof net.sopod.soim.logic.api.friend.search.AccountInfo) { - return mergeFrom((net.sopod.soim.logic.api.friend.search.AccountInfo)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(net.sopod.soim.logic.api.friend.search.AccountInfo other) { - if (other == net.sopod.soim.logic.api.friend.search.AccountInfo.getDefaultInstance()) return this; - if (other.getUid() != 0L) { - setUid(other.getUid()); - } - if (!other.getAccount().isEmpty()) { - account_ = other.account_; - onChanged(); - } - if (!other.getNickname().isEmpty()) { - nickname_ = other.nickname_; - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - net.sopod.soim.logic.api.friend.search.AccountInfo parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (net.sopod.soim.logic.api.friend.search.AccountInfo) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private long uid_ ; - /** - * int64 uid = 1; - * @return The uid. - */ - @java.lang.Override - public long getUid() { - return uid_; - } - /** - * int64 uid = 1; - * @param value The uid to set. - * @return This builder for chaining. - */ - public Builder setUid(long value) { - - uid_ = value; - onChanged(); - return this; - } - /** - * int64 uid = 1; - * @return This builder for chaining. - */ - public Builder clearUid() { - - uid_ = 0L; - onChanged(); - return this; - } - - private java.lang.Object account_ = ""; - /** - * string account = 2; - * @return The account. - */ - public java.lang.String getAccount() { - java.lang.Object ref = account_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - account_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string account = 2; - * @return The bytes for account. - */ - public com.google.protobuf.ByteString - getAccountBytes() { - java.lang.Object ref = account_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - account_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string account = 2; - * @param value The account to set. - * @return This builder for chaining. - */ - public Builder setAccount( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - account_ = value; - onChanged(); - return this; - } - /** - * string account = 2; - * @return This builder for chaining. - */ - public Builder clearAccount() { - - account_ = getDefaultInstance().getAccount(); - onChanged(); - return this; - } - /** - * string account = 2; - * @param value The bytes for account to set. - * @return This builder for chaining. - */ - public Builder setAccountBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - account_ = value; - onChanged(); - return this; - } - - private java.lang.Object nickname_ = ""; - /** - * string nickname = 3; - * @return The nickname. - */ - public java.lang.String getNickname() { - java.lang.Object ref = nickname_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - nickname_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string nickname = 3; - * @return The bytes for nickname. - */ - public com.google.protobuf.ByteString - getNicknameBytes() { - java.lang.Object ref = nickname_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - nickname_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string nickname = 3; - * @param value The nickname to set. - * @return This builder for chaining. - */ - public Builder setNickname( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - nickname_ = value; - onChanged(); - return this; - } - /** - * string nickname = 3; - * @return This builder for chaining. - */ - public Builder clearNickname() { - - nickname_ = getDefaultInstance().getNickname(); - onChanged(); - return this; - } - /** - * string nickname = 3; - * @param value The bytes for nickname to set. - * @return This builder for chaining. - */ - public Builder setNicknameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - nickname_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:net.sopod.soim.logic.api.friend.search.AccountInfo) - } - - // @@protoc_insertion_point(class_scope:net.sopod.soim.logic.api.friend.search.AccountInfo) - private static final net.sopod.soim.logic.api.friend.search.AccountInfo DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new net.sopod.soim.logic.api.friend.search.AccountInfo(); - } - - public static net.sopod.soim.logic.api.friend.search.AccountInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public AccountInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new AccountInfo(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.AccountInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - -} - diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountInfoOrBuilder.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountInfoOrBuilder.java deleted file mode 100644 index a3e0f16..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountInfoOrBuilder.java +++ /dev/null @@ -1,39 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -public interface AccountInfoOrBuilder extends - // @@protoc_insertion_point(interface_extends:net.sopod.soim.logic.api.friend.search.AccountInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * int64 uid = 1; - * @return The uid. - */ - long getUid(); - - /** - * string account = 2; - * @return The account. - */ - java.lang.String getAccount(); - /** - * string account = 2; - * @return The bytes for account. - */ - com.google.protobuf.ByteString - getAccountBytes(); - - /** - * string nickname = 3; - * @return The nickname. - */ - java.lang.String getNickname(); - /** - * string nickname = 3; - * @return The bytes for nickname. - */ - com.google.protobuf.ByteString - getNicknameBytes(); -} diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearch.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearch.java deleted file mode 100644 index 3ede02f..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearch.java +++ /dev/null @@ -1,78 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -public final class AccountSearch { - private AccountSearch() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistryLite registry) { - } - - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - registerAllExtensions( - (com.google.protobuf.ExtensionRegistryLite) registry); - } - static final com.google.protobuf.Descriptors.Descriptor - internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_descriptor; - static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_fieldAccessorTable; - static final com.google.protobuf.Descriptors.Descriptor - internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_descriptor; - static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_fieldAccessorTable; - static final com.google.protobuf.Descriptors.Descriptor - internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_descriptor; - static final - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\031proto/AccountSearch.proto\022&net.sopod.s" + - "oim.logic.api.friend.search\"#\n\020ReqAccoun" + - "tSearch\022\017\n\007keyword\030\001 \001(\t\"Y\n\020ResAccountSe" + - "arch\022E\n\010accounts\030\001 \003(\01323.net.sopod.soim." + - "logic.api.friend.search.AccountInfo\"=\n\013A" + - "ccountInfo\022\013\n\003uid\030\001 \001(\003\022\017\n\007account\030\002 \001(\t" + - "\022\020\n\010nickname\030\003 \001(\t2\244\001\n\024AccountSearchServ" + - "ice\022\213\001\n\023searchAccountLikely\0228.net.sopod." + - "soim.logic.api.friend.search.ReqAccountS" + - "earch\0328.net.sopod.soim.logic.api.friend." + - "search.ResAccountSearch\"\000B\002P\001b\006proto3" - }; - descriptor = com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }); - internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_descriptor, - new java.lang.String[] { "Keyword", }); - internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_descriptor, - new java.lang.String[] { "Accounts", }); - internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_net_sopod_soim_logic_api_friend_search_AccountInfo_descriptor, - new java.lang.String[] { "Uid", "Account", "Nickname", }); - } - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearchService.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearchService.java deleted file mode 100644 index e087971..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearchService.java +++ /dev/null @@ -1,21 +0,0 @@ - package net.sopod.soim.logic.api.friend.search; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicBoolean; - -@javax.annotation.Generated( -value = "by Dubbo generator", -comments = "Source: proto/AccountSearch.proto") -public interface AccountSearchService { -static final String JAVA_SERVICE_NAME = "net.sopod.soim.logic.api.friend.search.AccountSearchService"; -static final String SERVICE_NAME = "net.sopod.soim.logic.api.friend.search.AccountSearchService"; - - // FIXME, initialize Dubbo3 stub when interface loaded, thinking of new ways doing this. - static final boolean inited = AccountSearchServiceDubbo.init(); - - net.sopod.soim.logic.api.friend.search.ResAccountSearch searchAccountLikely(net.sopod.soim.logic.api.friend.search.ReqAccountSearch request); - - CompletableFuture searchAccountLikelyAsync(net.sopod.soim.logic.api.friend.search.ReqAccountSearch request); - - -} diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearchServiceDubbo.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearchServiceDubbo.java deleted file mode 100644 index fa08a93..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/AccountSearchServiceDubbo.java +++ /dev/null @@ -1,24 +0,0 @@ - package net.sopod.soim.logic.api.friend.search; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.atomic.AtomicBoolean; - -@javax.annotation.Generated( -value = "by Dubbo generator", -comments = "Source: proto/AccountSearch.proto") -public final class AccountSearchServiceDubbo { -private static final AtomicBoolean registered = new AtomicBoolean(); - -public static boolean init() { - if (registered.compareAndSet(false, true)) { - org.apache.dubbo.common.serialize.protobuf.support.ProtobufUtils.marshaller( - net.sopod.soim.logic.api.friend.search.ReqAccountSearch.getDefaultInstance()); - org.apache.dubbo.common.serialize.protobuf.support.ProtobufUtils.marshaller( - net.sopod.soim.logic.api.friend.search.ResAccountSearch.getDefaultInstance()); - } - return true; -} - -private AccountSearchServiceDubbo() {} - -} diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ReqAccountSearch.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ReqAccountSearch.java deleted file mode 100644 index 13048d2..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ReqAccountSearch.java +++ /dev/null @@ -1,557 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -/** - * Protobuf type {@code net.sopod.soim.logic.api.friend.search.ReqAccountSearch} - */ -public final class ReqAccountSearch extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:net.sopod.soim.logic.api.friend.search.ReqAccountSearch) - ReqAccountSearchOrBuilder { -private static final long serialVersionUID = 0L; - // Use ReqAccountSearch.newBuilder() to construct. - private ReqAccountSearch(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ReqAccountSearch() { - keyword_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ReqAccountSearch(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ReqAccountSearch( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - keyword_ = s; - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.logic.api.friend.search.ReqAccountSearch.class, net.sopod.soim.logic.api.friend.search.ReqAccountSearch.Builder.class); - } - - public static final int KEYWORD_FIELD_NUMBER = 1; - private volatile java.lang.Object keyword_; - /** - * string keyword = 1; - * @return The keyword. - */ - @java.lang.Override - public java.lang.String getKeyword() { - java.lang.Object ref = keyword_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - keyword_ = s; - return s; - } - } - /** - * string keyword = 1; - * @return The bytes for keyword. - */ - @java.lang.Override - public com.google.protobuf.ByteString - getKeywordBytes() { - java.lang.Object ref = keyword_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - keyword_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keyword_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, keyword_); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(keyword_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, keyword_); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof net.sopod.soim.logic.api.friend.search.ReqAccountSearch)) { - return super.equals(obj); - } - net.sopod.soim.logic.api.friend.search.ReqAccountSearch other = (net.sopod.soim.logic.api.friend.search.ReqAccountSearch) obj; - - if (!getKeyword() - .equals(other.getKeyword())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + KEYWORD_FIELD_NUMBER; - hash = (53 * hash) + getKeyword().hashCode(); - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(net.sopod.soim.logic.api.friend.search.ReqAccountSearch prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code net.sopod.soim.logic.api.friend.search.ReqAccountSearch} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:net.sopod.soim.logic.api.friend.search.ReqAccountSearch) - net.sopod.soim.logic.api.friend.search.ReqAccountSearchOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.logic.api.friend.search.ReqAccountSearch.class, net.sopod.soim.logic.api.friend.search.ReqAccountSearch.Builder.class); - } - - // Construct using net.sopod.soim.logic.api.friend.search.ReqAccountSearch.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - keyword_ = ""; - - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ReqAccountSearch_descriptor; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ReqAccountSearch getDefaultInstanceForType() { - return net.sopod.soim.logic.api.friend.search.ReqAccountSearch.getDefaultInstance(); - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ReqAccountSearch build() { - net.sopod.soim.logic.api.friend.search.ReqAccountSearch result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ReqAccountSearch buildPartial() { - net.sopod.soim.logic.api.friend.search.ReqAccountSearch result = new net.sopod.soim.logic.api.friend.search.ReqAccountSearch(this); - result.keyword_ = keyword_; - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof net.sopod.soim.logic.api.friend.search.ReqAccountSearch) { - return mergeFrom((net.sopod.soim.logic.api.friend.search.ReqAccountSearch)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(net.sopod.soim.logic.api.friend.search.ReqAccountSearch other) { - if (other == net.sopod.soim.logic.api.friend.search.ReqAccountSearch.getDefaultInstance()) return this; - if (!other.getKeyword().isEmpty()) { - keyword_ = other.keyword_; - onChanged(); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - net.sopod.soim.logic.api.friend.search.ReqAccountSearch parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (net.sopod.soim.logic.api.friend.search.ReqAccountSearch) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - - private java.lang.Object keyword_ = ""; - /** - * string keyword = 1; - * @return The keyword. - */ - public java.lang.String getKeyword() { - java.lang.Object ref = keyword_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - keyword_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * string keyword = 1; - * @return The bytes for keyword. - */ - public com.google.protobuf.ByteString - getKeywordBytes() { - java.lang.Object ref = keyword_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - keyword_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * string keyword = 1; - * @param value The keyword to set. - * @return This builder for chaining. - */ - public Builder setKeyword( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - keyword_ = value; - onChanged(); - return this; - } - /** - * string keyword = 1; - * @return This builder for chaining. - */ - public Builder clearKeyword() { - - keyword_ = getDefaultInstance().getKeyword(); - onChanged(); - return this; - } - /** - * string keyword = 1; - * @param value The bytes for keyword to set. - * @return This builder for chaining. - */ - public Builder setKeywordBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - keyword_ = value; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:net.sopod.soim.logic.api.friend.search.ReqAccountSearch) - } - - // @@protoc_insertion_point(class_scope:net.sopod.soim.logic.api.friend.search.ReqAccountSearch) - private static final net.sopod.soim.logic.api.friend.search.ReqAccountSearch DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new net.sopod.soim.logic.api.friend.search.ReqAccountSearch(); - } - - public static net.sopod.soim.logic.api.friend.search.ReqAccountSearch getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ReqAccountSearch parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ReqAccountSearch(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ReqAccountSearch getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - -} - diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ReqAccountSearchOrBuilder.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ReqAccountSearchOrBuilder.java deleted file mode 100644 index 0a52e6d..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ReqAccountSearchOrBuilder.java +++ /dev/null @@ -1,21 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -public interface ReqAccountSearchOrBuilder extends - // @@protoc_insertion_point(interface_extends:net.sopod.soim.logic.api.friend.search.ReqAccountSearch) - com.google.protobuf.MessageOrBuilder { - - /** - * string keyword = 1; - * @return The keyword. - */ - java.lang.String getKeyword(); - /** - * string keyword = 1; - * @return The bytes for keyword. - */ - com.google.protobuf.ByteString - getKeywordBytes(); -} diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ResAccountSearch.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ResAccountSearch.java deleted file mode 100644 index 0419961..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ResAccountSearch.java +++ /dev/null @@ -1,770 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -/** - * Protobuf type {@code net.sopod.soim.logic.api.friend.search.ResAccountSearch} - */ -public final class ResAccountSearch extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:net.sopod.soim.logic.api.friend.search.ResAccountSearch) - ResAccountSearchOrBuilder { -private static final long serialVersionUID = 0L; - // Use ResAccountSearch.newBuilder() to construct. - private ResAccountSearch(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private ResAccountSearch() { - accounts_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new ResAccountSearch(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private ResAccountSearch( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - if (!((mutable_bitField0_ & 0x00000001) != 0)) { - accounts_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000001; - } - accounts_.add( - input.readMessage(net.sopod.soim.logic.api.friend.search.AccountInfo.parser(), extensionRegistry)); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000001) != 0)) { - accounts_ = java.util.Collections.unmodifiableList(accounts_); - } - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.logic.api.friend.search.ResAccountSearch.class, net.sopod.soim.logic.api.friend.search.ResAccountSearch.Builder.class); - } - - public static final int ACCOUNTS_FIELD_NUMBER = 1; - private java.util.List accounts_; - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - @java.lang.Override - public java.util.List getAccountsList() { - return accounts_; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - @java.lang.Override - public java.util.List - getAccountsOrBuilderList() { - return accounts_; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - @java.lang.Override - public int getAccountsCount() { - return accounts_.size(); - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.AccountInfo getAccounts(int index) { - return accounts_.get(index); - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder getAccountsOrBuilder( - int index) { - return accounts_.get(index); - } - - private byte memoizedIsInitialized = -1; - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - for (int i = 0; i < accounts_.size(); i++) { - output.writeMessage(1, accounts_.get(i)); - } - unknownFields.writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - for (int i = 0; i < accounts_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(1, accounts_.get(i)); - } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof net.sopod.soim.logic.api.friend.search.ResAccountSearch)) { - return super.equals(obj); - } - net.sopod.soim.logic.api.friend.search.ResAccountSearch other = (net.sopod.soim.logic.api.friend.search.ResAccountSearch) obj; - - if (!getAccountsList() - .equals(other.getAccountsList())) return false; - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getAccountsCount() > 0) { - hash = (37 * hash) + ACCOUNTS_FIELD_NUMBER; - hash = (53 * hash) + getAccountsList().hashCode(); - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(net.sopod.soim.logic.api.friend.search.ResAccountSearch prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code net.sopod.soim.logic.api.friend.search.ResAccountSearch} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:net.sopod.soim.logic.api.friend.search.ResAccountSearch) - net.sopod.soim.logic.api.friend.search.ResAccountSearchOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_fieldAccessorTable - .ensureFieldAccessorsInitialized( - net.sopod.soim.logic.api.friend.search.ResAccountSearch.class, net.sopod.soim.logic.api.friend.search.ResAccountSearch.Builder.class); - } - - // Construct using net.sopod.soim.logic.api.friend.search.ResAccountSearch.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - getAccountsFieldBuilder(); - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - if (accountsBuilder_ == null) { - accounts_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - } else { - accountsBuilder_.clear(); - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return net.sopod.soim.logic.api.friend.search.AccountSearch.internal_static_net_sopod_soim_logic_api_friend_search_ResAccountSearch_descriptor; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ResAccountSearch getDefaultInstanceForType() { - return net.sopod.soim.logic.api.friend.search.ResAccountSearch.getDefaultInstance(); - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ResAccountSearch build() { - net.sopod.soim.logic.api.friend.search.ResAccountSearch result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ResAccountSearch buildPartial() { - net.sopod.soim.logic.api.friend.search.ResAccountSearch result = new net.sopod.soim.logic.api.friend.search.ResAccountSearch(this); - int from_bitField0_ = bitField0_; - if (accountsBuilder_ == null) { - if (((bitField0_ & 0x00000001) != 0)) { - accounts_ = java.util.Collections.unmodifiableList(accounts_); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.accounts_ = accounts_; - } else { - result.accounts_ = accountsBuilder_.build(); - } - onBuilt(); - return result; - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof net.sopod.soim.logic.api.friend.search.ResAccountSearch) { - return mergeFrom((net.sopod.soim.logic.api.friend.search.ResAccountSearch)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(net.sopod.soim.logic.api.friend.search.ResAccountSearch other) { - if (other == net.sopod.soim.logic.api.friend.search.ResAccountSearch.getDefaultInstance()) return this; - if (accountsBuilder_ == null) { - if (!other.accounts_.isEmpty()) { - if (accounts_.isEmpty()) { - accounts_ = other.accounts_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureAccountsIsMutable(); - accounts_.addAll(other.accounts_); - } - onChanged(); - } - } else { - if (!other.accounts_.isEmpty()) { - if (accountsBuilder_.isEmpty()) { - accountsBuilder_.dispose(); - accountsBuilder_ = null; - accounts_ = other.accounts_; - bitField0_ = (bitField0_ & ~0x00000001); - accountsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? - getAccountsFieldBuilder() : null; - } else { - accountsBuilder_.addAllMessages(other.accounts_); - } - } - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - net.sopod.soim.logic.api.friend.search.ResAccountSearch parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (net.sopod.soim.logic.api.friend.search.ResAccountSearch) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private java.util.List accounts_ = - java.util.Collections.emptyList(); - private void ensureAccountsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - accounts_ = new java.util.ArrayList(accounts_); - bitField0_ |= 0x00000001; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - net.sopod.soim.logic.api.friend.search.AccountInfo, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder, net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder> accountsBuilder_; - - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public java.util.List getAccountsList() { - if (accountsBuilder_ == null) { - return java.util.Collections.unmodifiableList(accounts_); - } else { - return accountsBuilder_.getMessageList(); - } - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public int getAccountsCount() { - if (accountsBuilder_ == null) { - return accounts_.size(); - } else { - return accountsBuilder_.getCount(); - } - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public net.sopod.soim.logic.api.friend.search.AccountInfo getAccounts(int index) { - if (accountsBuilder_ == null) { - return accounts_.get(index); - } else { - return accountsBuilder_.getMessage(index); - } - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder setAccounts( - int index, net.sopod.soim.logic.api.friend.search.AccountInfo value) { - if (accountsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAccountsIsMutable(); - accounts_.set(index, value); - onChanged(); - } else { - accountsBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder setAccounts( - int index, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder builderForValue) { - if (accountsBuilder_ == null) { - ensureAccountsIsMutable(); - accounts_.set(index, builderForValue.build()); - onChanged(); - } else { - accountsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder addAccounts(net.sopod.soim.logic.api.friend.search.AccountInfo value) { - if (accountsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAccountsIsMutable(); - accounts_.add(value); - onChanged(); - } else { - accountsBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder addAccounts( - int index, net.sopod.soim.logic.api.friend.search.AccountInfo value) { - if (accountsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureAccountsIsMutable(); - accounts_.add(index, value); - onChanged(); - } else { - accountsBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder addAccounts( - net.sopod.soim.logic.api.friend.search.AccountInfo.Builder builderForValue) { - if (accountsBuilder_ == null) { - ensureAccountsIsMutable(); - accounts_.add(builderForValue.build()); - onChanged(); - } else { - accountsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder addAccounts( - int index, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder builderForValue) { - if (accountsBuilder_ == null) { - ensureAccountsIsMutable(); - accounts_.add(index, builderForValue.build()); - onChanged(); - } else { - accountsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder addAllAccounts( - java.lang.Iterable values) { - if (accountsBuilder_ == null) { - ensureAccountsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, accounts_); - onChanged(); - } else { - accountsBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder clearAccounts() { - if (accountsBuilder_ == null) { - accounts_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - } else { - accountsBuilder_.clear(); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public Builder removeAccounts(int index) { - if (accountsBuilder_ == null) { - ensureAccountsIsMutable(); - accounts_.remove(index); - onChanged(); - } else { - accountsBuilder_.remove(index); - } - return this; - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public net.sopod.soim.logic.api.friend.search.AccountInfo.Builder getAccountsBuilder( - int index) { - return getAccountsFieldBuilder().getBuilder(index); - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder getAccountsOrBuilder( - int index) { - if (accountsBuilder_ == null) { - return accounts_.get(index); } else { - return accountsBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public java.util.List - getAccountsOrBuilderList() { - if (accountsBuilder_ != null) { - return accountsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(accounts_); - } - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public net.sopod.soim.logic.api.friend.search.AccountInfo.Builder addAccountsBuilder() { - return getAccountsFieldBuilder().addBuilder( - net.sopod.soim.logic.api.friend.search.AccountInfo.getDefaultInstance()); - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public net.sopod.soim.logic.api.friend.search.AccountInfo.Builder addAccountsBuilder( - int index) { - return getAccountsFieldBuilder().addBuilder( - index, net.sopod.soim.logic.api.friend.search.AccountInfo.getDefaultInstance()); - } - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - public java.util.List - getAccountsBuilderList() { - return getAccountsFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilderV3< - net.sopod.soim.logic.api.friend.search.AccountInfo, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder, net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder> - getAccountsFieldBuilder() { - if (accountsBuilder_ == null) { - accountsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< - net.sopod.soim.logic.api.friend.search.AccountInfo, net.sopod.soim.logic.api.friend.search.AccountInfo.Builder, net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder>( - accounts_, - ((bitField0_ & 0x00000001) != 0), - getParentForChildren(), - isClean()); - accounts_ = null; - } - return accountsBuilder_; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - - // @@protoc_insertion_point(builder_scope:net.sopod.soim.logic.api.friend.search.ResAccountSearch) - } - - // @@protoc_insertion_point(class_scope:net.sopod.soim.logic.api.friend.search.ResAccountSearch) - private static final net.sopod.soim.logic.api.friend.search.ResAccountSearch DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new net.sopod.soim.logic.api.friend.search.ResAccountSearch(); - } - - public static net.sopod.soim.logic.api.friend.search.ResAccountSearch getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public ResAccountSearch parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new ResAccountSearch(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public net.sopod.soim.logic.api.friend.search.ResAccountSearch getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - -} - diff --git a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ResAccountSearchOrBuilder.java b/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ResAccountSearchOrBuilder.java deleted file mode 100644 index 13709f3..0000000 --- a/im-service-api/im-logic-friend-api/src/main/java/net/sopod/soim/logic/api/friend/search/ResAccountSearchOrBuilder.java +++ /dev/null @@ -1,33 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: proto/AccountSearch.proto - -package net.sopod.soim.logic.api.friend.search; - -public interface ResAccountSearchOrBuilder extends - // @@protoc_insertion_point(interface_extends:net.sopod.soim.logic.api.friend.search.ResAccountSearch) - com.google.protobuf.MessageOrBuilder { - - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - java.util.List - getAccountsList(); - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - net.sopod.soim.logic.api.friend.search.AccountInfo getAccounts(int index); - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - int getAccountsCount(); - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - java.util.List - getAccountsOrBuilderList(); - /** - * repeated .net.sopod.soim.logic.api.friend.search.AccountInfo accounts = 1; - */ - net.sopod.soim.logic.api.friend.search.AccountInfoOrBuilder getAccountsOrBuilder( - int index); -} diff --git a/im-service-api/im-logic-friend-api/src/main/resources/proto/AccountSearch.proto b/im-service-api/im-logic-friend-api/src/main/resources/proto/AccountSearch.proto deleted file mode 100644 index d7ae2f5..0000000 --- a/im-service-api/im-logic-friend-api/src/main/resources/proto/AccountSearch.proto +++ /dev/null @@ -1,26 +0,0 @@ -syntax = "proto3"; - -option java_multiple_files = true; - -package net.sopod.soim.logic.api.friend.search; - -service AccountSearchService { - - // 关键字搜索用户 - rpc searchAccountLikely(ReqAccountSearch) returns (ResAccountSearch) {} - -} - -message ReqAccountSearch { - string keyword = 1; -} - -message ResAccountSearch { - repeated AccountInfo accounts = 1; -} - -message AccountInfo { - int64 uid = 1; - string account = 2; - string nickname = 3; -} diff --git a/im-service-api/im-logic-group-api/pom.xml b/im-service-api/im-logic-group-api/pom.xml new file mode 100644 index 0000000..d88e384 --- /dev/null +++ b/im-service-api/im-logic-group-api/pom.xml @@ -0,0 +1,22 @@ + + + + im-service-api + net.sopod + 1.0.0 + + 4.0.0 + + im-logic-group-api + + + + im-das-group-api + net.sopod + ${soim.version} + + + + \ No newline at end of file diff --git a/im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/model/dto/GroupUserInfo.java b/im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/model/dto/GroupUserInfo.java new file mode 100644 index 0000000..9217b67 --- /dev/null +++ b/im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/model/dto/GroupUserInfo.java @@ -0,0 +1,34 @@ +package net.sopod.soim.logic.api.group.model.dto; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * GroupUserInfo + * + * @author tmy + * @date 2022-06-03 21:01 + */ +@Data +@Accessors(chain = true) +public class GroupUserInfo implements Serializable { + + private static final long serialVersionUID = 6688468824170551058L; + + private Long uid; + + private String account; + + private String nickname; + + private Boolean online; + + // 最后活跃时间 + private Long lastActive; + + // 加群时间 + // private Long joinTime; + +} diff --git a/im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/service/ImGroupService.java b/im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/service/ImGroupService.java new file mode 100644 index 0000000..f6193fd --- /dev/null +++ b/im-service-api/im-logic-group-api/src/main/java/net/sopod/soim/logic/api/group/service/ImGroupService.java @@ -0,0 +1,24 @@ +package net.sopod.soim.logic.api.group.service; + +import net.sopod.soim.das.group.api.model.entity.ImGroup; +import net.sopod.soim.logic.api.group.model.dto.GroupUserInfo; + +import java.util.List; + +/** + * ImGroupService + * + * @author tmy + * @date 2022-06-03 20:54 + */ +public interface ImGroupService { + + Long createGroup(Long uid, String groupName); + + List searchGroup(String groupNameLike); + + Long joinGroup(Long groupId, Long uid); + + List listGroupUsers(Long groupId); + +} diff --git a/im-service-api/im-logic-message-api/pom.xml b/im-service-api/im-logic-message-api/pom.xml new file mode 100644 index 0000000..7249be7 --- /dev/null +++ b/im-service-api/im-logic-message-api/pom.xml @@ -0,0 +1,15 @@ + + + + im-service-api + net.sopod + 1.0.0 + + 4.0.0 + + im-logic-message-api + + + \ No newline at end of file diff --git a/im-service-api/im-logic-message-api/src/main/java/net/sopod/soim/logic/api/message/mode/GroupMessage.java b/im-service-api/im-logic-message-api/src/main/java/net/sopod/soim/logic/api/message/mode/GroupMessage.java new file mode 100644 index 0000000..4b16446 --- /dev/null +++ b/im-service-api/im-logic-message-api/src/main/java/net/sopod/soim/logic/api/message/mode/GroupMessage.java @@ -0,0 +1,26 @@ +package net.sopod.soim.logic.api.message.mode; + +import lombok.Data; + +import java.io.Serializable; + +/** + * GroupMessage + * + * @author tmy + * @date 2022-06-05 11:10 + */ +@Data +public class GroupMessage implements Serializable { + + private static final long serialVersionUID = 237146829521854337L; + + private Long sender; + + private Long gid; + + private String message; + + private Long time; + +} diff --git a/im-service-api/im-logic-message-api/src/main/java/net/sopod/soim/logic/api/message/service/ImGroupChatService.java b/im-service-api/im-logic-message-api/src/main/java/net/sopod/soim/logic/api/message/service/ImGroupChatService.java new file mode 100644 index 0000000..4904a34 --- /dev/null +++ b/im-service-api/im-logic-message-api/src/main/java/net/sopod/soim/logic/api/message/service/ImGroupChatService.java @@ -0,0 +1,17 @@ +package net.sopod.soim.logic.api.message.service; + +import net.sopod.soim.logic.api.message.mode.GroupMessage; + +import java.util.concurrent.CompletableFuture; + +/** + * ImGroupChatService + * + * @author tmy + * @date 2022-06-05 11:09 + */ +public interface ImGroupChatService { + + CompletableFuture groupMessage(GroupMessage groupMessage); + +} diff --git a/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/MessageRouteService.java b/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/MessageRouteService.java new file mode 100644 index 0000000..f5f71ca --- /dev/null +++ b/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/MessageRouteService.java @@ -0,0 +1,15 @@ +package net.sopod.soim.router.api.service; + +import java.util.List; + +/** + * MessageRouteService + * + * @author tmy + * @date 2022-06-05 11:28 + */ +public interface MessageRouteService { + + List routeGroupMessage(List uids, String message); + +} diff --git a/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/UserRouteService.java b/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/UserRouteService.java index da7a93d..546d6cd 100644 --- a/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/UserRouteService.java +++ b/im-service-api/im-router-api/src/main/java/net/sopod/soim/router/api/service/UserRouteService.java @@ -26,10 +26,10 @@ public interface UserRouteService { List onlineUserList(String keyword); /** - * @param friendId 好友关系id + * @param relationId 好友关系id * @param textChat 聊天内容 */ - Boolean routeTextChat(Long friendId, TextChat textChat); + Boolean routeTextChat(Long relationId, TextChat textChat); List isOnlineUsers(List userIds); diff --git a/im-service-api/pom.xml b/im-service-api/pom.xml index 6b5f927..10f7fc8 100644 --- a/im-service-api/pom.xml +++ b/im-service-api/pom.xml @@ -19,7 +19,8 @@ im-segment-id-api im-router-api im-logic-user-api - im-logic-friend-api + im-logic-group-api + im-logic-message-api diff --git a/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java b/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java deleted file mode 100644 index d749f03..0000000 --- a/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.sopod.soim.logic.friend.service; - -import net.sopod.soim.das.user.api.model.entity.ImUser; -import net.sopod.soim.das.user.api.service.UserDas; -import net.sopod.soim.logic.api.friend.search.AccountInfo; -import net.sopod.soim.logic.api.friend.search.AccountSearchService; -import net.sopod.soim.logic.api.friend.search.ReqAccountSearch; -import net.sopod.soim.logic.api.friend.search.ResAccountSearch; -import org.apache.dubbo.config.annotation.DubboReference; -import org.apache.dubbo.config.annotation.DubboService; - -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; - -/** - * UserSearchServiceImpl - * - * @author tmy - * @date 2022-05-15 22:43 - */ -@DubboService -public class UserSearchServiceImpl implements AccountSearchService { - - @DubboReference - private UserDas userDas; - - @Override - public ResAccountSearch searchAccountLikely(ReqAccountSearch request) { - // 查询用户账户列表 - List imUsers = userDas.searchImUser(request.getKeyword(), 10); - List userInfos = imUsers.stream().map( - imUser -> AccountInfo.newBuilder(). - setAccount(imUser.getAccount()) - .setNickname(imUser.getNickname()) - .setUid(imUser.getId()).build() - ).collect(Collectors.toList()); - - return ResAccountSearch.newBuilder() - .addAllAccounts(userInfos) - .build(); - } - - @Override - public CompletableFuture searchAccountLikelyAsync(ReqAccountSearch request) { - return CompletableFuture.completedFuture(searchAccountLikely(request)); - } - -} diff --git a/im-service/im-logic-friend/pom.xml b/im-service/im-logic-group/pom.xml similarity index 85% rename from im-service/im-logic-friend/pom.xml rename to im-service/im-logic-group/pom.xml index be551f6..d9b633f 100644 --- a/im-service/im-logic-friend/pom.xml +++ b/im-service/im-logic-group/pom.xml @@ -9,12 +9,17 @@ 4.0.0 - im-logic-friend + im-logic-group net.sopod - im-logic-friend-api + im-logic-group-api + ${soim.version} + + + net.sopod + im-das-group-api ${soim.version} @@ -22,6 +27,11 @@ im-das-user-api ${soim.version} + + net.sopod + im-segment-id-api + ${soim.version} + net.sopod im-router-api diff --git a/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/FriendApplication.java b/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/LogicGroupApplication.java similarity index 53% rename from im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/FriendApplication.java rename to im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/LogicGroupApplication.java index a0ac38c..c48fef0 100644 --- a/im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/FriendApplication.java +++ b/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/LogicGroupApplication.java @@ -1,21 +1,21 @@ -package net.sopod.soim.logic.friend; +package net.sopod.soim.logic.group; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** - * FriendApplication + * LogicGroupApplication * * @author tmy - * @date 2022-05-15 22:22 + * @date 2022-06-03 21:04 */ -@EnableDubbo(scanBasePackages = {"net.sopod.soim.logic.friend.service"}) @SpringBootApplication -public class FriendApplication { +@EnableDubbo(scanBasePackages = "net.sopod.soim.logic.group.service") +public class LogicGroupApplication { public static void main(String[] args) { - SpringApplication.run(FriendApplication.class, args); + SpringApplication.run(LogicGroupApplication.class); } } diff --git a/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/config/GroupConfig.java b/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/config/GroupConfig.java new file mode 100644 index 0000000..6def5c7 --- /dev/null +++ b/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/config/GroupConfig.java @@ -0,0 +1,16 @@ +package net.sopod.soim.logic.group.config; + +import lombok.Data; + +/** + * GroupConfig + * + * @author tmy + * @date 2022-06-05 10:17 + */ +@Data +public class GroupConfig { + + private Integer defaultGroupLimit = 100; + +} diff --git a/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/service/ImGroupServiceImpl.java b/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/service/ImGroupServiceImpl.java new file mode 100644 index 0000000..4fd7542 --- /dev/null +++ b/im-service/im-logic-group/src/main/java/net/sopod/soim/logic/group/service/ImGroupServiceImpl.java @@ -0,0 +1,130 @@ +package net.sopod.soim.logic.group.service; + +import net.sopod.soim.common.dubbo.exception.LogicException; +import net.sopod.soim.common.util.Collects; +import net.sopod.soim.common.util.StringUtil; +import net.sopod.soim.das.group.api.model.dto.GroupUser_0; +import net.sopod.soim.das.group.api.model.entity.ImGroup; +import net.sopod.soim.das.group.api.service.DasGroupService; +import net.sopod.soim.das.group.api.service.DasGroupUserService; +import net.sopod.soim.das.user.api.model.entity.ImUser; +import net.sopod.soim.das.user.api.service.UserDas; +import net.sopod.soim.logic.api.group.model.dto.GroupUserInfo; +import net.sopod.soim.logic.api.group.service.ImGroupService; +import net.sopod.soim.logic.common.util.RpcContextUtil; +import net.sopod.soim.router.api.route.UidConsistentHashSelector; +import net.sopod.soim.router.api.service.UserRouteService; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * ImGroupService + * + * @author tmy + * @date 2022-06-03 21:06 + */ +@DubboService +public class ImGroupServiceImpl implements ImGroupService { + + @DubboReference + private DasGroupService dasGroupService; + + @DubboReference + private DasGroupUserService dasGroupUserService; + + @DubboReference + private UserDas userDas; + + @DubboReference + private UserRouteService userRouteService; + + @Override + public Long createGroup(Long uid, String groupName) { + Boolean notExists = dasGroupService.isGroupNameNotExists(groupName); + if (!Boolean.TRUE.equals(notExists)) { + throw new LogicException("群名称已存在"); + } + ImGroup imGroup = new ImGroup() + .setGroupName(groupName) + .setMasterUid(uid) + .setUserLimit(0); + return dasGroupService.saveGroup(imGroup); + } + + @Override + public List searchGroup(String groupNameLike) { + return dasGroupService.listGroup(groupNameLike); + } + + @Override + public Long joinGroup(Long groupId, Long uid) { + Boolean isJoined = dasGroupUserService.isJoined(groupId, uid); + if (isJoined) { + throw new LogicException("你已加入该群聊"); + } + return dasGroupUserService.insert(groupId, uid); + } + + @Override + public List listGroupUsers(Long groupId) { + List groupUsers = dasGroupUserService.listGroupUsers(groupId); + Map groupUserMap = Collects.collect2Map( + groupUsers, + GroupUser_0::getUid, + new HashMap<>(Collects.mapCapacity(groupUsers.size())) + ); + + List userIds = groupUsers.stream() + .map(GroupUser_0::getUid) + .collect(Collectors.toList()); + // 查询用户信息 + List imUsers = userDas.listUsers(userIds); + // 分组到 im-router 查询在线状态 + UidConsistentHashSelector selector = UidConsistentHashSelector.getCurrent(); + // 单实例 im-router,TODO 规则整合到负载均衡 + if (selector == null) { + List onlineUsers = userRouteService.isOnlineUsers(userIds); + this.mappingOnlineState(userIds, onlineUsers, groupUserMap); + } else { + // 将一致性hash路由到不同router的uid放到不同集合 + Map> userRouteGroup = + Collects.group(userIds, uid -> selector.select(StringUtil.toString(uid)), uid -> uid); + for (List routeUidGroup : userRouteGroup.values()) { + RpcContextUtil.setContextUid(routeUidGroup.get(0)); + // 调用在线状态查询接口,按返回 list 索引更新在线状态 + List onlineUsers = userRouteService.isOnlineUsers(routeUidGroup); + this.mappingOnlineState(routeUidGroup, onlineUsers, groupUserMap); + } + } + return imUsers.stream().map(u -> { + GroupUser_0 groupUser = groupUserMap.get(u.getId()); + return new GroupUserInfo() + .setUid(u.getId()) + .setAccount(u.getAccount()) + .setNickname(u.getNickname()) + .setOnline(Boolean.TRUE.equals(groupUser.getIsOnline())) + .setLastActive(groupUser.getLastActive()); + } + ).collect(Collectors.toList()); + } + + /** + * 整合在线状态结果 + */ + private void mappingOnlineState(List userIds, + List userOnlines, + Map groupUserMap) { + for (int i = 0; i < userIds.size(); i++) { + GroupUser_0 groupUser = groupUserMap.get(userIds.get(i)); + if (groupUser != null) { + groupUser.setIsOnline(Boolean.TRUE.equals(userOnlines.get(i))); + } + } + } + +} diff --git a/im-service/im-logic-friend/src/main/resources/application.yml b/im-service/im-logic-group/src/main/resources/application.yml similarity index 73% rename from im-service/im-logic-friend/src/main/resources/application.yml rename to im-service/im-logic-group/src/main/resources/application.yml index 4484a25..6482cd6 100644 --- a/im-service/im-logic-friend/src/main/resources/application.yml +++ b/im-service/im-logic-group/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: application: - name: im-logic-friend + name: im-logic-group dubbo: application: @@ -9,11 +9,10 @@ dubbo: address: nacos://124.222.131.236:3848 group: so-im protocol: - name: dubbo - serialization: protobuf - port: 3014 + port: 3006 consumer: check: false provider: retries: 0 timeout: 2000 + filter: soimExceptionFilter,-exception \ No newline at end of file diff --git a/im-service/im-logic-message/pom.xml b/im-service/im-logic-message/pom.xml new file mode 100644 index 0000000..dbd8323 --- /dev/null +++ b/im-service/im-logic-message/pom.xml @@ -0,0 +1,91 @@ + + + + im-service + net.sopod + 1.0.0 + + 4.0.0 + + im-logic-message + + + + net.sopod + im-common + ${soim.version} + + + net.sopod + im-logic-message-api + ${soim.version} + + + net.sopod + im-das-group-api + ${soim.version} + + + net.sopod + im-segment-id-api + ${soim.version} + + + net.sopod + im-das-message-api + ${soim.version} + + + net.sopod + im-router-api + ${soim.version} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + + + + org.apache.dubbo + dubbo-spring-boot-starter + + + org.apache.dubbo + dubbo-registry-nacos + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + \ No newline at end of file diff --git a/im-service/im-logic-message/src/main/java/net/sopod/soim/logic/message/LogicMessageApplication.java b/im-service/im-logic-message/src/main/java/net/sopod/soim/logic/message/LogicMessageApplication.java new file mode 100644 index 0000000..bf8a5b1 --- /dev/null +++ b/im-service/im-logic-message/src/main/java/net/sopod/soim/logic/message/LogicMessageApplication.java @@ -0,0 +1,21 @@ +package net.sopod.soim.logic.message; + +import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * LogicMessageApplication + * + * @author tmy + * @date 2022-06-05 11:12 + */ +@SpringBootApplication +@EnableDubbo(scanBasePackages = "net.sopod.soim.logic.message.service") +public class LogicMessageApplication { + + public static void main(String[] args) { + SpringApplication.run(LogicMessageApplication.class); + } + +} diff --git a/im-service/im-logic-message/src/main/java/net/sopod/soim/logic/message/service/ImGroupChatServiceImpl.java b/im-service/im-logic-message/src/main/java/net/sopod/soim/logic/message/service/ImGroupChatServiceImpl.java new file mode 100644 index 0000000..c7408a4 --- /dev/null +++ b/im-service/im-logic-message/src/main/java/net/sopod/soim/logic/message/service/ImGroupChatServiceImpl.java @@ -0,0 +1,64 @@ +package net.sopod.soim.logic.message.service; + +import net.sopod.soim.common.util.ImClock; +import net.sopod.soim.das.common.config.LogicTables; +import net.sopod.soim.das.group.api.model.dto.GroupUser_0; +import net.sopod.soim.das.group.api.service.DasGroupUserService; +import net.sopod.soim.das.message.api.entity.ImGroupMessage; +import net.sopod.soim.das.message.api.service.DasMQMessagePersistentService; +import net.sopod.soim.logic.api.message.mode.GroupMessage; +import net.sopod.soim.logic.api.message.service.ImGroupChatService; +import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; +import net.sopod.soim.router.api.route.UidConsistentHashSelector; +import org.apache.dubbo.config.annotation.DubboReference; +import org.apache.dubbo.config.annotation.DubboService; + +import javax.annotation.Resource; +import java.util.List; +import java.util.concurrent.CompletableFuture; + +/** + * ImGroupChatServiceImpl + * + * @author tmy + * @date 2022-06-05 11:14 + */ +@DubboService +public class ImGroupChatServiceImpl implements ImGroupChatService { + + @Resource + private DasMQMessagePersistentService dasMQMessagePersistentService; + + @Resource + private SegmentIdGenerator segmentIdGenerator; + + @DubboReference + private DasGroupUserService dasGroupUserService; + + /** + * 序列化群消息 + * 查询群成员列表 + * 分批路由消息 + * 未在线用户记录消息偏移量到das + */ + @Override + public CompletableFuture groupMessage(GroupMessage msg) { + long gMsgId = segmentIdGenerator.nextId(LogicTables.IM_GROUP_MESSAGE); + // 序列化群消息 + ImGroupMessage imGroupMessage = new ImGroupMessage() + .setId(gMsgId) + .setGroupId(msg.getGid()) + .setSender(msg.getSender()) + .setContent(msg.getMessage()) + .setCreateTime(ImClock.date()); + dasMQMessagePersistentService.saveImGroupMessage(imGroupMessage); + // 查询群成员列表 + List groupUsers = dasGroupUserService.listGroupUsers(msg.getGid()); + // 分批路由消息 + UidConsistentHashSelector uidSelector = UidConsistentHashSelector.getCurrent(); + + + return null; + } + +} diff --git a/im-service/im-logic-message/src/main/resources/application.yml b/im-service/im-logic-message/src/main/resources/application.yml new file mode 100644 index 0000000..3bb3fec --- /dev/null +++ b/im-service/im-logic-message/src/main/resources/application.yml @@ -0,0 +1,18 @@ +spring: + application: + name: im-logic-message + +dubbo: + application: + name: ${spring.application.name} + registry: + address: nacos://124.222.131.236:3848 + group: so-im + protocol: + port: 3007 + consumer: + check: false + provider: + retries: 0 + timeout: 2000 + filter: soimExceptionFilter,-exception \ No newline at end of file diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/ChatServiceImpl.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/ChatServiceImpl.java index c492b1a..29eb87a 100644 --- a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/ChatServiceImpl.java +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/ChatServiceImpl.java @@ -1,8 +1,6 @@ package net.sopod.soim.logic.user.service; import net.sopod.soim.common.dubbo.exception.LogicException; -import net.sopod.soim.common.dubbo.exception.ServiceException; -import net.sopod.soim.common.dubbo.exception.SoimException; import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.service.FriendDas; import net.sopod.soim.das.user.api.service.UserDas; @@ -49,14 +47,14 @@ public class ChatServiceImpl implements ChatService { textChat.setReceiverUid(receiverUser.getId()); } // 查询好友关系 - Long friendId = friendDas.getFriendId(textChat.getUid(), textChat.getReceiverUid()); + Long relationId = friendDas.getRelationId(textChat.getUid(), textChat.getReceiverUid()); // 不是好友 - if (friendId == null) { + if (relationId == null) { throw new LogicException("请添加好友后发送消息"); } // 设置调用 router 为消息接受者地址 RpcContextUtil.setContextUid(textChat.getReceiverUid()); - return userRouteService.routeTextChat(friendId, textChat); + return userRouteService.routeTextChat(relationId, textChat); } } diff --git a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/FriendServiceImpl.java b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/FriendServiceImpl.java index 23da225..41d4891 100644 --- a/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/FriendServiceImpl.java +++ b/im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/FriendServiceImpl.java @@ -2,9 +2,11 @@ package net.sopod.soim.logic.user.service; import net.sopod.soim.common.util.Collects; import net.sopod.soim.common.util.StringUtil; +import net.sopod.soim.das.common.config.LogicTables; import net.sopod.soim.das.user.api.model.entity.ImUser; import net.sopod.soim.das.user.api.service.FriendDas; import net.sopod.soim.das.user.api.service.UserDas; +import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator; import net.sopod.soim.logic.api.user.service.FriendService; import net.sopod.soim.logic.common.model.UserInfo; import net.sopod.soim.logic.common.util.RpcContextUtil; @@ -13,6 +15,7 @@ import net.sopod.soim.router.api.service.UserRouteService; import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboService; +import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -37,13 +40,15 @@ public class FriendServiceImpl implements FriendService { @DubboReference private UserRouteService userRouteService; + @Resource + private SegmentIdGenerator segmentIdGenerator; + /** * TODO 幂等性处理 */ @Override public CompletableFuture addFriend(Long uid, Long fid) { ImUser friend = userDas.getUserById(fid); - CompletableFuture future = new CompletableFuture<>(); if (friend == null) { return CompletableFuture.completedFuture("不存在的账号"); } @@ -51,18 +56,14 @@ public class FriendServiceImpl implements FriendService { return CompletableFuture.completedFuture("该用户已是你的好友"); } // 添加好友数据 - friendDas.insert(uid, fid); - // 相互添加为好友 - if (Boolean.FALSE.equals(friendDas.isExists(fid, uid))) { - friendDas.insert(fid, uid); - } + friendDas.saveFriendRelation(uid, fid); return CompletableFuture.completedFuture(null); } @Override public CompletableFuture> listFriend(Long uid) { List imUsers = friendDas.queryAllFriend(uid); - // TODO 分组到 im-router 查询在线状态 + // 分组到 im-router 查询在线状态 UidConsistentHashSelector selector = UidConsistentHashSelector.getCurrent(); List userInfos = new ArrayList<>(imUsers.size()); if (selector == null) { diff --git a/im-service/im-router/pom.xml b/im-service/im-router/pom.xml index 3d1907c..42f76aa 100644 --- a/im-service/im-router/pom.xml +++ b/im-service/im-router/pom.xml @@ -32,6 +32,11 @@ im-das-user-api ${soim.version} + + net.sopod + im-das-message-api + ${soim.version} + org.springframework.boot spring-boot-starter @@ -97,6 +102,10 @@ org.springframework.boot spring-boot-starter-amqp + + org.mybatis + mybatis + \ No newline at end of file diff --git a/im-service/im-router/src/main/java/net/sopod/soim/router/service/MessageRouteServiceImpl.java b/im-service/im-router/src/main/java/net/sopod/soim/router/service/MessageRouteServiceImpl.java new file mode 100644 index 0000000..d6db1f0 --- /dev/null +++ b/im-service/im-router/src/main/java/net/sopod/soim/router/service/MessageRouteServiceImpl.java @@ -0,0 +1,30 @@ +package net.sopod.soim.router.service; + +import net.sopod.soim.router.api.service.MessageRouteService; +import net.sopod.soim.router.cache.RouterUser; +import net.sopod.soim.router.cache.RouterUserStorage; +import org.apache.dubbo.config.annotation.DubboService; + +import java.util.List; + +/** + * MessageRouterServiceImpl + * + * @author tmy + * @date 2022-06-05 11:30 + */ +@DubboService +public class MessageRouteServiceImpl implements MessageRouteService { + + @Override + public List routeGroupMessage(List uids, String message) { + // TODO + RouterUserStorage storage = RouterUserStorage.getInstance(); + for (Long uid : uids) { + RouterUser routerUser = storage.get(uid); + + } + return null; + } + +} diff --git a/im-service/im-router/src/main/java/net/sopod/soim/router/service/UserRouteServiceImpl.java b/im-service/im-router/src/main/java/net/sopod/soim/router/service/UserRouteServiceImpl.java index a776a9b..25f7f69 100644 --- a/im-service/im-router/src/main/java/net/sopod/soim/router/service/UserRouteServiceImpl.java +++ b/im-service/im-router/src/main/java/net/sopod/soim/router/service/UserRouteServiceImpl.java @@ -3,10 +3,10 @@ package net.sopod.soim.router.service; import net.sopod.soim.common.constant.DubboConstant; import net.sopod.soim.common.util.ImClock; import net.sopod.soim.common.util.StringUtil; -import net.sopod.soim.das.user.api.config.LogicTables; -import net.sopod.soim.das.user.api.model.entity.ImMessage; +import net.sopod.soim.das.common.config.LogicTables; +import net.sopod.soim.das.message.api.entity.ImMessage; import net.sopod.soim.das.user.api.model.entity.ImUser; -import net.sopod.soim.das.user.api.service.DasMQPersistentService; +import net.sopod.soim.das.message.api.service.DasMQMessagePersistentService; import net.sopod.soim.das.user.api.service.FriendDas; import net.sopod.soim.das.user.api.service.UserDas; import net.sopod.soim.entry.api.service.OnlineUserService; @@ -59,7 +59,7 @@ public class UserRouteServiceImpl implements UserRouteService { private SegmentIdGenerator segmentIdGenerator; @Resource - private DasMQPersistentService dasMQPersistentService; + private DasMQMessagePersistentService dasMQMessagePersistentService; @Override public RegistryRes registryUserEntry(Long uid, String imEntryAddr) { @@ -95,16 +95,16 @@ public class UserRouteServiceImpl implements UserRouteService { * 调用该方法时,将到 im-router 服务的路由 uid 设置为消息接受者的 uid */ @Override - public Boolean routeTextChat(Long friendId, TextChat textChat) { + public Boolean routeTextChat(Long relationId, TextChat textChat) { // 通过消息队列持久化存储到db ImMessage imMessage = new ImMessage() - .setFriendId(friendId) + .setRelationId(relationId) .setId(segmentIdGenerator.nextId(LogicTables.IM_MESSAGE)) .setContent(textChat.getMessage()) .setSender(textChat.getUid()) .setReceiver(textChat.getReceiverUid()) .setCreateTime(ImClock.date()); - dasMQPersistentService.saveImMessage(imMessage); + dasMQMessagePersistentService.saveImMessage(imMessage); RpcContextUtil.setContextUid(textChat.getReceiverUid()); Boolean send = textChatService.sendTextChat(textChat); diff --git a/im-service/pom.xml b/im-service/pom.xml index e39e680..d48b422 100644 --- a/im-service/pom.xml +++ b/im-service/pom.xml @@ -15,7 +15,8 @@ im-segment-id im-router im-logic-user - im-logic-friend + im-logic-group + im-logic-message diff --git a/pom.xml b/pom.xml index 8ee1d2b..60bacf9 100644 --- a/pom.xml +++ b/pom.xml @@ -215,7 +215,12 @@ com.baomidou mybatis-plus-boot-starter - 3.5.0 + 3.5.1 + + + org.mybatis + mybatis + 3.5.9 org.springframework.boot