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

 更新时间:2020-11-21 21:08:24   作者:佚名   我要评论(0)

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


/// <summary>
/// IM SDK 初始化。
/// </summary>
/// <param name="sdk_

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;
        }
    }

以上就是C# 调用腾讯即时通信 IM的示例的详细内容,更多关于c# 调用腾讯 im的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
  • C#截图程序类似腾讯QQ截图实现代码
  • 详解c# 中的DateTime
  • C#中decimal保留2位有效小数的实现方法
  • C# [ImportDll()] 知识小结
  • C#使用TimeSpan时间计算的简单实现
  • 使用c#+IMap实现收取163邮件
  • 详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用
  • C# DateTime与时间戳转换实例
  • C#byte数组与Image的相互转换实例代码
  • C#中的DateTime是值类型还是引用类型
  • C#无损转换Image为Icon的方法

相关文章

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

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

    IM SDK API 概述 https://cloud.tencent.com/document/product/269/33543 /// <summary> /// IM SDK 初始化。 /// </summary> /// <param name="sdk_
    2020-11-21
  • docker 连接宿主Mysql操作

    docker 连接宿主Mysql操作

    今天公司项目要配置docker,顺利在windows上装完了之后,发现连接不上本地的mysql, 一直报权限问题或者地址错误的问题 最后发现 1:地址按照下面这个ipv4来 2:要在
    2020-11-21
  • 详解 c# 克隆

    详解 c# 克隆

    克隆方法是原型设计模式中必须使用的方式,它将返回一个与当前对象数据一致的对象。正如其名,犹如一个模子雕刻而出。克隆类型分为两种:浅克隆、深克隆。 1、浅克隆
    2020-11-21
  • 利用nexus作为私库进行代理docker,进行上传和下载镜像操作

    利用nexus作为私库进行代理docker,进行上传和下载镜像操作

    一、nexus的配置 1.创建docker proxy 用于从外网仓库中拉取镜像至本地仓库中。 点击“create Repository”,选择docker(proxy)进行创建 填写参数 点击“create re
    2020-11-21
  • gradle项目中资源文件的相对路径打包技巧必看

    gradle项目中资源文件的相对路径打包技巧必看

    开发java application时,不管是用ant/maven/gradle中的哪种方式来构建,通常最后都会打包成一个可执行的jar包程序,而程序运行所需的一些资源文件(配置文件),比如
    2020-11-21
  • Python如何批量生成和调用变量

    Python如何批量生成和调用变量

    这几天写代码中遇到的一个常见问题,在Python中如何批量的生成一些变量,如生成变量X1, X2, X3,并在后续的方法中调用,完成赋值、取值等操作。这个问题也算是常见的
    2020-11-21
  • 解决android报错:Intel HAXM is required to run this AVD

    解决android报错:Intel HAXM is required to run this AVD

    今天,简单讲解Android 启动模拟器时,提示错误: Intel HAXM is required to run this AVD. VT-x is disabled in BIOS. Enable VT-x in your BIOS security settin
    2020-11-21
  • 解决docker run 或者 docker restart 启动镜像就自动退出

    解决docker run 或者 docker restart 启动镜像就自动退出

    执行命令:docker run --name centos8 -d centos /bin/bash,通过docker ps查看正在运行中容器,找不到centos8。 通过docker ps -a查看发现,centos8容器已经处于停
    2020-11-21
  • Docker容器时区调整操作

    Docker容器时区调整操作

    如何检查Docker容器时区是否与宿主机一致? 1、进入宿主机, 执行以下命令: # 查看宿主机时间 [root@localhost ~]# date 2018年 06月 27日 星期三 22:42:44 CST
    2020-11-21
  • python遍历路径破解表单的示例

    python遍历路径破解表单的示例

    首先是利用python遍历路径,采用字典爆破的形式,当然如果只是单纯的爆破路径,简单写一个多线程脚本就行了。这里考虑如何对爆破到的路径进行第二步利用,此处尝试对
    2020-11-21

最新评论