Beispiel #1
0
        public void TestHandleImageAttachmentSaved()
        {
            List <UserGroup> groups = new List <UserGroup>();

            groups.Add(new UserGroup {
                creator_id = "id1", group_id = "gid1", name = "group1", description = "none"
            });

            ImageAttachmentEventArgs args = new ImageAttachmentEventArgs
            {
                Attachment = new Attachment
                {
                    title     = "title1",
                    mime_type = "image/jpeg",
                    type      = AttachmentType.image,
                    RawData   = new ArraySegment <byte>(imageRawData),
                    object_id = object_id1,
                    file_name = "orig_file.jpeg"
                },
                Meta             = ImageMeta.Origin,
                UserApiKey       = "key1",
                UserSessionToken = "token1",
                Driver           = new Driver {
                    email = "*****@*****.**", folder = "resource", groups = groups, session_token = "session_token1", user_id = "id1"
                }
            };

            ImagePostProcessing post = new ImagePostProcessing();

            post.HandleImageAttachmentSaved(this, args);

            //save
            Attachment doc = mongodb.GetDatabase("wammer").
                             GetCollection <Attachment>("attachments").FindOne(
                new QueryDocument("_id", args.Attachment.object_id));

            Assert.AreEqual(1024, doc.image_meta.width);
            Assert.AreEqual(768, doc.image_meta.height);
            Assert.AreEqual("orig_title", doc.title);

            Assert.AreEqual("/v2/attachments/view/?object_id=" + object_id1 + "&image_meta=medium",
                            doc.image_meta.medium.url);
            Assert.AreEqual(512, doc.image_meta.medium.width);
            Assert.AreEqual(384, doc.image_meta.medium.height);
            Assert.AreEqual("image/jpeg", doc.image_meta.medium.mime_type);
            Assert.AreEqual(object_id1 + "_medium.jpeg", doc.image_meta.medium.saved_file_name);
            Assert.AreEqual(args.Attachment.file_name, doc.image_meta.medium.file_name);
            Assert.IsTrue(doc.image_meta.medium.file_size > 0);
            Assert.IsTrue(doc.image_meta.medium.modify_time - DateTime.UtcNow < TimeSpan.FromSeconds(10));
        }
        protected override void OnStart(string[] args)
        {
            try
            {
                logger.Info("============== Starting Waveface Station =================");
                ConfigThreadPool();

                AppDomain.CurrentDomain.UnhandledException +=
                    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

                Environment.CurrentDirectory = Path.GetDirectoryName(
                    Assembly.GetExecutingAssembly().Location);

                logger.Debug("Initialize Waveface Service");
                InitStationId();
                InitResourceBasePath();

                fastJSON.JSON.Instance.UseUTCDateTime = true;

                functionServer = new HttpServer(9981);                 // TODO: remove hard code
                stationTimer   = new StationTimer(functionServer);

                logger.Debug("Add cloud forwarders to function server");
                BypassHttpHandler cloudForwarder = new BypassHttpHandler(CloudServer.BaseUrl);
                cloudForwarder.AddExceptPrefix("/" + CloudServer.DEF_BASE_PATH + "/auth/");
                cloudForwarder.AddExceptPrefix("/" + CloudServer.DEF_BASE_PATH + "/users/");
                cloudForwarder.AddExceptPrefix("/" + CloudServer.DEF_BASE_PATH + "/groups/");
                cloudForwarder.AddExceptPrefix("/" + CloudServer.DEF_BASE_PATH + "/stations/");
                functionServer.AddDefaultHandler(cloudForwarder);

                logger.Debug("Add handlers to function server");
                functionServer.AddHandler("/", new DummyHandler());
                functionServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/attachments/view/",
                                          new AttachmentViewHandler(stationId));

                AttachmentUploadHandler attachmentHandler = new AttachmentUploadHandler();
                AttachmentUploadMonitor attachmentMonitor = new AttachmentUploadMonitor();
                ImagePostProcessing     imgProc           = new ImagePostProcessing();
                imgProc.ThumbnailUpstreamed += attachmentMonitor.OnThumbnailUpstreamed;

                attachmentHandler.ImageAttachmentSaved     += imgProc.HandleImageAttachmentSaved;
                attachmentHandler.ImageAttachmentCompleted += imgProc.HandleImageAttachmentCompleted;
                attachmentHandler.ThumbnailUpstreamed      += attachmentMonitor.OnThumbnailUpstreamed;


                CloudStorageSync cloudSync = new CloudStorageSync();
                attachmentHandler.AttachmentSaved  += cloudSync.HandleAttachmentSaved;
                attachmentHandler.ProcessSucceeded += attachmentMonitor.OnProcessSucceeded;

                functionServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/attachments/upload/",
                                          attachmentHandler);

                functionServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/resourceDir/get/",
                                          new ResouceDirGetHandler(resourceBasePath));

                functionServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/resourceDir/set/",
                                          new ResouceDirSetHandler());

                functionServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/attachments/get/",
                                          new AttachmentGetHandler());



                functionServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/availability/ping/",
                                          new PingHandler());

                //if (Wammer.Utility.AutoRun.Exists("WavefaceStation"))
                //{
                logger.Debug("Start function server");
                functionServer.Start();
                stationTimer.Start();
                //}

                logger.Debug("Add handlers to management server");
                managementServer = new HttpServer(9989);
                AddDriverHandler addDriverHandler = new AddDriverHandler(stationId, resourceBasePath);
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/online/", new StationOnlineHandler(functionServer, stationTimer));
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/offline/", new StationOfflineHandler(functionServer, stationTimer));
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/drivers/add/", addDriverHandler);
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/drivers/list/", new ListDriverHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/drivers/remove/", new RemoveOwnerHandler(stationId));
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/station/status/get/", new StatusGetHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/cloudstorage/list", new ListCloudStorageHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/cloudstorage/dropbox/oauth/", new DropBoxOAuthHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/cloudstorage/dropbox/connect/", new DropBoxConnectHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/cloudstorage/dropbox/update/", new DropBoxUpdateHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/cloudstorage/dropbox/disconnect/", new DropboxDisconnectHandler());
                managementServer.AddHandler("/" + CloudServer.DEF_BASE_PATH + "/availability/ping/", new PingHandler());

                addDriverHandler.DriverAdded += new EventHandler <DriverAddedEvtArgs>(addDriverHandler_DriverAdded);
                logger.Debug("Start management server");
                managementServer.Start();

                logger.Info("Waveface station is started");
            }
            catch (Exception ex)
            {
                logger.Error("Unknown exception", ex);
                throw;
            }
        }