示例#1
0
文件: IPCast.cs 项目: fflorat/IRAP
        unsafe public static string GetAllSessions(string[] sessions)
        {
            string SessionSids = "SessionSids:0";
            IntPtr pArray      = Marshal.AllocHGlobal(0);
            int    count       = IPCast.GetSessionList(pArray, 0);

            if (count > 0)
            {
                pArray = Marshal.ReAllocHGlobal(pArray, new IntPtr(count * 4));
                int ret = IPCast.GetSessionList(pArray, count);  //获取会话列表

                if (ret > 0)
                {
                    uint *pSid = (uint *)pArray.ToPointer();
                    for (int i = 0; i < ret; i++)
                    {
                        uint sid = pSid[i];
                        SessionSids += sid.ToString();
                        SessionSids += ",";
                        long   size      = Marshal.SizeOf(typeof(IPCast.SessionAttr));
                        IntPtr pSessions = Marshal.AllocHGlobal((int)new IntPtr(size));
                        if (IPCast.GetSessionStatus(sid, pSessions))
                        {
                            IPCast.SessionAttr sessionAttr = (IPCast.SessionAttr)Marshal.PtrToStructure(pSessions, typeof(IPCast.SessionAttr));
                            string             sinfo       = "sid: " + sessionAttr.sid.ToString() + "   name: " + sessionAttr.name + " status: " + sessionAttr.status.ToString() + " type: " + sessionAttr.type.ToString() +
                                                             " Grade: " + sessionAttr.grade.ToString() + " t_play: " + sessionAttr.t_play.ToString() + " t_total: " + sessionAttr.t_total.ToString() + " iFile: " + sessionAttr.iFile.ToString();
                            sessions[i] = sinfo;
                        }
                        Marshal.FreeHGlobal(pSessions);
                    }
                    Marshal.FreeHGlobal(pArray);
                }
            }

            SessionSids.Trim(',');
            return(SessionSids);
        }