Пример #1
0
        /// <summary>
        /// Gets server virtual servers and binds them to this, if not binded already.
        /// </summary>
        private void Bind()
        {
            /* GetVirtualServers Responses:
             +OK <sizeOfData>
             *      <data>
             *
             + ERR <errorText>
             */

            lock (m_pParent){
                // Call TCP GetVirtualServers
                m_pParent.TcpClient.TcpStream.WriteLine("GetVirtualServers");

                string response = m_pParent.ReadLine();
                if (!response.ToUpper().StartsWith("+OK"))
                {
                    throw new Exception(response);
                }

                int          sizeOfData = Convert.ToInt32(response.Split(new char[] { ' ' }, 2)[1]);
                MemoryStream ms         = new MemoryStream();
                m_pParent.TcpClient.TcpStream.ReadFixedCount(ms, sizeOfData);

                // Decompress dataset
                DataSet ds = Utils.DecompressDataSet(ms);

                if (ds.Tables.Contains("Servers"))
                {
                    foreach (DataRow dr in ds.Tables["Servers"].Rows)
                    {
                        m_pVirtualServers.Add(new VirtualServer(
                                                  m_pParent,
                                                  this,
                                                  dr["ID"].ToString(),
                                                  ConvertEx.ToBoolean(dr["Enabled"], true),
                                                  dr["Name"].ToString(),
                                                  dr["API_assembly"].ToString(),
                                                  dr["API_class"].ToString(),
                                                  dr["API_initstring"].ToString()
                                                  ));
                    }
                }
            }
        }
        /// <summary>
        /// Gets server users default folders and binds them to this, if not binded already.
        /// </summary>
        private void Bind()
        {
            /* GetUsersDefaultFolders <virtualServerID>
             *    Responses:
             +OK <sizeOfData>
             *      <data>
             *
             + ERR <errorText>
             */

            lock (m_pVirtualServer.Server.LockSynchronizer){
                // Call TCP GetUsersDefaultFolders
                m_pVirtualServer.Server.TcpClient.TcpStream.WriteLine("GetUsersDefaultFolders " + m_pVirtualServer.VirtualServerID);

                string response = m_pVirtualServer.Server.ReadLine();
                if (!response.ToUpper().StartsWith("+OK"))
                {
                    throw new Exception(response);
                }

                int          sizeOfData = Convert.ToInt32(response.Split(new char[] { ' ' }, 2)[1]);
                MemoryStream ms         = new MemoryStream();
                m_pVirtualServer.Server.TcpClient.TcpStream.ReadFixedCount(ms, sizeOfData);

                // Decompress dataset
                DataSet ds = Utils.DecompressDataSet(ms);

                if (ds.Tables.Contains("UsersDefaultFolders"))
                {
                    foreach (DataRow dr in ds.Tables["UsersDefaultFolders"].Rows)
                    {
                        m_pFolders.Add(new UsersDefaultFolder(
                                           this,
                                           dr["FolderName"].ToString(),
                                           ConvertEx.ToBoolean(dr["Permanent"])
                                           ));
                    }
                }
            }
        }