LayIM.AspNetCore Middleware 開發日記(六)嵌入資源的使用,layim.config的封裝

丶Pz發表於2018-06-13

前言

  距離上一篇部落格竟然已經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.jssocket.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 圍觀 提意見。

相關文章