Beispiel #1
0
        private static void Track(HttpContext context)
        {
            string strDocId    = context.Request["DocId"];
            string strFileName = DBStore.GetDocName(strDocId);
            string strBody     = "";
            string strStatus   = "0";

            try
            {
                using (var receiveStream = context.Request.InputStream)
                {
                    using (var readStream = new StreamReader(receiveStream))
                    {
                        strBody = readStream.ReadToEnd();
                    }
                }

                DBStore.AddStatus(strDocId, "WebEditor.Track", strBody);
            }
            catch (Exception e)
            {
                throw new HttpException((int)HttpStatusCode.BadRequest, e.Message);
            }

            if (string.IsNullOrEmpty(strBody))
            {
                return;
            }

            JavaScriptSerializer        jss         = new JavaScriptSerializer();
            Dictionary <string, object> dicResponse = jss.Deserialize <Dictionary <string, object> >(strBody);

            string        strDocKey          = "";
            int           intStatusVal       = 0;
            TrackerStatus enumStatus         = TrackerStatus.NotFound;
            string        strFileDownloadUrl = "";
            string        strUser            = "";

            if (dicResponse.ContainsKey("key"))
            {
                strDocKey = dicResponse["key"].ToString();
            }

            if (dicResponse.ContainsKey("status"))
            {
                intStatusVal = Convert.ToInt32(dicResponse["status"]);
                enumStatus   = (TrackerStatus)intStatusVal;
            }

            if (dicResponse.ContainsKey("url"))
            {
                strFileDownloadUrl = dicResponse["url"].ToString();
            }

            if (dicResponse.ContainsKey("users"))
            {
                strUser = (dicResponse["users"] as ArrayList)[0].ToString();
            }

            DBStore.UpdateDocStatus(strDocId, "", "WebEditor.Track: " + enumStatus + " : " + intStatusVal.ToString());
            DBStore.AddStatus(strDocId, "strDocKey", strDocKey);
            DBStore.AddStatus(strDocId, "strUser", strUser);
            DBStore.AddStatus(strDocId, "strFileDownloadUrl", strFileDownloadUrl);

            switch (enumStatus)
            {
            case TrackerStatus.MustSave:
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strFileDownloadUrl);

                try
                {
                    var storagePath = Sample.StoragePath(strFileName);

                    if (DBStore.GetDocStatus(strDocId) == "OkClicked" ||
                        DBStore.GetDocStatus(strDocId) == "EDITOR_CLOSED")
                    {
                        //--- This is the document stream sent from Document Service
                        using (var stream = req.GetResponse().GetResponseStream())
                        {
                            if (stream == null)
                            {
                                throw new Exception("stream is null");
                            }
                            const int bufferSize = 4096;

                            using (var fs = File.Open(storagePath, FileMode.Create))
                            {
                                var buffer = new byte[bufferSize];
                                int readed;
                                while ((readed = stream.Read(buffer, 0, bufferSize)) != 0)
                                {
                                    fs.Write(buffer, 0, readed);
                                }
                            }
                        }

                        DBStore.UpdateDocStatus(strDocId, enumStatus.ToString(), "WebEditor.Track: Saved Path: " + storagePath);

                        DBStore.AddStatus(strDocId, "Command Service", "Start");
                        string strRes = ServiceConverter.GetCommandService("drop", strDocKey, "", (new List <string>()
                        {
                            strUser
                        }));
                        DBStore.AddStatus(strDocId, "Command Service", strRes);
                    }
                    else
                    {
                        DBStore.UpdateDocStatus(strDocId, enumStatus.ToString(), "WebEditor.Track: NOT SAVED");
                    }
                }
                catch (Exception ex)
                {
                    DBStore.AddStatus(strDocId, "Exception", ex.ToString());
                }

                break;

            case TrackerStatus.Corrupted:
            case TrackerStatus.ForceSave:
            case TrackerStatus.Closed:
                break;

            case TrackerStatus.Editing:
                //--- Check User and Key combination and set the status of document
                strStatus = "0";
                break;
            }

            context.Response.Write("{\"error\":" + strStatus + "}");
        }