使用Motoko实现极简的微博功能

微服务架构
本文介绍了一种基于微服务架构的实现方案,通过定义消息结构和微服务接口,实现了关注者模式的消息发布与订阅功能。该方案利用了多种核心组件,如时间处理、数据类型定义等,确保了系统的实时性和交互性。
import Iter "mo:base/Iter";
import List "mo:base/List";
import Microblog "mo:base/Principal";
import Principal "mo:base/Principal";
import Time "mo:base/Time";
actor {
    public type Message = {
        content : Text;
        time : Time.Time;
    };
    public type Microblog = actor {
        follow: shared(Principal) -> async ();
        follows: shared query () -> async [Principal];
        post: shared (Text) -> async ();
        posts: shared query (Int) -> async [Message];
        timeline: shared () -> async [Message];
    };
    var followed : List.List<Principal> = List.nil(); 
    public shared (msg) func follow(id : Principal) : async (){
        assert(Principal.toText(msg.caller)) == "lxqqh-pfclr-ev666-y7a6n-cvncl-llt3i-z44db-esxqj-vxbfm-5cs4o-gqe";
        followed := List.push(id,followed);
    };
    public shared query func follows() : async [Principal]{
        List.toArray(followed)
    };
    var messages : List.List<Message> = List.nil();
    public shared (msg) func post(text : Text) : async () {
        let message : Message = { content=text; time = Time.now()};
        assert(Principal.toText(msg.caller)) == "lxqqh-pfclr-ev666-y7a6n-cvncl-llt3i-z44db-esxqj-vxbfm-5cs4o-gqe";
        messages := List.push(message, messages)
    };
    public shared query func posts(since: Time.Time) : async [Message]{
        var res : List.List<Message> = List.nil();
        for(msg in Iter.fromList(messages)){
            if(msg.time > since){
                res := List.push(msg, res);
            };
        };
        List.toArray(res)
    };

    public shared (msg) func timeline(since: Time.Time) : async [Message] {
        assert(Principal.toText(msg.caller)) == "lxqqh-pfclr-ev666-y7a6n-cvncl-llt3i-z44db-esxqj-vxbfm-5cs4o-gqe";
        var msgs : List.List<Message> = List.nil();
        for (id in Iter.fromList(followed)) {
            let canister : Microblog = actor(Principal.toText(id));
            let ms = await canister.posts(since);
            for (msg in Iter.fromArray(ms)) {
                msgs := List.push(msg, msgs);
            }
        };
        List.toArray(msgs);
    };
};

本资源为黑龙江省 2023 年水系分布数据,涵盖河流、沟渠、支流等线状要素,以及湖泊、水库、湿地等面状水体,提供完整的二维水文地理框架。数据以标准 GIS 格式发布,包含可编辑 MXD 工程文件、Shapefile 数据以及标准制图 TIF,适用于科研、规划设计、生态评估与地图制图等多类应用场景。 【数据内容】 1、水系线状要素(.shp) 包括主要河流、支流、人工渠道等 属性字段涵盖:名称、类别等 线要素拓扑规范,无断裂与悬挂节点 2、水体面状要素(.shp) 覆盖湖泊、水库、池塘、湿地等面状水体 属性包含:名称、类型等信息 几何边界经过平滑与精修,保证面积统计可靠 3、可编辑 MXD 工程文件(.mxd) 预设图层渲染、图例、比例尺、指北针与布局 支持用户根据自身制图需求快速调整样式、色带及标注规则 博主使用的 ArcMap 10.8 环境 4、标准成图 TIF(.tif) 专业级地图输出,含必要图廓与标注,可直接用于报告、论文与展示 输出分辨率高,适合印刷与电子稿应用 【数据技术说明】 坐标系统:WGS 84 地理坐标系 数据年份:2023 年 制作流程:基于卫星影像、水利普查数据和地理编码信息进行提取 → 几何校正 → 拓扑审查 → 分类整理 → 成图渲染 质量控制措施:保证线状与面状水体不重叠、不缺失;对水库与湖泊边界进行了人工校核,提高空间精度 【应用价值】 地表水资源调查与监测,水利、水文模型的空间输入,城市与农村规划中的水系布局分析,生态修复、水环境治理与湿地保护研究,教学、制图与地理信息可视化应用 【使用说明】 首次打开 MXD 文件前,请确保 Shapefile 和栅格文件均已解压至同一目录,以免出现路径丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值