前言
距離上一篇部落格竟然已經10多天了。。。工作上的事,個人原因,種種吧。不多說廢話,本文將會重點介紹layim的入口配置。
LayIM配置
其實在開發者文件裡面已經描述的很清楚了。除了幾個重要的介面配置,剩下的就是其他可選配置項了。
在普通的對接當中,這些配置都是直接寫到頁面中的,例如官網給出的例子:
由於在 LayIM.AspNetCore 專案中,為了實現前端的最簡單對接。所以我將配置專案做到後臺中了。為什麼這麼做呢?我的初衷就是後端可通過讀取配置檔案或者硬編碼的形式更改LayIM配置,這樣,前端如果多個頁面引用了LayIM,那麼就不用大費周折的去更改配置了。
配置示例
就拿上圖中的 isgroup 做示例吧。 isgroup:true 開啟群組 false 關閉群組 那麼在後臺就可以這麼配置。
帶群組的效果如下:
我們在改一下配置:
效果如下,可以看到群組圖示就消失了
原理講解
原理其實很簡單,無非就是將前端的配置改為後端配置,然後通過一個介面讀取配置資料,然後封裝成layim可用的配置資料供layim呼叫即可。所以,這個專案的入口就是 /layim/config 。通過前面幾篇部落格有關路由的介紹,這裡不在贅述獲取配置介面是如何實現的。我們這裡分析一下配置介面返回的資料:
- api 就是layim常用的介面部分,即在Routes中註冊的介面,也是預設對LayIM實現的介面
- config 用於layim.config 方法呼叫的引數,不過這個config不是標準的配置,所以需要在js中做一些轉換。
- extend 自定義的layui外掛
- other 其他配置,例如是否客服模式,是否儲存訊息,是否開啟前端日誌
- uid 當前使用者ID
嵌入檔案在之前的部落格中也有介紹過,在此不在過多的介紹。在專案的Resources資料夾中有兩個最重要的js。 init.js 和socket.js
init.js 通過呼叫 /layim/config 介面,然後通過呼叫 socket.start 方法進行初始化
layui.use('jquery', function () { var $ = layui.jquery; $(function () { var callback = function (conf) { layui.extend(conf.extend); layui.use(conf.extend.init, function (socket) { socket.start(conf); }); } var config = layui.data('layim_global')['config']; if (config) { callback(config); } $.get('/layim/config', function (conf) { layui.data('layim_global', { key: 'config', value: conf }); if (!config) { callback(conf); } }); }); });
socket.js 是核心業務程式碼部分了,包含對 config 的解析,封裝【layim】的呼叫,封裝【融雲通訊】的呼叫。當然這個js目前還是耦合度比較高的,後期在用Asp.Net.Core.SignalR實現的時候會將js業務也進行介面化,以用來支援多種 通訊Server端。用更通俗的語言方式就是,定義一套傳送訊息,接收訊息的介面,各種websocket服務實現該介面即可。無論是第三方類似融雲還是說自己寫Websocket服務,能達到隨時切換效果。
總結
本篇介紹了LayIM的相關配置資訊,以及配置遷移到後臺的做法。另外專案對LayIM做了高度封裝,但又不失靈活性。當然目的也是在此。不過由於技術問題,專案中還是有很多坑的。沒關係,慢慢來吧。
部落格預告:LayIM.AspNetCore Middleware 開發日記(七)不想用融雲?試試Asp.Net.Core.SignalR吧
專案地址:https://github.com/fanpan26/LayIM.AspNetCore 歡迎小夥伴們star 圍觀 提意見。