欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-09-17 14:50:48
im sdk api 概述 /// /// im sdk 初始化。 /// ///

im sdk api 概述

/// <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的资料请关注其它相关文章!