diff --git a/lib/main/lockMian/lockMain/lockMain_page.dart b/lib/main/lockMian/lockMain/lockMain_page.dart index babe6e59..a6697b2d 100755 --- a/lib/main/lockMian/lockMain/lockMain_page.dart +++ b/lib/main/lockMian/lockMain/lockMain_page.dart @@ -10,6 +10,7 @@ import 'package:star_lock/blue/blue_manage.dart'; import 'package:star_lock/main/lockMian/lockList/lockList_xhj_page.dart'; import 'package:star_lock/main/lockMian/lockMain/lockMain_state.dart'; import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; +import 'package:star_lock/talk/startChart/proto/test.pb.dart'; import 'package:star_lock/talk/startChart/start_chart_manage.dart'; import 'package:star_lock/tools/noData.dart'; import 'package:star_lock/tools/submitBtn.dart'; @@ -107,13 +108,6 @@ class _StarLockMainPageState extends State ), onPressed: () { Scaffold.of(context).openDrawer(); - final writeToBuffer = TalkReq( - callerName: 'T9A_d9904c8c47c8', - callerType: TalkReq_CallerTypeE.Lock) - .writeToBuffer(); - final talkReq = TalkReq.fromBuffer(writeToBuffer); - - print('$talkReq\nwriteToBuffer:$writeToBuffer'); }, )), backgroundColor: AppColors.mainColor, @@ -230,21 +224,24 @@ class _StarLockMainPageState extends State height: 160.h, ), // _buildImage(), - SubmitBtn( - btnName: '发送回声测试'.tr, - onClick: () async { - String assetPath = 'assets/test.jpg'; // 替换为你的图片路径 - List imageBytes = await loadAssetImageAsBytes(assetPath); - // String testStr = - // '---天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰余成岁律吕调阳云腾致雨露结为霜金生丽水玉出昆冈剑号巨阙珠称夜光果珍李柰菜重芥姜海咸河淡鳞潜羽翔龙师火帝鸟官人皇始制文字乃服衣裳推位让国有虞陶唐吊民伐罪周发殷汤坐朝问道垂拱平章爱育黎首臣伏戎羌遐迩体率宾归王鳴鳳翔兮神靈應和炫耀光芒照灼穹蒼迤邐岷峨嶢峻崢巍懿承緒劬勞育秩延佚賡孳蕃鑑識祗崇乾坤纘宵旰卿芮詒朔皎琲犂檄圮黯馭燎竈硎洮蠟胝攢囤嶇葺錡堯羲冕箕翬騏闡燮鸞蓊枘橐榘稟泗沂涖浹涔浣淇漱瀋潢瀾沚澮澆潦瀦瀌瀹灧炅焯燠燋爨熠焜煆烜燴炻熛燧牝牯犛犴牖牒疰疴痀癜痱癃皞皎盂盰盱盻眚眵瞋瞑瞷矙矧矬矰矞砟砉砥砣硇磑磲硤硭礌礞礡祀祚祜祧祼祺禋禡秭秣稃稞稹稷穈穄窀窆窠窸笄筇筌筅筮箦篑篯簟籀籝糅糗紵紽紾綃綈綬綣緜縞縰縻縴繢繇繙罟罾羝羶羸羼翊翕翥翡翳翽耖耜耠耱耦耧耩耨耬耵耶胂胼胬脘腽膦臢臬臾舂舄舡舸艋艏艟艤艚艨艪艭艴芏芊苣苴苕茌茱荄荃莛莪莶菰萁菸菽萸葶蒯蓍蓐蓬蓼蔌蔪蕈蕖蕙蕺蕻薷藦藨藭蘅蘧蘼虍虔虬虮虰虺虻蚨蚋蚱蛏蛘蜊蜍蜉蜣蜥蜩蜴蜱蜮蜾蝣蝤蝥螓螯螨蟒蟑蟛蠊蠋蠛蠡蠹衄衒衢衾袢袷裎裥裨裾褊褙褚褡褰褶襁襦襻觇觋觖觫觿訇訑訾詑詈詟詹誊誨誥誦誨諉諛謏謦譊譖譟譬譯譴讴讵讷诐诪诮诰诳诶谂谄谌谏谑谟谡谥谧谮谯谳谵豇豉豕豚豳豸貂貊貔賑賚賡贐赍赑赗赪赭赳趑趔趱趿跂跏跎跖跗跣跹跽踆踔踝踟踬踮踯蹀蹅蹇蹉蹐蹙蹦蹩躅躐躔躜躞軎軑軔軛軫軬軺輀輅輇輈輐輗輢輦輭輶轋轘轜辀辂辒辚辩迓迕迤迨迮逄逋逑逖逯遄遘遑遴遽邂邈邋邙邡邴邳邶郅郇郛郡郾鄌鄑鄘鄜鄞鄢鄣鄯鄹酃酆酈酖酗酘酢酤酴酹酽酾酾醅醊醑醚醢醪醭醮醯醵醴醶釃釅釐釜釡釴釸釾鉅鈦鈍鈹鈾鈿鉦鉬鉮鉻鉿銎銋銖銩銫銮銲鋈鋋鋌鋮鋯鋹鋻錎錡錣錤鍉鍐鍬鍱鍾鎏鎑鎒鎰鎵鎸鎿鏊鏖鏞鏟鏸鏹鏺鏽鐃鐋鐔鐛鐠鐣鐦鐭鐮鐯鐳鐴鐵鐼鐿鑌鑒鑔鑕鑞鑢鑬鑰鑱鑲鑴鑽鑾鑿钁钆钇钋钍钏钔钗钜钯钴钷钹钺钼钽钿铄铈铊铍铐铖铗铘铙铚铠铨铪铬铮铰铹铼铿锃锆锊锍锎锏锒锓锔锖锗锘锞锟锢锩锫锬锭锯锴锶锷锸锺锼锾镂镄镅镆镉镎镏镒镔镖镙镛镞镡镢镤镩镪镫镬镭镮镯镰镱镲镳镴镶镸长門閃閔閘閡闅闈闑闒闓闔闛闞闠闤闥闦闬闿阂阃阄阆阇阘阛阝队阡阯阱阪阽陀陂陉陔陘陞陟陧陬陲陴陶隃隋隍隒隓隗隦隰隱隳隵隶隽隿雎雋雐雚雝雟雤雩雯雱雿霈霅霌霎霏霗霙霛霝霡霣霤霧靂靅靆靉靎靏靐靕靗靛靡靺靻靽鞀鞉鞎鞑鞔鞖鞚鞝鞡鞤鞧鞨鞫鞬鞮鞯鞳鞴韁韃韈韉韋韐韒韓韗韙韝韟韢韡韣韦韧韨韩韪韫韬韭韮韯韲音頍頏頔頖頞頟頤頦頬頰頲頴頵頹頽頿顃顅顈顊顋顒顕顗顛顝顟顤顪顫顬顮顰顱顲顳顴页顶顷顸颃预颋颌颎颏颐频颓颔颕颙颖颛颟颡颢颣颤颥颦颧風颮颯颰颱颳颶颷颸颹颻颼颾飁飆飇飉飋飏飐飔飗飘飙飚飛飜飝飛飜飝飛飜飝飛飜飝雊霺霿靁靟鞲韞韭頫顴颿飌飡馺駃騑騜髐鬃鰩鳯鷊黴在古老的东方有一座美丽的城市名为锦绣锦绣城四季如春风景秀丽是人们心中的理想之地城中有一条清澈见底的小河河水潺潺流过滋养着两岸的花草树木河边有一座古老的石桥桥上雕刻着精美的图案见证了无数过往行人锦绣城的居民勤劳善良他们日出而作日落而息过着简单而幸福的生活城中有一位智者名叫慧心慧心先生博学多才深受人们的尊敬他常常在河边的亭子里给孩子们讲述历史故事传授知识和智慧孩子们围坐在他身边听得津津有味仿佛置身于一个个奇妙的世界在锦绣城的北边有一片茂密的森林森林里生活着各种各样的动物有活泼可爱的猴子它们在树上跳跃嬉戏有威武雄壮的老虎它们在林间巡视守护着森林的安宁还有许多不知名的鸟儿它们在枝头欢快地歌唱为森林增添了无限生机一天慧心先生带着几个学生走进森林进行一次生动的自然课他们观察着各种植物的生长了解它们的特性聆听鸟儿的鸣叫感受大自然的和谐学生们兴奋不已他们发现大自然是一个神奇的宝库蕴藏着无尽的奥秘在森林的深处有一片神秘的湖泊湖水碧绿如玉清澈见底传说中湖中住着一位美丽的水仙子她用神奇的力量保护着湖泊和周围的生灵慧心先生告诉学生们要爱护大自然与万物和谐共处才能得到大自然的馈赠锦绣城的居民们深知这一点他们珍惜每一滴水每一寸土地努力保护着这片美丽的家园他们相信只要人与自然和谐相处锦绣城将永远充满生机与活力锦绣城外群山环绕山间云雾缭绕宛如仙境山中有一处幽静的山谷谷中开满了五颜六色的花朵香气扑鼻引得蝴蝶翩翩起舞山谷中还有一条蜿蜒的小径两旁长满了奇花异草仿佛是一条通往神秘世界的通道慧心先生的学生们在一次探险中偶然发现了这个山谷他们惊叹于大自然的鬼斧神工纷纷拿出画笔将这美丽的景色描绘下来他们还发现了一种奇特的植物它的叶子呈现出透明的蓝色在阳光下闪闪发光仿佛蕴含着神秘的力量慧心先生告诉他们这种植物名为“梦幻草”只生长在特定的环境中非常稀有在锦绣城的东边有一片广阔的草原草原上绿草如茵牛羊成群草原上还有一座古老的风车风车的叶片随风旋转发出“吱呀吱呀”的声响仿佛在诉说着岁月的故事草原上的人们以放牧为生他们骑着骏马驰骋在广阔的天地间享受着自由自在的生活一天慧心先生带领学生们来到草原给他们上了一堂生动的地理课他指着远处的山脉告诉学生们山脉的形成过程以及它们对气候和生态环境的影响学生们听得入迷仿佛置身于大自然的怀抱中感受到了大自然的壮丽与神奇在锦绣城的南边有一片茂密的竹林竹林里竹子挺拔绿意盎然竹林中有一条清澈的小溪溪水潺潺流淌溪边长满了青苔竹林里还有一座精致的小亭子亭子的柱子上刻着优美的诗句让人感受到一种宁静与雅致慧心先生常常在竹林中的小亭子里静坐思考人生的哲理他告诉学生们竹子虽然柔弱但却有着坚韧不拔的精神无论遇到多大的困难都能顽强地生长学生们深受启发明白了在人生的道路上要像竹子一样勇敢地面对挑战坚持不懈地追求自己的理想锦绣城的居民们还擅长制作各种手工艺品他们的作品精美绝伦远近闻名有巧夺天工的陶瓷色彩斑斓形态各异有细腻精致的刺绣图案生动栩栩如生还有雕刻精美的木雕栩栩如生令人叹为观止这些手工艺品不仅展现了锦绣城居民的智慧和技艺也成为了他们与外界交流的纽带在锦绣城的中心有一座宏伟的宫殿宫殿的建筑风格独特气势恢宏宫殿的屋顶覆盖着金色的琉璃瓦在阳光下熠熠生辉宫殿的墙壁上雕刻着精美的图案栩栩如生仿佛在诉说着一个个古老的故事宫殿里住着一位英明的君主他以仁爱之心治理国家深受百姓的爱戴慧心先生常常受邀到宫殿中为君主出谋划策帮助他解决国家大事君主也非常尊重慧心先生的智慧常常向他请教治国之道在他们的共同努力下锦绣城国泰民安繁荣昌盛锦绣城的居民们还非常重视教育他们相信知识能够改变命运让孩子们拥有更加美好的未来城中有一座古老的书院书院的建筑古朴典雅环境优美书院里有许多博学的老师他们用心地教导学生传授知识和智慧学生们在这里努力学习汲取知识的养分,为将来的发展打下坚实的基础慧心先生也常常到书院授课他用自己的知识和智慧启迪学生们的思维引导他们去探索未知的世界学生们对慧心先生敬仰有加他们知道只有不断学习才能像慧心先生一样拥有渊博的知识和智慧为社会做出贡献锦绣城的故事还有很多这里的人们用自己的勤劳和智慧创造了一个充满生机与活力的美好家园他们相信只要人与自然和谐相处与他人携手共进锦绣城的明天一定会更加美好=='; - - // List imageBytes = utf8.encode(testStr).toList(); - // List imageBytes = utf8.encode(testStr).toList(); - // state.talkData.value = imageBytes; - // setState(() {}); - StartChartManage().sendEchoMessage(payload: imageBytes); - }, - ), + // SubmitBtn( + // btnName: '发送回声测试'.tr, + // onClick: () async { + // String assetPath = 'assets/test.jpg'; // 替换为你的图片路径 + // List imageBytes = await loadAssetImageAsBytes(assetPath); + // // String testStr = + // // '---天地玄黄宇宙洪荒日月盈昃辰宿列张寒来暑往秋收冬藏闰余成岁律吕调阳云腾致雨露结为霜金生丽水玉出昆冈剑号巨阙珠称夜光果珍李柰菜重芥姜海咸河淡鳞潜羽翔龙师火帝鸟官人皇始制文字乃服衣裳推位让国有虞陶唐吊民伐罪周发殷汤坐朝问道垂拱平章爱育黎首臣伏戎羌遐迩体率宾归王鳴鳳翔兮神靈應和炫耀光芒照灼穹蒼迤邐岷峨嶢峻崢巍懿承緒劬勞育秩延佚賡孳蕃鑑識祗崇乾坤纘宵旰卿芮詒朔皎琲犂檄圮黯馭燎竈硎洮蠟胝攢囤嶇葺錡堯羲冕箕翬騏闡燮鸞蓊枘橐榘稟泗沂涖浹涔浣淇漱瀋潢瀾沚澮澆潦瀦瀌瀹灧炅焯燠燋爨熠焜煆烜燴炻熛燧牝牯犛犴牖牒疰疴痀癜痱癃皞皎盂盰盱盻眚眵瞋瞑瞷矙矧矬矰矞砟砉砥砣硇磑磲硤硭礌礞礡祀祚祜祧祼祺禋禡秭秣稃稞稹稷穈穄窀窆窠窸笄筇筌筅筮箦篑篯簟籀籝糅糗紵紽紾綃綈綬綣緜縞縰縻縴繢繇繙罟罾羝羶羸羼翊翕翥翡翳翽耖耜耠耱耦耧耩耨耬耵耶胂胼胬脘腽膦臢臬臾舂舄舡舸艋艏艟艤艚艨艪艭艴芏芊苣苴苕茌茱荄荃莛莪莶菰萁菸菽萸葶蒯蓍蓐蓬蓼蔌蔪蕈蕖蕙蕺蕻薷藦藨藭蘅蘧蘼虍虔虬虮虰虺虻蚨蚋蚱蛏蛘蜊蜍蜉蜣蜥蜩蜴蜱蜮蜾蝣蝤蝥螓螯螨蟒蟑蟛蠊蠋蠛蠡蠹衄衒衢衾袢袷裎裥裨裾褊褙褚褡褰褶襁襦襻觇觋觖觫觿訇訑訾詑詈詟詹誊誨誥誦誨諉諛謏謦譊譖譟譬譯譴讴讵讷诐诪诮诰诳诶谂谄谌谏谑谟谡谥谧谮谯谳谵豇豉豕豚豳豸貂貊貔賑賚賡贐赍赑赗赪赭赳趑趔趱趿跂跏跎跖跗跣跹跽踆踔踝踟踬踮踯蹀蹅蹇蹉蹐蹙蹦蹩躅躐躔躜躞軎軑軔軛軫軬軺輀輅輇輈輐輗輢輦輭輶轋轘轜辀辂辒辚辩迓迕迤迨迮逄逋逑逖逯遄遘遑遴遽邂邈邋邙邡邴邳邶郅郇郛郡郾鄌鄑鄘鄜鄞鄢鄣鄯鄹酃酆酈酖酗酘酢酤酴酹酽酾酾醅醊醑醚醢醪醭醮醯醵醴醶釃釅釐釜釡釴釸釾鉅鈦鈍鈹鈾鈿鉦鉬鉮鉻鉿銎銋銖銩銫銮銲鋈鋋鋌鋮鋯鋹鋻錎錡錣錤鍉鍐鍬鍱鍾鎏鎑鎒鎰鎵鎸鎿鏊鏖鏞鏟鏸鏹鏺鏽鐃鐋鐔鐛鐠鐣鐦鐭鐮鐯鐳鐴鐵鐼鐿鑌鑒鑔鑕鑞鑢鑬鑰鑱鑲鑴鑽鑾鑿钁钆钇钋钍钏钔钗钜钯钴钷钹钺钼钽钿铄铈铊铍铐铖铗铘铙铚铠铨铪铬铮铰铹铼铿锃锆锊锍锎锏锒锓锔锖锗锘锞锟锢锩锫锬锭锯锴锶锷锸锺锼锾镂镄镅镆镉镎镏镒镔镖镙镛镞镡镢镤镩镪镫镬镭镮镯镰镱镲镳镴镶镸长門閃閔閘閡闅闈闑闒闓闔闛闞闠闤闥闦闬闿阂阃阄阆阇阘阛阝队阡阯阱阪阽陀陂陉陔陘陞陟陧陬陲陴陶隃隋隍隒隓隗隦隰隱隳隵隶隽隿雎雋雐雚雝雟雤雩雯雱雿霈霅霌霎霏霗霙霛霝霡霣霤霧靂靅靆靉靎靏靐靕靗靛靡靺靻靽鞀鞉鞎鞑鞔鞖鞚鞝鞡鞤鞧鞨鞫鞬鞮鞯鞳鞴韁韃韈韉韋韐韒韓韗韙韝韟韢韡韣韦韧韨韩韪韫韬韭韮韯韲音頍頏頔頖頞頟頤頦頬頰頲頴頵頹頽頿顃顅顈顊顋顒顕顗顛顝顟顤顪顫顬顮顰顱顲顳顴页顶顷顸颃预颋颌颎颏颐频颓颔颕颙颖颛颟颡颢颣颤颥颦颧風颮颯颰颱颳颶颷颸颹颻颼颾飁飆飇飉飋飏飐飔飗飘飙飚飛飜飝飛飜飝飛飜飝飛飜飝雊霺霿靁靟鞲韞韭頫顴颿飌飡馺駃騑騜髐鬃鰩鳯鷊黴在古老的东方有一座美丽的城市名为锦绣锦绣城四季如春风景秀丽是人们心中的理想之地城中有一条清澈见底的小河河水潺潺流过滋养着两岸的花草树木河边有一座古老的石桥桥上雕刻着精美的图案见证了无数过往行人锦绣城的居民勤劳善良他们日出而作日落而息过着简单而幸福的生活城中有一位智者名叫慧心慧心先生博学多才深受人们的尊敬他常常在河边的亭子里给孩子们讲述历史故事传授知识和智慧孩子们围坐在他身边听得津津有味仿佛置身于一个个奇妙的世界在锦绣城的北边有一片茂密的森林森林里生活着各种各样的动物有活泼可爱的猴子它们在树上跳跃嬉戏有威武雄壮的老虎它们在林间巡视守护着森林的安宁还有许多不知名的鸟儿它们在枝头欢快地歌唱为森林增添了无限生机一天慧心先生带着几个学生走进森林进行一次生动的自然课他们观察着各种植物的生长了解它们的特性聆听鸟儿的鸣叫感受大自然的和谐学生们兴奋不已他们发现大自然是一个神奇的宝库蕴藏着无尽的奥秘在森林的深处有一片神秘的湖泊湖水碧绿如玉清澈见底传说中湖中住着一位美丽的水仙子她用神奇的力量保护着湖泊和周围的生灵慧心先生告诉学生们要爱护大自然与万物和谐共处才能得到大自然的馈赠锦绣城的居民们深知这一点他们珍惜每一滴水每一寸土地努力保护着这片美丽的家园他们相信只要人与自然和谐相处锦绣城将永远充满生机与活力锦绣城外群山环绕山间云雾缭绕宛如仙境山中有一处幽静的山谷谷中开满了五颜六色的花朵香气扑鼻引得蝴蝶翩翩起舞山谷中还有一条蜿蜒的小径两旁长满了奇花异草仿佛是一条通往神秘世界的通道慧心先生的学生们在一次探险中偶然发现了这个山谷他们惊叹于大自然的鬼斧神工纷纷拿出画笔将这美丽的景色描绘下来他们还发现了一种奇特的植物它的叶子呈现出透明的蓝色在阳光下闪闪发光仿佛蕴含着神秘的力量慧心先生告诉他们这种植物名为“梦幻草”只生长在特定的环境中非常稀有在锦绣城的东边有一片广阔的草原草原上绿草如茵牛羊成群草原上还有一座古老的风车风车的叶片随风旋转发出“吱呀吱呀”的声响仿佛在诉说着岁月的故事草原上的人们以放牧为生他们骑着骏马驰骋在广阔的天地间享受着自由自在的生活一天慧心先生带领学生们来到草原给他们上了一堂生动的地理课他指着远处的山脉告诉学生们山脉的形成过程以及它们对气候和生态环境的影响学生们听得入迷仿佛置身于大自然的怀抱中感受到了大自然的壮丽与神奇在锦绣城的南边有一片茂密的竹林竹林里竹子挺拔绿意盎然竹林中有一条清澈的小溪溪水潺潺流淌溪边长满了青苔竹林里还有一座精致的小亭子亭子的柱子上刻着优美的诗句让人感受到一种宁静与雅致慧心先生常常在竹林中的小亭子里静坐思考人生的哲理他告诉学生们竹子虽然柔弱但却有着坚韧不拔的精神无论遇到多大的困难都能顽强地生长学生们深受启发明白了在人生的道路上要像竹子一样勇敢地面对挑战坚持不懈地追求自己的理想锦绣城的居民们还擅长制作各种手工艺品他们的作品精美绝伦远近闻名有巧夺天工的陶瓷色彩斑斓形态各异有细腻精致的刺绣图案生动栩栩如生还有雕刻精美的木雕栩栩如生令人叹为观止这些手工艺品不仅展现了锦绣城居民的智慧和技艺也成为了他们与外界交流的纽带在锦绣城的中心有一座宏伟的宫殿宫殿的建筑风格独特气势恢宏宫殿的屋顶覆盖着金色的琉璃瓦在阳光下熠熠生辉宫殿的墙壁上雕刻着精美的图案栩栩如生仿佛在诉说着一个个古老的故事宫殿里住着一位英明的君主他以仁爱之心治理国家深受百姓的爱戴慧心先生常常受邀到宫殿中为君主出谋划策帮助他解决国家大事君主也非常尊重慧心先生的智慧常常向他请教治国之道在他们的共同努力下锦绣城国泰民安繁荣昌盛锦绣城的居民们还非常重视教育他们相信知识能够改变命运让孩子们拥有更加美好的未来城中有一座古老的书院书院的建筑古朴典雅环境优美书院里有许多博学的老师他们用心地教导学生传授知识和智慧学生们在这里努力学习汲取知识的养分,为将来的发展打下坚实的基础慧心先生也常常到书院授课他用自己的知识和智慧启迪学生们的思维引导他们去探索未知的世界学生们对慧心先生敬仰有加他们知道只有不断学习才能像慧心先生一样拥有渊博的知识和智慧为社会做出贡献锦绣城的故事还有很多这里的人们用自己的勤劳和智慧创造了一个充满生机与活力的美好家园他们相信只要人与自然和谐相处与他人携手共进锦绣城的明天一定会更加美好=='; + // + // // List imageBytes = utf8.encode(testStr).toList(); + // // List imageBytes = utf8.encode(testStr).toList(); + // // state.talkData.value = imageBytes; + // // setState(() {}); + // String toPeerId = + // '2vzXdjdzipJBpWpJxhiRzCFXrDKk54t3YJ7EjYPSRuij'; + // StartChartManage() + // .sendEchoMessage(payload: imageBytes, toPeerId: toPeerId); + // }, + // ), if (F.isLite) Container() else diff --git a/lib/talk/startChart/entity/scp_message.dart b/lib/talk/startChart/entity/scp_message.dart index a2fbef53..c4f9ee07 100644 --- a/lib/talk/startChart/entity/scp_message.dart +++ b/lib/talk/startChart/entity/scp_message.dart @@ -1,32 +1,11 @@ import 'dart:convert'; -import 'package:get/get.dart'; -import 'package:protobuf/protobuf.dart'; +import 'dart:typed_data'; import 'package:star_lock/app_settings/app_settings.dart'; -import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; -import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; -import 'package:star_lock/talk/startChart/entity/heartbeat_response.dart'; -import 'package:star_lock/talk/startChart/entity/login_response.dart'; -import 'package:star_lock/talk/startChart/handle/other/talk_data_repository.dart'; -import 'package:star_lock/talk/startChart/proto/ble_message.pb.dart'; -import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; -import 'package:star_lock/talk/startChart/proto/gateway_transfer.pb.dart'; -import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; -import 'package:star_lock/talk/startChart/proto/remote_unlock.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_accept.pbserver.dart'; -import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_expect.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_hangup.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_push.pbserver.dart'; -import 'package:star_lock/talk/startChart/proto/talk_receiver_transfer.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart'; -import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; +import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; +import 'package:star_lock/talk/startChart/handle/scp_message_handler_factory.dart'; + class ScpMessage { - /// 分包缓冲区 - // 存储每个 messageId 对应的分包数据 - static Map>> _packetBuffer = {}; - ScpMessage({ this.ProtocolFlag, this.MessageType, @@ -167,15 +146,16 @@ class ScpMessage { return bytesToHexString; } - static ScpMessage deserialize(List bytes) { + static ScpMessage deserialize(Uint8List bytes) { final message = ScpMessage(); int offset = 0; // Convert byte array to hex string with zero padding and without spaces - String hexString = - bytes.map((b) => b.toRadixString(16).padLeft(2, '0')).join(); + // String hexString = + // bytes.map((b) => b.toRadixString(16).padLeft(2, '0')).join(); + // + // // Log the hex string + // _log(text: '原始字节数组: $hexString'); - // Log the hex string - _log(text: '原始字节数组: $hexString'); // ProtocolFlag (4 bytes) if (bytes.length - offset >= 4) { message.ProtocolFlag = utf8.decode(bytes.sublist(offset, offset + 4)); @@ -264,7 +244,8 @@ class ScpMessage { // 处理其他类型的Payload if (message.PayloadLength != null && bytes.length - offset >= message.PayloadLength!) { - final sublist = bytes.sublist(offset, offset + message.PayloadLength!); + final Uint8List sublist = + bytes.sublist(offset, offset + message.PayloadLength!); offset += message.PayloadLength!; message.Payload = _handlePayLoad( payloadType: message.PayloadType ?? 0, @@ -276,9 +257,6 @@ class ScpMessage { spTotal: message.SpTotal, messageId: message.MessageId, ); - // if (message.Payload != null && message.Payload is List) { - // message.PayloadLength = message.Payload.length; - // } } else { throw FormatException("Invalid Payload or PayloadLength"); } @@ -290,7 +268,7 @@ class ScpMessage { static dynamic _handlePayLoad({ required int payloadType, required int messageType, - required List byte, + required Uint8List byte, int? offset, int? PayloadLength, int? spTotal, @@ -298,197 +276,20 @@ class ScpMessage { int? messageId, }) { try { - switch (payloadType) { - case PayloadTypeConstant.goOnline: - // 上线 - LoginResponse loginResp = LoginResponse.fromBytes(byte); - return loginResp; - case PayloadTypeConstant.heartbeat: - // 心跳 - HeartbeatResponse heartbeatResponse = - HeartbeatResponse.fromBytes(byte); - return heartbeatResponse; - case PayloadTypeConstant.echoTest: - // 回声测试 - if (spTotal != null && - spTotal > 1 && - messageId != null && - spIndex != null) { - // 分包处理 - return _handleFragmentedPayload( - messageId: messageId, - spTotal: spTotal, - spIndex: spIndex, - byte: byte, - payloadType: payloadType, - ); - } else { - // 如果 spTotal 为 1 或者没有分包信息,直接处理 byte 数据 - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.gatewayReset: - // 初始化网关 - if (messageType == MessageTypeConstant.Resp) { - final GatewayResetResp gatewayResetResp = - GatewayResetResp.fromBuffer(byte); - return gatewayResetResp; - } else if (messageType == MessageTypeConstant.Req) { - final GatewayResetReq gatewayResetReq = - GatewayResetReq.fromBuffer(byte); - return gatewayResetReq; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.callRequest: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkReq talkReq = TalkReq.fromBuffer(byte); - return talkReq; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkAccept: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkAcceptReq talkAccept = TalkAcceptReq.fromBuffer(byte); - return talkAccept; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.gatewayTransfer: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final GatewayTransferReq gatewayTransferReq = - GatewayTransferReq.fromBuffer(byte); - return gatewayTransferReq; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.blePassthrough: - final BleResp bleResp = BleResp.fromBuffer(byte); - return bleResp; - case PayloadTypeConstant.remoteUnlock: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final RemoteUnlockResp remoteUnlockResp = - RemoteUnlockResp.fromBuffer(byte); - return remoteUnlockResp; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkReceiverTransfer: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkReceiverTransfer talkReceiverTransfer = - TalkReceiverTransfer.fromBuffer(byte); - return talkReceiverTransfer; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkPush: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkPush talkPush = TalkPush.fromBuffer(byte); - return talkPush; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkReject: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkReject talkReject = TalkReject.fromBuffer(byte); - return talkReject; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkPing: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkPing talkPing = TalkPing.fromBuffer(byte); - return talkPing; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkExpect: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.Req) { - final TalkExpect talkExpect = TalkExpect.fromBuffer(byte); - return talkExpect; - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkData: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.RealTimeData) { - // 回声测试 - if (spTotal != null && - spTotal > 1 && - messageId != null && - spIndex != null) { - // 分包处理 - return _handleFragmentedPayload( - messageId: messageId, - spTotal: spTotal, - spIndex: spIndex, - byte: byte, - payloadType: payloadType, - ); - } else { - // 没有分包直接解析 - final TalkData talkData = TalkData.fromBuffer(byte); - return talkData; - } - } else { - String payload = utf8.decode(byte); - return payload; - } - case PayloadTypeConstant.talkHangup: - if (messageType == MessageTypeConstant.Resp) { - final GenericResp genericResp = GenericResp.fromBuffer(byte); - return genericResp; - } else if (messageType == MessageTypeConstant.RealTimeData) { - final TalkHangup talkHangup = TalkHangup.fromBuffer(byte); - return talkHangup; - } else { - String payload = utf8.decode(byte); - return payload; - } - default: - print('❌未知的payloadType类型,按照字符串解析'); - String payload = utf8.decode(byte); - return payload; - } + // 构造工厂 + final ScpMessageHandler handler = + ScpMessageHandlerFactory.createHandler(payloadType); + // 处理荷载信息并返回 + return handler.deserializePayload( + payloadType: payloadType, + messageType: messageType, + byte: byte, + offset: offset, + PayloadLength: PayloadLength, + spTotal: spTotal, + spIndex: spIndex, + messageId: messageId, + ); } catch (e, stackTrace) { // 打印异常信息 _log(text: '❌反序列化udp数据时遇到错误----》$e'); @@ -515,49 +316,4 @@ class ScpMessage { static void _log({required String text}) { AppLog.log('=====${text}'); } - - /// 处理分包逻辑 - /// 如果没有收到所有包则返回null - static dynamic _handleFragmentedPayload({ - required int messageId, - required int spTotal, - required int spIndex, - required List byte, - required int payloadType, - }) { - // 初始化分包列表 - if (!_packetBuffer.containsKey(messageId)) { - _packetBuffer[messageId] = List.filled(spTotal, []); - } - - // 检查分包索引是否在合法范围内 - if (spIndex < 1 || spIndex > spTotal) { - print('Invalid spIndex: $spIndex for messageId: $messageId'); - return null; - } - - // 存储当前分包 - _packetBuffer[messageId]![spIndex - 1] = byte; - - // 检查是否接收到所有分包 - if (_packetBuffer[messageId]!.every((packet) => packet.isNotEmpty)) { - // 重组所有分包 - List completePayload = _packetBuffer[messageId]!.expand((packet) => packet).toList(); - - // 清除已重组的分包数据 - _packetBuffer.remove(messageId); - - // 解析完整的 payload - if (payloadType == PayloadTypeConstant.talkData) { - final TalkData talkData = TalkData.fromBuffer(completePayload); - return talkData; - } else { - String payload = utf8.decode(completePayload); - return payload; - } - } else { - // 如果分包尚未接收完全,返回 null 或其他指示符 - return null; - } - } } diff --git a/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart b/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart index 5cc8361b..a09f6aa2 100644 --- a/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_ble_passthrough_handler.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; @@ -28,4 +30,19 @@ class UdpBlePassThroughHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + final BleResp bleResp = BleResp(); + bleResp.mergeFromBuffer(byte); + return bleResp; + } } diff --git a/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart b/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart index f8b446b3..75ecb89a 100644 --- a/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_echo_test_handler.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; @@ -10,15 +13,11 @@ import '../../start_chart_manage.dart'; class UdpEchoTestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override - void handleReq(ScpMessage scpMessage) { - // TODO: 收到回声测试请求 - } + void handleReq(ScpMessage scpMessage) {} @override void handleResp(ScpMessage scpMessage) { - // TODO: 收到回声测试回复 final List payload = scpMessage.Payload; - if (payload is String) { EasyLoading.showToast(scpMessage.Payload, duration: 2000.milliseconds); } else { @@ -32,4 +31,34 @@ class UdpEchoTestHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + // 回声测试 + if (spTotal != null && + spTotal > 1 && + messageId != null && + spIndex != null) { + // 分包处理 + return handleFragmentedPayload( + messageId: messageId, + spTotal: spTotal, + spIndex: spIndex, + byte: byte, + payloadType: payloadType, + ); + } else { + // 如果 spTotal 为 1 或者没有分包信息,直接处理 byte 数据 + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart b/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart index b02bb65b..1fcdd0c6 100644 --- a/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_gateway_reset_handler.dart @@ -1,5 +1,9 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; @@ -7,17 +11,14 @@ import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import '../../start_chart_manage.dart'; -class UdpGateWayResetHandler extends ScpMessageBaseHandle implements ScpMessageHandler { - - +class UdpGateWayResetHandler extends ScpMessageBaseHandle + implements ScpMessageHandler { @override void handleReq(ScpMessage scpMessage) { // TODO: 收到网关初始化请求 final GatewayResetResp gatewayResetResp = scpMessage.Payload; final status = gatewayResetResp.status; - if (status != null && status == GatewayResetResp_StatusE.OK) { - - } + if (status != null && status == GatewayResetResp_StatusE.OK) {} } @override @@ -26,12 +27,33 @@ class UdpGateWayResetHandler extends ScpMessageBaseHandle implements ScpMessageH } @override - void handleInvalidReq(ScpMessage scpMessage) { - - } + void handleInvalidReq(ScpMessage scpMessage) {} @override - void handleRealTimeData(ScpMessage scpMessage) { + void handleRealTimeData(ScpMessage scpMessage) {} + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + // 初始化网关 + if (messageType == MessageTypeConstant.Resp) { + final GatewayResetResp gatewayResetResp = + GatewayResetResp.fromBuffer(byte); + return gatewayResetResp; + } else if (messageType == MessageTypeConstant.Req) { + final GatewayResetReq gatewayResetReq = GatewayResetReq(); + gatewayResetReq.mergeFromBuffer(byte); + return gatewayResetReq; + } else { + String payload = utf8.decode(byte); + return payload; + } } } diff --git a/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart b/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart index 7eae5ae8..c5546e30 100644 --- a/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_gateway_transfer_handler.dart @@ -1,9 +1,14 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; +import 'package:star_lock/talk/startChart/proto/gateway_transfer.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; import '../../start_chart_manage.dart'; @@ -29,4 +34,28 @@ class UdpGateWayTransferHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final GatewayTransferReq gatewayTransferReq = GatewayTransferReq(); + gatewayTransferReq.mergeFromBuffer(byte); + return gatewayTransferReq; + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_go_online_handler.dart b/lib/talk/startChart/handle/impl/udp_go_online_handler.dart index 7f703f4a..830301ed 100644 --- a/lib/talk/startChart/handle/impl/udp_go_online_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_go_online_handler.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/login_response.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; @@ -35,4 +37,19 @@ class UdpGoOnlineHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + // 上线 + LoginResponse loginResp = LoginResponse.fromBytes(byte); + return loginResp; + } } diff --git a/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart b/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart index 82b8843b..ed866f63 100644 --- a/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_heart_beat_handler.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/heartbeat_response.dart'; import 'package:star_lock/talk/startChart/entity/login_response.dart'; @@ -39,4 +41,11 @@ class UdpHeartBeatHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload({required int payloadType, required int messageType, required Uint8List byte, int? offset, int? PayloadLength, int? spTotal, int? spIndex, int? messageId}) { + // 心跳 + HeartbeatResponse heartbeatResponse = HeartbeatResponse.fromBytes(byte); + return heartbeatResponse; + } } diff --git a/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart b/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart index 4852ee40..03d24701 100644 --- a/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_remote_un_lock_handler.dart @@ -1,6 +1,10 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:star_lock/appRouters.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; @@ -32,4 +36,20 @@ class UdpRemoteUnLockHandler extends ScpMessageBaseHandle implements ScpMessageH void handleRealTimeData(ScpMessage scpMessage) { } + + @override + deserializePayload({required int payloadType, required int messageType, required Uint8List byte, int? offset, int? PayloadLength, int? spTotal, int? spIndex, int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final RemoteUnlockResp remoteUnlockResp = RemoteUnlockResp(); + remoteUnlockResp.mergeFromBuffer(byte); + return remoteUnlockResp; + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart index 0b9510a3..d16f80fd 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_accept_handler.dart @@ -1,10 +1,15 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_accept.pb.dart'; import '../../start_chart_manage.dart'; @@ -22,12 +27,12 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle } @override - void handleResp(ScpMessage scpMessage) { + void handleResp(ScpMessage scpMessage) { // 收到同意接听回复 final GenericResp genericResp = scpMessage.Payload; if (checkGenericRespSuccess(genericResp)) { // 延迟2秒后启动监听 - Future.delayed(Duration(seconds: 4), () { + Future.delayed(Duration(seconds: 5), () { // 启动通话保持定时器 _handleStartTalkPing(); // 启动发送预期数据请求 @@ -49,6 +54,30 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkAcceptReq talkAccept = TalkAcceptReq(); + talkAccept.mergeFromBuffer(byte); + return talkAccept; + } else { + String payload = utf8.decode(byte); + return payload; + } + } + // 启动通话保持 void _handleStartTalkPing() { // 启动通话保持 @@ -85,4 +114,6 @@ class UdpTalkAcceptHandler extends ScpMessageBaseHandle // 启动发送预期数据定时器 startChartManage.startTalkExpectTimer(); } + + } diff --git a/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart index 51527d9d..9649533e 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_data_handler.dart @@ -1,7 +1,9 @@ +import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; @@ -61,5 +63,47 @@ class UdpTalkDataHandler extends ScpMessageBaseHandle void _handleVideoImage(TalkData talkData) {} /// 处理g711音频数据 - void _handleVideoG711(TalkData talkData) {} + void _handleVideoG711(TalkData talkData) { + talkDataRepository.addTalkData(talkData); + } + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.RealTimeData) { + // 回声测试 + if (spTotal != null && + spTotal > 1 && + messageId != null && + spIndex != null) { + // 分包处理 + return handleFragmentedPayload( + messageId: messageId, + spTotal: spTotal, + spIndex: spIndex, + byte: byte, + payloadType: payloadType, + ); + } else { + // 没有分包直接解析 + final TalkData talkData = TalkData(); + talkData.mergeFromBuffer(byte); + return talkData; + } + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart index f7fc3c85..2dda6dab 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_expect_handler.dart @@ -1,8 +1,10 @@ +import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; @@ -42,4 +44,28 @@ class UdpTalkExpectHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkExpect talkExpect = TalkExpect(); + talkExpect.mergeFromBuffer(byte); + return talkExpect; + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart index d590ee9c..1bebcddc 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_hangup_handler.dart @@ -1,10 +1,15 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_hangup.pb.dart'; import '../../start_chart_manage.dart'; @@ -39,12 +44,32 @@ class UdpTalkHangUpHandler extends ScpMessageBaseHandle } @override - void handleInvalidReq(ScpMessage scpMessage) { - - } + void handleInvalidReq(ScpMessage scpMessage) {} @override - void handleRealTimeData(ScpMessage scpMessage) { + void handleRealTimeData(ScpMessage scpMessage) {} + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.RealTimeData) { + final TalkHangup talkHangup = TalkHangup(); + talkHangup.mergeFromBuffer(byte); + return talkHangup; + } else { + String payload = utf8.decode(byte); + return payload; + } } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart index 0c952f48..42b7021a 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_ping_handler.dart @@ -1,8 +1,13 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_ping.pb.dart'; class UdpTalkPingHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @@ -26,4 +31,28 @@ class UdpTalkPingHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkPing talkPing = TalkPing(); + talkPing.mergeFromBuffer(byte); + return talkPing; + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart index b7872213..15ecf86e 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_push_handler.dart @@ -1,10 +1,15 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_push.pb.dart'; import '../../start_chart_manage.dart'; @@ -27,4 +32,28 @@ class UdpTalkPushHandler extends ScpMessageBaseHandle @override void handleRealTimeData(ScpMessage scpMessage) {} + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkPush talkPush = TalkPush(); + talkPush.mergeFromBuffer(byte); + return talkPush; + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart index 6e662383..168fde66 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_receiver_transfer_handler.dart @@ -1,17 +1,20 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_receiver_transfer.pb.dart'; import '../../start_chart_manage.dart'; class UdpTalkReceiverTransferHandler extends ScpMessageBaseHandle implements ScpMessageHandler { - - @override void handleReq(ScpMessage scpMessage) { // TODO: 对讲接听者转移请求 @@ -23,12 +26,32 @@ class UdpTalkReceiverTransferHandler extends ScpMessageBaseHandle } @override - void handleInvalidReq(ScpMessage scpMessage) { - - } + void handleInvalidReq(ScpMessage scpMessage) {} @override - void handleRealTimeData(ScpMessage scpMessage) { + void handleRealTimeData(ScpMessage scpMessage) {} + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkReceiverTransfer talkReceiverTransfer = TalkReceiverTransfer(); + talkReceiverTransfer.mergeFromBuffer(byte); + return talkReceiverTransfer; + } else { + String payload = utf8.decode(byte); + return payload; + } } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart index 3aab2976..ffcf75da 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_reject_handler.dart @@ -1,10 +1,15 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; +import 'package:star_lock/talk/startChart/constant/message_type_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_reject.pb.dart'; import '../../start_chart_manage.dart'; @@ -36,12 +41,32 @@ class UdpTalkRejectHandler extends ScpMessageBaseHandle } @override - void handleInvalidReq(ScpMessage scpMessage) { - - } + void handleInvalidReq(ScpMessage scpMessage) {} @override - void handleRealTimeData(ScpMessage scpMessage) { + void handleRealTimeData(ScpMessage scpMessage) {} + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkReject talkReject = TalkReject(); + talkReject.mergeFromBuffer(byte); + return talkReject; + } else { + String payload = utf8.decode(byte); + return payload; + } } } diff --git a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart index 45aaf970..02588870 100644 --- a/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart +++ b/lib/talk/startChart/handle/impl/udp_talk_request_handler.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:typed_data'; + import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:get/get.dart'; @@ -9,6 +12,7 @@ import 'package:star_lock/talk/startChart/handle/scp_message_handle.dart'; import 'package:star_lock/talk/startChart/proto/gateway_reset.pb.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; import 'package:star_lock/talk/startChart/proto/talk_request.pb.dart'; +import 'package:star_lock/talk/startChart/start_chart_talk_status.dart'; import 'package:star_lock/tools/storage.dart'; import '../../start_chart_manage.dart'; @@ -17,6 +21,10 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle implements ScpMessageHandler { @override void handleReq(ScpMessage scpMessage) { + if (talkStatus == TalkStatus.waitingAnswer) { + // 如果已经是等待接听了,就不在处理剩下的请求 + return; + } // 收到对讲请求 final TalkReq talkReq = scpMessage.Payload; // 回复收到对讲成功的消息 @@ -29,6 +37,8 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle startChartManage.ToPeerId = scpMessage.FromPeerId!; // 处理收到接听请求后的事件 _talkRequestEvent(talkObjectName: talkReq.callerName); + // 设置为等待接听状态 + talkStatus.setWaitingAnswer(); } @override @@ -77,4 +87,28 @@ class UdpTalkRequestHandler extends ScpMessageBaseHandle '${'收到来自'.tr}($talkObjectName)${'锁的呼叫'.tr}。', platformChannelSpecifics, payload: 'item x'); } + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + if (messageType == MessageTypeConstant.Resp) { + final GenericResp genericResp = GenericResp(); + genericResp.mergeFromBuffer(byte); + return genericResp; + } else if (messageType == MessageTypeConstant.Req) { + final TalkReq talkReq = TalkReq(); + talkReq.mergeFromBuffer(byte); + return talkReq; + } else { + String payload = utf8.decode(byte); + return payload; + } + } } diff --git a/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart b/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart index 62c99f35..4aee3b03 100644 --- a/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart +++ b/lib/talk/startChart/handle/impl/unknow_payload_type_handler.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/scp_message_base_handle.dart'; @@ -27,4 +29,17 @@ class UnKnowPayloadTypeHandler extends ScpMessageBaseHandle void handleRealTimeData(ScpMessage scpMessage) { AppLog.log('❌未知的payloadType类型---》${scpMessage}'); } + + @override + deserializePayload( + {required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId}) { + AppLog.log('❌未知的payloadType类型---》'); + } } diff --git a/lib/talk/startChart/handle/scp_message_base_handle.dart b/lib/talk/startChart/handle/scp_message_base_handle.dart index 06597f71..c825f972 100644 --- a/lib/talk/startChart/handle/scp_message_base_handle.dart +++ b/lib/talk/startChart/handle/scp_message_base_handle.dart @@ -1,20 +1,28 @@ +import 'dart:convert'; + import 'package:audioplayers/audioplayers.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/talk/other/audio_player_manager.dart'; +import 'package:star_lock/talk/startChart/constant/payload_type_constant.dart'; import 'package:star_lock/talk/startChart/constant/udp_constant.dart'; import 'package:star_lock/talk/startChart/entity/scp_message.dart'; import 'package:star_lock/talk/startChart/handle/other/overtime_timer_manger.dart'; import 'package:star_lock/talk/startChart/handle/other/talk_data_repository.dart'; import 'package:star_lock/talk/startChart/proto/generic.pb.dart'; +import 'package:star_lock/talk/startChart/proto/talk_data.pb.dart'; import 'package:star_lock/talk/startChart/start_chart_manage.dart'; import 'package:star_lock/talk/startChart/start_chart_talk_status.dart'; class ScpMessageBaseHandle { final startChartManage = StartChartManage(); + /// 分包缓冲区 + // 存储每个 messageId 对应的分包数据 + static Map>> _packetBuffer = {}; + // 通话数据流的单例流数据处理类 final TalkDataRepository talkDataRepository = TalkDataRepository.instance; @@ -31,7 +39,7 @@ class ScpMessageBaseHandle { ); // 回复成功消息 - void replySuccessMessage(ScpMessage scpMessage){ + void replySuccessMessage(ScpMessage scpMessage) { startChartManage.sendGenericRespSuccessMessage( ToPeerId: scpMessage.FromPeerId!, FromPeerId: scpMessage.ToPeerId!, @@ -63,4 +71,53 @@ class ScpMessageBaseHandle { void stopRingtone() async { await audioManager.stopRingtone(); } + + /// 处理分包逻辑 + /// 如果没有收到所有包则返回null + dynamic handleFragmentedPayload({ + required int messageId, + required int spTotal, + required int spIndex, + required List byte, + required int payloadType, + }) { + // 初始化分包列表 + if (!_packetBuffer.containsKey(messageId)) { + _packetBuffer[messageId] = List.filled(spTotal, []); + } + + // 检查分包索引是否在合法范围内 + if (spIndex < 1 || spIndex > spTotal) { + print('Invalid spIndex: $spIndex for messageId: $messageId'); + return null; + } + + // 存储当前分包 + _packetBuffer[messageId]![spIndex - 1] = byte; + + // 检查是否接收到所有分包 + if (_packetBuffer[messageId]!.every((packet) => packet.isNotEmpty)) { + // 重组所有分包 + List completePayload = + _packetBuffer[messageId]!.expand((packet) => packet).toList(); + + // 清除已重组的分包数据 + _packetBuffer.remove(messageId); + + // 解析完整的 payload + if (payloadType == PayloadTypeConstant.talkData) { + final TalkData talkData = TalkData(); + talkData.mergeFromBuffer(completePayload); + return talkData; + } else if (payloadType == PayloadTypeConstant.echoTest) { + return completePayload; + } else { + String payload = utf8.decode(completePayload); + return payload; + } + } else { + // 如果分包尚未接收完全,返回 null 或其他指示符 + return null; + } + } } diff --git a/lib/talk/startChart/handle/scp_message_handle.dart b/lib/talk/startChart/handle/scp_message_handle.dart index c7a32916..e43ac425 100644 --- a/lib/talk/startChart/handle/scp_message_handle.dart +++ b/lib/talk/startChart/handle/scp_message_handle.dart @@ -1,3 +1,5 @@ +import 'dart:typed_data'; + import 'package:star_lock/talk/startChart/entity/scp_message.dart'; abstract class ScpMessageHandler { @@ -12,4 +14,16 @@ abstract class ScpMessageHandler { // 无效请求 void handleInvalidReq(ScpMessage scpMessage); + + // 处理荷载 + dynamic deserializePayload({ + required int payloadType, + required int messageType, + required Uint8List byte, + int? offset, + int? PayloadLength, + int? spTotal, + int? spIndex, + int? messageId, + }); } diff --git a/lib/talk/startChart/start_chart_manage.dart b/lib/talk/startChart/start_chart_manage.dart index 790d6ea5..080bf818 100644 --- a/lib/talk/startChart/start_chart_manage.dart +++ b/lib/talk/startChart/start_chart_manage.dart @@ -285,8 +285,7 @@ class StartChartManage { } // 发送回声测试消息 - void sendEchoMessage({required List payload}) async { - String toPeerId = '7SDLN3XMNAQvVAJ2yrbLFfJkKQdgfBrpa8wV7s7TXYcu'; + void sendEchoMessage({required List payload,required String toPeerId}) async { // 计算需要分多少个包发送 final int totalPackets = (payload.length / _maxPayloadSize).ceil(); @@ -764,7 +763,7 @@ class StartChartManage { _handleUdpResultData(deserialize); } if (deserialize.PayloadType != PayloadTypeConstant.heartbeat) { - _log(text: 'Udp收到结构体数据---》$deserialize'); + // _log(text: 'Udp收到结构体数据---》$deserialize'); // _log(text: 'text---》${utf8.decode(deserialize.Payload)}'); } }