LayIM.AspNetCore Middleware 開發日記(四)主角登場(LayIM介紹)

丶Pz發表於2018-05-31

前言

  在前幾篇中已經初步介紹了開發AspNetCore中介軟體的一些基礎知識,不過都沒有很深入的去研究,後續還是需要去看看原始碼。本篇呢,終於有點開頭的味道了,就是要介紹LayIM了,其實標題寫的是主角,其實由於我已經多次對接過LayIM的開發,所以這次的主角應該是Asp.Net Core,不過技術沒有好壞之分,合起來才能完美。本篇對於LayIM只是做簡單介紹,想了解詳情的小夥伴可以去官網檢視.

LayIM簡介

  我覺得再多的語言也不如一張圖來的實在。

 

LayIM常用介面介紹

  layim.config 是它初始化的一個方法,也是傳入配置引數的一個方法。這個方法是LayIM的入口。

  在config中的比較重要的引數有:

  init:{url:'/layim/init'}  主頁面就是通過這個方法獲取的資料進行載入的,也就是上圖中最右側的主皮膚

  members:{url:'/layim/members'} 這個方法就是獲取群員的一個方法

  uploadImage/uploadFile 是否開啟聊天框中傳送圖片和檔案的功能

    瞭解並且會使用以上幾個基本配置,基本LayIM主介面就出來了。更多配置還是希望大家去看一下文件。

  layim.on 事件監聽

  ready LayIM初始化之後呼叫

  sendMessage LayIM傳送訊息之後呼叫

  更多實用方法:

  

 

 與中介軟體對接

  很多小夥伴在瞭解到LayIM的時候,以為它就是可以直接拿來使用的,然而它需要後端的配合來實現基本的推送功能,那麼LayIM才算完美。所以呢,接下來的業務開發基本上都是圍繞著LayIM的介面進行的。比如最常用也是最基本必須要實現的 init 介面(獲取基本資料,使用者資訊,好友資訊,群組資訊等)。下面我以 init 介面為例,介紹一下中介軟體中的開發步驟。

  首先,它是一個QueryCommand.所以在路由中,我們要註冊該方法。

  //layim初始化介面
 routes.AddQueryCommand("/init", async context =>
   {
      return "基礎資料資訊";
   });

  這樣,我們前端呼叫  layim/init 的時候就會匹配到這個方法上了。

  當然為了解耦,我們還是採用之前文章中介紹的那樣,使用依賴注入去實現。比如,定義如下介面:

public interface ILayIMStorage
    {
        /// <summary>
        /// 初始化資料
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
       Task<LayIMInitModel> GetInitData(string userId);
    }

  目前我這裡是用SqlServer去實現,使用Dapper作為ORM框架。實現類定義如下:

 public class LayIMDapperStorage : ILayIMStorage { //實現介面 }

  然後在服務中去註冊  LayIMDapperStorage

        /// <summary>
        /// 使用SqlServer
        /// </summary>
        /// <param name="services"></param>
        /// <param name="setConfig"></param>
        public static IServiceCollection AddSqlServer(this IServiceCollection services,string connectionString)
        {
            var dbConfig = new DBConnectionConfig(DBType.SqlServer);
            dbConfig.ConnectionString = connectionString;

            services.AddSingleton(dbConfig);

            services.AddSingleton<ILayIMStorage, LayIMDapperStorage>();
       
            return services;
        }

  上述程式碼擴充套件了IServiceCollection,新增了AddSqlServer的方法。那麼由於作為Demo演示和預設實現,我採用了融雲和SqlServer,所以在Demo中是這麼呼叫的:

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddLayIM()
                .AddRongCloud(config =>
                    {
                        config.AppKey = "appkey";
                        config.AppSecret = "appsecret";
                    })
                .AddSqlServer("connectionString");
        }

  

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   //使用LayIM
   app.UseLayIM();
   //其他程式碼
}    

  後續會將上述中的程式碼詳細講解,本篇只是作為思路演示。

DEMO演示

  首先在資料庫中加入一些樣例資料。啟動Web專案。先模擬登入:http://localhost:56304/account/?uid=1,登入成功之後會跳轉到主頁面,前端列印日誌如下:

  

 

  

  上圖中可以看到一個配置資訊,這個配置資訊是從後臺載入的,我把LayIM的部分引數放入了後臺去配置。也就是說專案啟動的時候去配置的。配置入口就在 app.UseLayIM中,稍後為稍微講解一下,下面繼續看執行效果截圖:

  大家注意紅框的地方,那麼如果不想要這兩個紅框怎麼辦?在配置(檔案)中改一下即可:

            app.UseLayIM(options => {               
                options.UIConfig.UseUploadFile = false;
                options.UIConfig.UseUploadImage = false;
            });

 

總結

  本篇對LayIM做了一個簡單的介紹,和一個demo的基本演示。本篇到此就結束啦。拜拜~~

       部落格預告:LayIM.AspNetCore Middleware 開發日記(五)Init介面實現細節

  專案地址:https://github.com/fanpan26/LayIM.AspNetCore (本文程式碼對應 layim 分支或者直接檢視master)歡迎小夥伴們star 圍觀 提意見。

相關文章