Example #1
0
        public void SetMessageData(MessageData data)
        {
            TextBox recipient = (TextBox)this.FindControl("recipient");
            TextBox sender = (TextBox)this.FindControl("sender");
            TextBox subject = (TextBox)this.FindControl("subject");
            TextBox content = (TextBox)this.FindControl("content");
            LiteralControl html_content = (LiteralControl)this.FindControl("html_content");
            PlaceHolder html_content_container = (PlaceHolder)this.FindControl("html_content_container");
            TextBox date = (TextBox)this.FindControl("date");

            recipient.Text = data.strRecipient;
            sender.Text = data.strSender;
            subject.Text = data.strSubject;
            if (data.strMime == "html")
            {
                html_content_container.Visible = true;
                content.Visible = false;

                html_content.Text = data.strBody;
            }
            else
            {
                html_content_container.Visible = false;
                content.Visible = true;

                content.Text = data.strBody;
            }
            date.Text = DateTimeUtil.LocalTime(data.strCreateTime);

            this.RecordID = data.strRecordID;
            this.TimeStamp = data.TimeStamp;
            this.BoxName = data.strBoxType;

            return;
        }
Example #2
0
        // 回复
        // 实际上是刷新窗口内容到适合回复的状态
        void replybutton_Click(object senderparam, EventArgs e)
        {
            TextBox recipient = (TextBox)this.FindControl("recipient");
            TextBox sender = (TextBox)this.FindControl("sender");
            TextBox subject = (TextBox)this.FindControl("subject");
            TextBox content = (TextBox)this.FindControl("content");
            TextBox date = (TextBox)this.FindControl("date");

            string strRecipient = sender.Text;
            string strSender = recipient.Text;
            string strSubject = "回复: " + subject.Text;
            string strContent = sender.Text + ":\r\n你好!"
            + "\r\n\r\n\r\n\r\n> === 以下引用 " + sender.Text + " 于 " + date.Text + " 发送给 " + recipient.Text + " 的内容 ===\r\n" + MakeQuoteContent(content.Text) + "\r\n> ======";

            recipient.Text = strRecipient;
            sender.Text = strSender;
            subject.Text = strSubject;
            content.Text = strContent;

            date.Text = "";

            content.ReadOnly = false;    // 让修改

            this.MessageData = null;
            this.RecordID = null;
            this.TimeStamp = null;
            this.BoxName = null;
        }
Example #3
0
        // 检索获得消息, 或者从结果集中获得消息
        // parameters:
        //      strStyle    search / untouched / touched
        //                  有search表示进行检索和获取,没有search就表示不检索而获取先前检索的结果集。
        //                  untoched和touched应当和search联用。否则只能获取先前的结果数
        public int GetMessage(
            RmsChannelCollection Channels,
            string strResultsetName,
            string strStyle,
            string strUserID,
            string strBoxType,
            MessageLevel messagelevel,
            int nStart,
            int nCount,
            out int nTotalCount,
            out List <MessageData> messages,
            out string strError)
        {
            nTotalCount = 0;
            messages    = new List <MessageData>();
            strError    = "";

            if (String.IsNullOrEmpty(this.MessageDbName) == true)
            {
                strError = "消息库尚未定义";
                return(-1);
            }

            int  nRet = 0;
            long lRet = 0;

            if (String.IsNullOrEmpty(strBoxType) == true)
            {
                strBoxType = MessageCenter.INBOX;
            }

            RmsChannel channel = Channels.GetChannel(this.ServerUrl);

            if (channel == null)
            {
                strError = "get channel error";
                return(-1);
            }


            if (String.IsNullOrEmpty(strResultsetName) == true)
            {
                strResultsetName = "messages_of_" + strBoxType;
            }

            bool bSearch = true;

            if (StringUtil.IsInList("search", strStyle) == true)
            {
                bSearch = true;
            }
            else
            {
                bSearch = false;
            }

            string strQueryStyle = "";

            if (StringUtil.IsInList("touched", strStyle) == true)
            {
                strQueryStyle = "touched";
            }
            else if (StringUtil.IsInList("untouched", strStyle) == true)
            {
                strQueryStyle = "untouched";
            }

            // 检索
            if (bSearch == true)
            {
                string strQueryXml = "";

                // 构造检索式
                nRet = MakeSearchQuery(
                    strUserID,
                    strBoxType,
                    strQueryStyle,
                    out strQueryXml,
                    out strError);
                if (nRet == -1)
                {
                    // text-level: 内部错误
                    strError = "构造检索式出错: " + strError;
                    return(-1);
                }


                lRet = channel.DoSearch(strQueryXml,
                                        strResultsetName,
                                        "", // strOuputStyle
                                        out strError);
                if (lRet == -1)
                {
                    // text-level: 内部错误
                    strError = "检索失败: " + strError;
                    return(-1);
                }

                // not found
                if (lRet == 0)
                {
                    // text-level: 用户提示
                    strError = this.GetString("没有任何消息");  // "没有任何消息"
                    return(0);
                }

                nTotalCount = (int)lRet;
            }


            if (nCount == 0)
            {
                return(nTotalCount);   // 如果不需要获得结果集
            }
            Debug.Assert(nStart >= 0, "");


            // 获得结果集中指定范围的记录路径
            ArrayList aLine = null;

            lRet = channel.DoGetSearchFullResult(
                strResultsetName,
                nStart,
                nCount,
                "zh",
                null,
                out aLine,
                out strError);
            if (lRet == -1)
            {
                // 虽然返回-1,但是aLine中仍然有内容了
                if (aLine == null)
                {
                    // text-level: 内部错误
                    strError = "获取浏览格式失败: " + strError;
                    return(-1);
                }
            }

            // 返回数据
            for (int i = 0; i < aLine.Count; i++)
            {
                string[] cols = null;

                cols = (string[])aLine[i];

                string strPath = cols[0];

                MessageData data = null;

                // TODO: level == none 只返回路径
                nRet = GetMessageByPath(
                    channel,
                    strPath,
                    messagelevel,
                    out data,
                    out strError);
                if (nRet == -1)
                {
                    return(-1);
                }

                messages.Add(data);
            }

            return(aLine.Count);
        }
Example #4
0
        // 从 MSMQ 队列获得若干消息
        // parameters:
        public List<MessageData> GetMessage(int nMaxCount, TimeSpan timeout)
        {
            List<MessageData> results = new List<MessageData>();
            if (nMaxCount == 0)
                return results;
            try
            {
                MessageEnumerator iterator = _queue.GetMessageEnumerator2();
                int i = 0;
                while (iterator.MoveNext(timeout))
                {
                    System.Messaging.Message message = iterator.Current;

                    MessageData record = new MessageData();
                    record.strBody = (string)message.Body;
                    record.strMime = "xml";

                    results.Add(record);
                    // iterator.RemoveCurrent();
                    i++;
                    if (i >= nMaxCount)
                        break;
                }

                return results;
            }
            catch (MessageQueueException ex)
            {
                this.App.WriteErrorLog("GetMessage() 出现异常: " + ExceptionUtil.GetDebugText(ex));
            }
            catch (Exception ex)
            {
                this.App.WriteErrorLog("GetMessage() 出现异常: " + ExceptionUtil.GetDebugText(ex));
            }

            return results;
        }
Example #5
0
        // 根据消息记录路径获得消息
        // 不检查消息是否属于特定用户
        int GetMessageByPath(
            RmsChannel channel,
            string strPath,
            MessageLevel messagelevel,
            out MessageData data,
            out string strError)
        {
            data = new MessageData();

            string strMetaData = "";

            byte[] timestamp     = null;
            string strXml        = "";
            string strOutputPath = "";

            long lRet = channel.GetRes(strPath,
                                       out strXml,
                                       out strMetaData,
                                       out timestamp,
                                       out strOutputPath,
                                       out strError);

            if (lRet == -1)
            {
                // text-level: 内部错误
                strError = "获得消息记录 '" + strPath + "' 时出错: " + strError;
                return(-1);
            }

            XmlDocument dom = new XmlDocument();

            try
            {
                dom.LoadXml(strXml);
            }
            catch (Exception ex)
            {
                // text-level: 内部错误
                strError = "装载XML记录进入DOM时出错: " + ex.Message;
                return(-1);
            }


            data.strSender = DomUtil.GetElementText(dom.DocumentElement,
                                                    "sender");
            data.strRecipient = DomUtil.GetElementText(dom.DocumentElement,
                                                       "recipient");
            data.strSubject = DomUtil.GetElementText(dom.DocumentElement,
                                                     "subject");
            data.strCreateTime = DomUtil.GetElementText(dom.DocumentElement,
                                                        "date");
            data.strMime = DomUtil.GetElementText(dom.DocumentElement,
                                                  "mime");

            data.strSize = DomUtil.GetElementText(dom.DocumentElement,
                                                  "size");

            string strTouched = DomUtil.GetElementText(dom.DocumentElement,
                                                       "touched");

            if (strTouched == "1")
            {
                data.Touched = true;
            }
            else
            {
                data.Touched = false;
            }

            data.strRecordID = ResPath.GetRecordId(strOutputPath);

            if (messagelevel == MessageLevel.Full)
            {
                data.strBody = DomUtil.GetElementText(dom.DocumentElement,
                                                      "content");
            }

            data.strUserName = DomUtil.GetElementText(dom.DocumentElement,
                                                      "username");

            // 恒定为中文名称
            data.strBoxType = DomUtil.GetElementText(dom.DocumentElement,
                                                     "box");

            data.TimeStamp = timestamp;

            // 修改touched元素值
            if (messagelevel == MessageLevel.Full &&
                data.Touched == false)
            {
                DomUtil.SetElementText(dom.DocumentElement,
                                       "touched", "1");

                byte[] output_timestamp = null;
                //string strOutputPath = "";

                lRet = channel.DoSaveTextRes(strPath,
                                             dom.OuterXml,
                                             false,
                                             "content,ignorechecktimestamp",
                                             timestamp,
                                             out output_timestamp,
                                             out strOutputPath,
                                             out strError);
                if (lRet == -1)
                {
                    // text-level: 内部错误
                    strError = "写回记录 '" + strPath + "' 时出错: " + strError;
                    return(-1);
                }
                data.Touched   = true;
                data.TimeStamp = output_timestamp;
            }

            return(1);
        }
Example #6
0
        // 删除一个box中的全部消息
        public int DeleteMessage(
            RmsChannelCollection Channels,
            string strUserID,
            bool bMoveToRecycleBin,
            string strBoxType,
            out string strError)
        {
            strError = "";

            int nStart      = 0;
            int nCount      = -1;
            int nTotalCount = 0;

            for (; ;)
            {
                List <MessageData> messages = null;

                int nRet = GetMessage(
                    Channels,
                    "message_deleteall",
                    nStart == 0 ? "search" : "",
                    strUserID,
                    strBoxType,
                    MessageLevel.ID,
                    nStart,
                    nCount,
                    out nTotalCount,
                    out messages,
                    out strError);
                if (nRet == -1)
                {
                    return(-1);
                }

                if (nCount == -1)
                {
                    nCount = nTotalCount - nStart;
                }

                for (int j = 0; j < messages.Count; j++)
                {
                    MessageData data = messages[j];

                    nRet = DeleteMessage(
                        bMoveToRecycleBin,
                        Channels,
                        data.strRecordID,
                        data.TimeStamp,
                        out strError);
                    if (nRet == -1)
                    {
                        return(-1);
                    }
                }


                nStart += messages.Count;
                nCount -= messages.Count;

                if (nStart >= nTotalCount)
                {
                    break;
                }
                if (nCount <= 0)
                {
                    break;
                }
            }


            return(nTotalCount);
        }
Example #7
0
        // 根据消息记录路径获得消息
        // 不检查消息是否属于特定用户
        int GetMessageByPath(
            RmsChannel channel,
            string strPath,
            MessageLevel messagelevel,
            out MessageData data,
            out string strError)
        {
            data = new MessageData();

            string strMetaData = "";
            byte[] timestamp = null;
            string strXml = "";
            string strOutputPath = "";

            long lRet = channel.GetRes(strPath,
                out strXml,
                out strMetaData,
                out timestamp,
                out strOutputPath,
                out strError);
            if (lRet == -1)
            {
                // text-level: 内部错误
                strError = "获得消息记录 '" + strPath + "' 时出错: " + strError;
                return -1;
            }

            XmlDocument dom = new XmlDocument();
            try
            {
                dom.LoadXml(strXml);
            }
            catch (Exception ex)
            {
                // text-level: 内部错误
                strError = "装载XML记录进入DOM时出错: " + ex.Message;
                return -1;
            }


            data.strSender = DomUtil.GetElementText(dom.DocumentElement,
                "sender");
            data.strRecipient = DomUtil.GetElementText(dom.DocumentElement,
                "recipient");
            data.strSubject = DomUtil.GetElementText(dom.DocumentElement,
                "subject");
            data.strCreateTime = DomUtil.GetElementText(dom.DocumentElement,
                "date");
            data.strMime = DomUtil.GetElementText(dom.DocumentElement,
                "mime");

            data.strSize = DomUtil.GetElementText(dom.DocumentElement,
                "size");

            string strTouched = DomUtil.GetElementText(dom.DocumentElement,
                "touched");
            if (strTouched == "1")
                data.Touched = true;
            else
                data.Touched = false;

            data.strRecordID = ResPath.GetRecordId(strOutputPath);

            if (messagelevel == MessageLevel.Full)
            {
                data.strBody = DomUtil.GetElementText(dom.DocumentElement,
                    "content");
            }

            data.strUserName = DomUtil.GetElementText(dom.DocumentElement,
                "username");

            // 恒定为中文名称
            data.strBoxType = DomUtil.GetElementText(dom.DocumentElement,
                "box");

            data.TimeStamp = timestamp;

            // 修改touched元素值
            if (messagelevel == MessageLevel.Full
                && data.Touched == false)
            {
                DomUtil.SetElementText(dom.DocumentElement,
                    "touched", "1");

                byte[] output_timestamp = null;
                //string strOutputPath = "";

                lRet = channel.DoSaveTextRes(strPath,
                    dom.OuterXml,
                    false,
                    "content,ignorechecktimestamp",
                    timestamp,
                    out output_timestamp,
                    out strOutputPath,
                    out strError);
                if (lRet == -1)
                {
                    // text-level: 内部错误
                    strError = "写回记录 '"+strPath+"' 时出错: " + strError;
                    return -1;
                }
                data.Touched = true;
                data.TimeStamp = output_timestamp;

            }

            return 1;
        }
Example #8
0
        // 根据消息记录id获得消息详细内容
        // 本函数还将检查消息是否属于strUserID指明的用户
        // parameters:
        //      strUserID   如果==null,表示不检查消息属于何用户
        public int GetMessage(
            RmsChannelCollection Channels,
            string strUserID,
            string strMessageID,
            MessageLevel messagelevel,
            out MessageData message,
            out string strError)
        {
            strError = "";
            message = null;

            int nRet = 0;

            RmsChannel channel = Channels.GetChannel(this.ServerUrl);
            if (channel == null)
            {
                strError = "get channel error";
                return -1;
            }

            string strPath = this.MessageDbName + "/" + strMessageID;

            nRet = GetMessageByPath(
                channel,
                strPath,
                messagelevel,
                out message,
                out strError);
            if (nRet == -1)
                return -1;

            if (strUserID != null && message.strUserName != strUserID)
            {
                // text-level: 用户提示
                strError = string.Format(this.GetString("此条消息不属于用户s, 不允许察看"),  // "此条消息不属于用户 '{0}', 不允许察看。"
                    strUserID);
                    // "此条消息不属于用户 '" +strUserID+ "', 不允许察看。";
                return -1;
            }

            return 1;
        }
Example #9
0
        public MessageData(MessageData origin)
        {
            this.strUserName = origin.strUserName;
            this.strBoxType = origin.strBoxType;

            this.strSender = origin.strSender;
            this.strRecipient = origin.strRecipient;
            this.strSubject = origin.strSubject;
            this.strMime = origin.strMime;
            this.strBody = origin.strBody;
            this.strCreateTime = origin.strCreateTime;
            this.strSize = origin.strSize;
            this.Touched = origin.Touched;

            this.strRecordID = origin.strRecordID;
            this.TimeStamp = origin.TimeStamp;
        }