C# 调用腾讯即时通信 IM的示例

作者:正在缓冲 时间:2021-10-29 16:31:17 

IM SDK API 概述 https://cloud.tencent.com/document/product/269/33543


/// <summary>
   /// IM SDK 初始化。
   /// </summary>
   /// <param name="sdk_app_id"></param>
   /// <param name="json_sdk_config"></param>
   /// <returns></returns>
   [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
   public extern static int TIMInit(long sdk_app_id, string json_sdk_config);

/// <summary>
   /// 登录
   /// </summary>
   /// <param name="user_id">用户id</param>
   /// <param name="user_sig">签名</param>
   /// <param name="cb"></param>
   /// <returns></returns>
   [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl)]
   private extern static int TIMLogin(string user_id, string user_sig, TIMCommCallback cb);

/// <summary>
   /// 接收新消息回调
   /// </summary>
   /// <param name="cb"></param>
   [DllImport(@"imsdk.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
   private extern static void TIMAddRecvNewMsgCallback(delegateTIMRecvNewMsgCallback cb);

public void ImInit()
   {
     int sdk_app_id = 1400000000;
     var data = new { sdk_config_log_file_path = AppDomain.CurrentDomain.BaseDirectory, sdk_config_config_file_path = AppDomain.CurrentDomain.BaseDirectory };
     TIMInit(sdk_app_id, JsonConvert.SerializeObject(data));
     TIMAddRecvNewMsgCallback(TIMRecvNewMsgCallback);
     var tLSSig = new TLSSigAPIv2(sdk_app_id, "163250645178b565ffc0b22618d14a88d8a91d86f0e76813313197a5xxxxxxx");
     TIMLogin("用户", tLSSig.GenSig("用户"), CommCallback);

}
   private delegate int TIMCommCallback(int code, string desc, string json_params);

private int CommCallback(int code, string desc, string json_params)
   {
     return code;
   }
   public delegate void delegateTIMRecvNewMsgCallback([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(Utf8Marshaler))] string json_msg_array, IntPtr user_data);;
   private void TIMRecvNewMsgCallback(string json_msg_array, IntPtr user_data) {
     var b = Encoding.Default.GetBytes(json_msg_array);
     richTextBox1.AppendText(Encoding.UTF8.GetString(b));
   }

   private void Form1_Load(object sender, EventArgs e)
   {
    ImInit();
   }

public class Utf8Marshaler : ICustomMarshaler
    {
        public void CleanUpManagedData(object managedObj)
        {
        }
 
        public void CleanUpNativeData(IntPtr pNativeData)
        {
            Marshal.FreeHGlobal(pNativeData);
        }
 
        public int GetNativeDataSize()
        {
            return -1;
        }
 
        public IntPtr MarshalManagedToNative(object managedObj)
        {
            if (object.ReferenceEquals(managedObj, null))
                return IntPtr.Zero;
            if (!(managedObj is string))
                throw new InvalidOperationException();
 
            byte[] utf8Bytes = Encoding.UTF8.GetBytes((string)managedObj);
            IntPtr ptr = Marshal.AllocHGlobal(utf8Bytes.Length + 1);
            Marshal.Copy(utf8Bytes, 0, ptr, utf8Bytes.Length);
            Marshal.WriteByte(ptr, utf8Bytes.Length, 0);
            return ptr;
        }
 
        public object MarshalNativeToManaged(IntPtr pNativeData)
        {
            if (pNativeData == IntPtr.Zero)
                return null;
 
            List<byte> bytes = new List<byte>();
            for (int offset = 0; ; offset++)
            {
                byte b = Marshal.ReadByte(pNativeData, offset);
                if (b == 0)
                    break;
                else
                    bytes.Add(b);
            }
            return Encoding.UTF8.GetString(bytes.ToArray(), 0, bytes.Count);
        }
 
        private static readonly Utf8Marshaler Instance = new Utf8Marshaler();
        public static ICustomMarshaler GetInstance(string cookie)
        {
            return Instance;
        }
    }

来源:https://www.cnblogs.com/zhangliang2008/p/11847858.html

标签:c#,腾讯,即时通信,im
0
投稿

猜你喜欢

  • Android WebView无法弹出软键盘的原因及解决办法

    2023-07-07 18:30:00
  • java中怎样表示圆周率

    2022-11-30 11:20:00
  • 详解SpringBoot 快速整合MyBatis(去XML化)

    2022-08-19 16:42:54
  • Java中文件操作功能小结

    2023-06-20 03:32:28
  • Android 沉浸式状态栏及悬浮效果

    2023-07-29 23:03:15
  • Spring Boot实现热部署的实例方法

    2023-10-24 08:12:50
  • java数独游戏完整版分享

    2023-05-22 07:09:56
  • Java如何定义Long类型

    2022-05-28 22:28:52
  • spring基础概念AOP与动态代理理解

    2022-01-29 20:55:13
  • Java线程并发中常见的锁机制详细介绍

    2023-07-04 05:33:33
  • Spring Security自定义认证逻辑实例详解

    2023-02-28 19:19:18
  • Centos中安装jdk案例讲解

    2023-04-30 00:37:50
  • java web返回中文乱码问题及解决

    2023-08-25 08:23:08
  • java调用ffmpeg实现转换视频

    2022-08-25 15:21:04
  • spring boot实战教程之shiro session过期时间详解

    2023-01-05 01:37:47
  • C#语言主要语言区域

    2021-10-05 13:58:38
  • 在IDEA中配置tomcat并创建tomcat项目的图文教程

    2023-08-11 11:33:59
  • 如何使用JJWT及JWT讲解和工具类

    2023-10-28 04:21:35
  • C#二维码图片识别代码

    2022-01-15 13:03:51
  • Springmvc模式上传和下载与enctype对比

    2022-11-08 09:14:17
  • asp之家 软件编程 m.aspxhome.com