91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在flutter中自定義websocket路由

發布時間:2021-05-27 17:49:50 來源:億速云 閱讀:246 作者:Leah 欄目:移動開發

如何在flutter中自定義websocket路由?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在 lib 目錄下新建一個 socket 目錄 里面創建兩個文件main.dart和router.dart;
main.dart : 主要控制websocket的連接 斷開 和收到消息的處理;
router.dart 則為websocket 服務端返回的消息做路由處理;

router.dart

import 'package:lee/logic/user.dart';

typedef void RouteHandle(Map params);

var wsRouter = new WsRouter();

class WsRouter {
 static Map<String, RouteHandle> _routers = new Map();

 init() {
  routers.forEach((route) {
   route.forEach((name, value) {
    this.add(name, value);
   });
  });
 }

 // 增加路由
 void add(String name, RouteHandle handle) {
  WsRouter._routers[name] = handle;
 }

 // 路由處理
 Future<void> handle(String name, Map params) async {
  RouteHandle handle = WsRouter._routers[name];
  if (handle == null) {
   print("路由不存在");
   return;
  }
  handle(params);
 }
}

List<Map<String, RouteHandle>> routers = [
 {"login": UserLogic.login},
 {"kick": UserLogic.kick},
];

main.dart

import 'package:lee/socket/router.dart';
import 'package:web_socket_channel/io.dart';
import 'dart:convert';

var webSocket = new WebSocket();

class WebSocket {
 // webSocket連接
 IOWebSocketChannel webSocketChannel;

 factory WebSocket() => _webSocket();

 static WebSocket _instance;

 // 構造函數
 WebSocket._() {
  // 初始化webSocket路由
  wsRouter.init();
 }

 static WebSocket _webSocket() {
  if (_instance == null) {
   _instance = WebSocket._();
  }
  return _instance;
 }

 conn() {
  IOWebSocketChannel channel = new IOWebSocketChannel.connect(
    "ws://127.0.0.1:8080/ws",
    pingInterval: Duration(milliseconds: 100));

  channel.stream
    .listen((data) => onMessage(data), onError: onError, onDone: onDone);

  this.webSocketChannel = channel;
 }

 onMessage(response) async {
  // 例如服務端返回的大概是這樣一個json
  // {"cmd":"kick","data":{}}
  // {"cmd":"login","data":{}}
  Map params = json.decode(response);
  wsRouter.handle(params["cmd"], params["data"]);
 }

 onError(err) async {}

 onDone() async {}
}

關于如何在flutter中自定義websocket路由問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汤原县| 桐庐县| 景德镇市| 彭山县| 桂林市| 土默特右旗| 肥东县| 赣榆县| 永丰县| 和龙市| 哈尔滨市| 辽宁省| 永济市| 榆社县| 台北市| 格尔木市| 嘉鱼县| 论坛| 顺平县| 红安县| 高阳县| 颍上县| 紫金县| 富平县| 苏尼特右旗| 梓潼县| 呼玛县| 林州市| 屯昌县| 布尔津县| 扎兰屯市| 化州市| 革吉县| 旬邑县| 桐庐县| 千阳县| 瓮安县| 黄骅市| 华亭县| 和硕县| 普格县|