import List "mo:base/List";
import Iter "mo:base/Iter";
import Principal "mo:base/Principal";
import Time "mo:base/Time";
actor {
//作业要求的添加authot字段
public type Message = {
content : Text;
time : Time.Time;
author : Text;
};
var a : Text = "prince";
public type Microblog = actor{
follow: shared(Principal) -> async ();
follows: shared query () -> async [Principal];
post: shared (Text,Text) -> async ();
posts: shared query () -> async [Message];
timeline : shared () -> async [Message];
set_name: shared (Text) -> async ();
get_name: shared query () -> async ?Text;
};
var followed : List.List<Principal> = List.nil();
public shared func follow(id: Principal) : async () {
followed := List.push(id,followed);
};
public shared query func follows() : async [Principal] {
List.toArray(followed)
};
var messages : List.List<Message> = List.nil();
public shared func post(opt : Text , text : Text) : async () {
assert(opt == "123456");
let mesg : Message = {
content = text;
time = Time.now();
author = a ;
};
messages := List.push(mesg, messages);
};
public shared query func posts() : async [Message] {
List.toArray(messages)
};
public shared func timeline() : async [Message] {
var all : List.List<Message> = List.nil();
for(id in Iter.fromList(followed)){
let canister :Microblog = actor(Principal.toText(id));
let msgs = await canister.posts();
for (msg in Iter.fromArray(msgs)){
all := List.push(msg,all);
};
};
List.toArray(all)
};
//作业要求的添加set_name公共方法
public shared func set_name(name : Text){
a := name;
};
//作业要求的添加get_name公共方法
public shared func get_name() : async ?Text{
return ?a;
}
};