zoukankan      html  css  js  c++  java
  • imos学习笔记二 用户登录c#

    用户登录
    1 初始化sdk
    2 加密密码
    3 登录
    4 定阅推送功能
    5 注册推送信息处理的回调函数
    6 用户注销
      /// <summary>
            /// 多用户登录方法
            /// </summary>
            /// <param name="usrLoginName">用户名</param>
            /// <param name="usrLoginPsw">密码</param>
            /// <param name="srvIpAddr">服务器的ip</param>
            /// <param name="cltIpAddr">用户所在客户端的ip</param>
            /// <returns>用户登录代出信息</returns>
            public LOGIN_INFO_S LoginMethod(String usrLoginName, String usrLoginPsw, String srvIpAddr, String cltIpAddr)
            {
                UInt32 ulRet = 0;
                uint srvPort = 8800;


                //1.初始化
                ulRet = IMOSSDK.IMOS_Initiate("N/A", srvPort, 1, 1);
                if (0 != ulRet)
                {
                    MessageBox.Show("初始化失败!" + ulRet.ToString());
                }


                //2.加密密码
                //分配加密后的数据缓存(非托管内存中分配,需要手动释放)
                IntPtr ptr_MD_Pwd = Marshal.AllocHGlobal(sizeof(char) * IMOSSDK.IMOS_PASSWD_ENCRYPT_LEN);
                ulRet = IMOSSDK.IMOS_Encrypt(usrLoginPsw, (UInt32)usrLoginPsw.Length, ptr_MD_Pwd);


                if (0 != ulRet)
                {
                    MessageBox.Show("加密密码失败!" + ulRet.ToString());
                    Application.Exit();//退出应用
                }
                //把字符串指针变为c#的string
                String MD_PWD = Marshal.PtrToStringAnsi(ptr_MD_Pwd);
                //释放分配内存
                Marshal.FreeHGlobal(ptr_MD_Pwd);


                //3.登录方法 IMOS_Login(只支持一个用户登录)
                IntPtr ptrLoginInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(LOGIN_INFO_S)));
                //多用户登录
                ulRet = IMOSSDK.IMOS_LoginEx(usrLoginName, //用户名
                    MD_PWD,//密码
                    srvIpAddr,//服务器的ip
                    cltIpAddr,//用户所在客户端的ip
                    ptrLoginInfo);//用户登录代出信息
                if (0 != ulRet)
                {
                    MessageBox.Show("IMOS_Login" + ulRet.ToString());
                    Application.Exit();
                }
                //序列化操作,将数据从非托管内存封送到指定托管对象
                stLoginInfo = (LOGIN_INFO_S)Marshal.PtrToStructure(ptrLoginInfo, typeof(LOGIN_INFO_S));
                //释放内存
                Marshal.FreeHGlobal(ptrLoginInfo);


                return stLoginInfo;
            }


    //4 订阅推送
                ulResult = IMOSSDK.IMOS_SubscribePushInfo(ref stLoginInfo, //用户标识
                    (uint)SUBSCRIBE_PUSH_TYPE_E.SUBSCRIBE_PUSH_TYPE_ALL);//订阅类型
    //5 注册回调
                ulResult = IMOSSDK.IMOS_RegCallBackPrcFunc(ref stLoginInfo,//用户标识
                    ptrCB);//回调处理函数指针



    //6 用户注销
    IMOSSDK.IMOS_LogoutEx(ref stLoginInfo.stUserLoginIDInfo);


    用户登录/注销所调用的sdk方法



        /// <summary>
            /// 对外初始化sdk
            /// </summary>
            /// <param name="strServerIP">服务器地址</param>
            /// <param name="ulServerPort">服务器端口</param>
            /// <param name="bUIFlag">sdk在UI侧的启动标记</param>
            /// <param name="bXPFlag">是否包含有xp的标记</param>
            /// <returns></returns>
            [DllImport("imos_sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern UInt32 IMOS_Initiate(String strServerIP, UInt32 ulServerPort, UInt32 bUIFlag, UInt32 bXPFlag);
    2
    /// <summary>
            /// 加密密码
            /// </summary>
            /// <param name="strInput">密码</param>
            /// <param name="ulInLen">密码长度</param>
            /// <param name="ptrOutput">加密后的数据缓存</param>
            /// <returns></returns>
            [DllImport("imos_sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern UInt32 IMOS_Encrypt(String strInput, UInt32 ulInLen, IntPtr ptrOutput);




    3
          /// <summary>
            /// 多用户登录
            /// </summary>
            /// <param name="strUserLoginName">用户名</param>
            /// <param name="strPassword">密码</param>
            /// <param name="srvIpAddr">服务器ip</param>
            /// <param name="cltIpAddr">客户端ip</param>
            /// <param name="ptrSDKLoginInfo">用户登录代出信息</param>
            /// <returns></returns>
            [DllImport("imos_sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern UInt32 IMOS_LoginEx(String strUserLoginName, String strPassword, String srvIpAddr, String cltIpAddr, IntPtr ptrSDKLoginInfo);


    4
    /// <summary>
            /// 完成订阅推送功能
            /// </summary>
            /// <param name="stUserLoginIDInfo">登入信息</param>
            /// <param name="ulSubscribePushType">订阅类型</param>
            /// <returns></returns>
            [DllImport("imos_sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern UInt32 IMOS_SubscribePushInfo(ref USER_LOGIN_ID_INFO_S stUserLoginIDInfo, UInt32 ulSubscribePushType);




    5
            /// <summary>
            /// 注册推送信息处理的回调函数
            /// </summary>
            /// <param name="pstUserLoginIDInfo">登入信息</param>
            /// <param name="ptrCallBack">回调处理函数指针</param>
            /// <returns></returns>
            [DllImport("imos_sdk.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
            public static extern UInt32 IMOS_RegCallBackPrcFunc(ref USER_LOGIN_ID_INFO_S stUserLoginIDInfo, IntPtr pfnCallBackProc);




    6 //用户退出
    IMOS_EXPORT VOID STDCALL IMOS_LogoutEx ( IN USER_LOGIN_ID_INFO_S *  pstUserLogIDInfo  )   //用户信息标识




    所用到结构体
        /// <summary>
        /// 用户登录信息结构体
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        public struct LOGIN_INFO_S
        {
            /** 用户登录ID信息 */
            public USER_LOGIN_ID_INFO_S stUserLoginIDInfo;


            /** 用户所属组织编码 */
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = IMOSSDK.IMOS_DOMAIN_CODE_LEN)]
            public byte[] szOrgCode;


            /** 用户所属域名称 */
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = IMOSSDK.IMOS_NAME_LEN)]
            public byte[] szDomainName;


            /** 用户所属域类型, 取值为#MM_DOMAIN_SUBTYPE_LOCAL_PHYSICAL和#MM_DOMAIN_SUBTYPE_LOCAL_VIRTUAL */
            public UInt32 ulDomainType;

        }


    /// <summary>
        /// 用户登录ID信息结构
        /// </summary>
        [StructLayout(LayoutKind.Sequential)]
        public struct USER_LOGIN_ID_INFO_S
        {
            /** 用户编码 */
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = IMOSSDK.IMOS_USER_CODE_LEN)]
            public byte[] szUserCode;


            /** 用户登录ID,是用户登录后服务器分配的,它是标记一次用户登录的唯一标识 */
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = IMOSSDK.IMOS_RES_CODE_LEN)]
            public byte[] szUserLoginCode;


            /** 用户登录的客户端IP地址 */
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = IMOSSDK.IMOS_IPADDR_LEN)]
            public byte[] szUserIpAddress;
        }



  • 相关阅读:
    iOS-数据存储的常用方式
    Bullet 学习笔记之 Bullet User Manual
    Bullet 学习笔记之 Bullet User Manual
    Bullet 学习笔记之 Bullet User Manual
    Bullet 学习笔记之 CollisionShape 和 CollisionObject
    Bullet Basic Example 示例
    Bullet 学习笔记
    Gazebo 机器人仿真流程之 World 类(二)
    Gazebo 机器人仿真流程之 WorldPrivate 类
    Gazebo 机器人仿真流程之 World 类
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194223.html
Copyright © 2011-2022 走看看