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

时间:2021-05-20

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章