美文网首页
作业5-motoko源码

作业5-motoko源码

作者: 平生无涯 | 来源:发表于2022-01-21 15:54 被阅读0次
    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;
            author: Text;
        };
        public type Follow_info = {
            name : ?Text;
            cid : Text;
        };
        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];
            set_name: shared (Text) -> async ();
            get_name: shared query () -> async ?Text;
            visit_count: shared () -> async (); 
            get_visit_time: shared query () -> async Int;
            someone_posts: shared (Text) -> async [Message];
            get_follow_infos: shared () -> async [Follow_info];
            update_follow_infos: shared () -> async ();
            reset_follows: shared () -> async ();
            follow_by_text: shared (Text) -> async ();
        };
        stable var follow_infos :  List.List<Follow_info> = List.nil();
        stable var followed : List.List<Principal> = List.nil(); 
        stable var name : Text = "nil";
        stable var visit_time : Int = 0;
        public shared func visit_count() : async (){
            visit_time := visit_time + 1;
        };
        public shared query func get_visit_time() : async Int{
            visit_time
        };
        public shared (msg) func set_name(text : Text) : async () {
            name := text;
        };
        public shared query func get_name() : async Text{
            name
        };
    
        public shared func get_follow_infos() : async [Follow_info]{      
            List.toArray(follow_infos);
        };
    
        public shared func update_follow_infos() : async (){
            follow_infos := List.nil();
            for (id in Iter.fromList(followed)) {
                let canister : Microblog = actor(Principal.toText(id));
                let ms = await canister.get_name();
                let info : Follow_info = {name=ms;cid=Principal.toText(id)};
                follow_infos := List.push(info,follow_infos);
            };
        };
    
        public shared func follow(id : Principal) : async (){
            var unfollowed = true;
            for(p in Iter.fromList(followed)){
                if(p.equal(id)){
                    unfollowed = false;
                }
            }
            if(unfollowed){
                followed := List.push(id,followed);
                await update_follow_infos();
            }
        };
    
        public shared func follow_by_text(cid : Text) : async (){
            let id : Principal = Principal.fromText(cid);
            var unfollowed = true;
            for(p in Iter.fromList(followed)){
                if(p.equal(id)){
                    unfollowed = false;
                }
            }
            if(unfollowed){
                followed := List.push(id,followed);
                await update_follow_infos();
            }
        };
    
        public shared func reset_follows() : async (){
            followed := List.nil();
        };
    
        public shared query func follows() : async [Principal]{
            List.toArray(followed)
        };
    
        stable var messages : List.List<Message> = List.nil();
        public shared (msg) func post(text : Text) : async () {
            let message : Message = { content=text; time = Time.now(); author = name};
            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] {
            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);
        };
    
        public shared func someone_posts(cid: Text) : async [Message]{
            let canister : Microblog = actor(cid);
            let ms = await canister.posts(0);
            ms;
        }
    };
    
    
    

    相关文章

      网友评论

          本文标题:作业5-motoko源码

          本文链接:https://www.haomeiwen.com/subject/jjwehrtx.html