Exemplo n.º 1
0
        /// <summary>
        /// Creates a canvas
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private async Task <bool> InternalGetCanvas(ObjectId id)
        {
            //Load from the database
            DbCanvas data = await Program.conn.LoadCanvasData(id);

            if (data == null)
            {
                return(false);
            }

            //Set data
            saved_users_index = data.user_index;
            users             = data.users;
            last_edit         = data.last_edited;
            last_editor       = data.last_editor;

            //Load data from disk
            if (File.Exists(GetSavePath()))
            {
                using (FileStream fs = new FileStream(GetSavePath(), FileMode.Open))
                    await fs.CopyToAsync(canvas_data);
            }

            //Set timer
            save_timer.AutoReset = true;
            save_timer.Elapsed  += DoAutosave;
            save_timer.Start();

            return(true);
        }
Exemplo n.º 2
0
 private static RPCPayloadModifyCanvas_ListedCanvas ConvertCanvas(DbCanvas c)
 {
     return(new RPCPayloadModifyCanvas_ListedCanvas
     {
         color = c.color,
         href = Program.connection.config.hosts.master + "/api" + "/servers/" + c.server_id + "/canvas/" + c.id,
         id = c.id,
         name = c.name,
         thumbnail = c.thumbnail_url
     });
 }
        /// <summary>
        /// Loads canvas data
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <DbCanvas> LoadCanvasData(ObjectId id)
        {
            var filterBuilder = Builders <DbCanvas> .Filter;
            var filter        = filterBuilder.Eq("_id", id);
            var result        = await system_canvases.FindAsync(filter);

            DbCanvas c = await result.FirstOrDefaultAsync();

            if (c == null)
            {
                return(null);
            }
            return(c);
        }
Exemplo n.º 4
0
        private static void SendRPCMessage(DbCanvas c, DbServer server, DbUser u, int tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange change)
        {
            //Create message
            RPCPayloadModifyCanvas msg = new RPCPayloadModifyCanvas
            {
                action = change,
                data   = ConvertCanvas(c),
                user   = new RPCPayloadModifyCanvas_ActorUser
                {
                    icon = u.profile_image_url,
                    id   = u.id,
                    name = u.screen_name
                }
            };

            //Send RPC message
            Program.connection.GetRPC().SendRPCMessageToTribe(LibDeltaSystem.RPC.RPCOpcode.CanvasChange, msg, server, tribe_id);
        }
Exemplo n.º 5
0
        public static async Task OnCanvasRequest(Microsoft.AspNetCore.Http.HttpContext e, DbServer s, DbUser u, int tribe_id, string next)
        {
            //Find canvas
            if (!ObjectId.TryParse(next, out ObjectId id))
            {
                throw new StandardError("Canvas Not Found", StandardErrorCode.NotFound);
            }
            DbCanvas c = await Program.connection.LoadCanvasData(id);

            if (c == null)
            {
                throw new StandardError("Canvas Not Found", StandardErrorCode.NotFound);
            }

            //Get request method
            var method = Program.FindRequestMethod(e);

            //Act from the method
            if (method == RequestHttpMethod.get)
            {
                //Write response
                await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c));
            }
            else if (method == RequestHttpMethod.post)
            {
                //Check scope
                await Program.CheckTokenScope(u, null);

                //Rename the canvas; decode request
                CanvasCreateRequest request = Program.DecodePostBody <CanvasCreateRequest>(e);

                //Set
                await c.RenameCanvas(Program.connection, request.name, request.color);

                //Send RPC message
                SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Modify);

                //Write response
                await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c));
            }
            else if (method == RequestHttpMethod.delete)
            {
                //Check scope
                await Program.CheckTokenScope(u, null);

                //Delete canvas
                await c.DeleteCanvas(Program.connection);

                //Send RPC message
                SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Delete);

                //Write response
                await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c));
            }
            else if (method == RequestHttpMethod.put)
            {
                //Check scope
                await Program.CheckTokenScope(u, null);

                //We'll update the thumbnail; Decode the request
                UpdateThumbnailRequest request = Program.DecodePostBody <UpdateThumbnailRequest>(e);

                //Try to find
                DbUserContent uc = await Program.connection.GetUserContentByToken(request.token);

                if (uc == null)
                {
                    throw new StandardError("Token Not Valid", StandardErrorCode.InvalidInput);
                }
                if (uc.application_id != CANVAS_THUMBNAIL_APPLICATION_ID)
                {
                    throw new StandardError("Specified User Content Application ID Mismatch", StandardErrorCode.InvalidInput);
                }

                //Update
                await c.SetNewThumbnail(Program.connection, uc);

                //Send RPC message
                SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Modify);

                //Write response
                await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c));
            }
            else
            {
                throw new StandardError("Unexpected method.", StandardErrorCode.BadMethod);
            }
        }
Exemplo n.º 6
0
        public static async Task OnListRequest(Microsoft.AspNetCore.Http.HttpContext e, DbServer s, DbUser u, int tribe_id)
        {
            //Get request method
            var method = Program.FindRequestMethod(e);

            //If this is a GET, list
            if (method == RequestHttpMethod.get)
            {
                //Find all canvases beloning to this server
                List <DbCanvas> canvases = await s.GetServerCanvases(Program.connection);

                //Now, convert all
                CanvasListResponse response = new CanvasListResponse
                {
                    canvases            = new RPCPayloadModifyCanvas_ListedCanvas[canvases.Count],
                    ws_reconnect_policy = 10000,
                    ws_url = Program.config.endpoint_canvas
                };
                for (int i = 0; i < canvases.Count; i++)
                {
                    response.canvases[i] = ConvertCanvas(canvases[i]);
                }

                //Write response
                await Program.QuickWriteJsonToDoc(e, response);

                return;
            }
            else if (method == RequestHttpMethod.post)
            {
                //Check scope
                await Program.CheckTokenScope(u, null);

                //We'll create a canvas. Decode the body
                CanvasCreateRequest request = Program.DecodePostBody <CanvasCreateRequest>(e);

                //Create
                DbCanvas c = new DbCanvas
                {
                    color       = request.color,
                    last_edited = DateTime.UtcNow,
                    last_editor = u._id,
                    last_saved  = DateTime.UtcNow,
                    name        = request.name,
                    server_id   = s.id,
                    users       = new ObjectId[256],
                    user_index  = 0,
                    version     = 0,
                    _id         = ObjectId.GenerateNewId()
                };

                //Add
                await Program.connection.system_canvases.InsertOneAsync(c);

                //Send RPC message
                SendRPCMessage(c, s, u, tribe_id, RPCPayloadModifyCanvas.RPCPayloadModifyCanvas_CanvasChange.Create);

                //Write response
                await Program.QuickWriteJsonToDoc(e, ConvertCanvas(c));
            }
            else
            {
                throw new StandardError("Unexpected method.", StandardErrorCode.BadMethod);
            }
        }