Example #1
0
        static void Main(string[] args)
        {
            Console.WriteLine("**** 演示 Demo.Phenix.Client.Security.Identity 的 Myself RootTeams 功能 ****");
            Console.WriteLine();
            Console.WriteLine("程序集 Phenix.Client 是 Phenix.Services.Host 的客户端类库。");
            Console.WriteLine("本 Demo 演示了用户通过 Phenix.Client.HttpClient 注册并登录成功后如何通过其 Identity 属性管理自己团队的组织架构。");
            Console.WriteLine();

            Console.WriteLine("在接下来的演示之前,请启动 Phenix.Services.Host 程序,并保证其正确连接到你的测试库。");
            Console.WriteLine("数据库连接配置信息,存放在 Phenix.Services.Host 程序所在目录 SQLite 库 Phenix.Core.db 文件的 PH7_Database 表中,配置方法见其示例记录的 Remark 字段内容。");
            Console.WriteLine("当注册用户、登录和操作组织架构时,Host 会唤起 Phenix.Services.Plugin(扩展插件)的 XXXProxy、XXXGrain 相关函数,你可以将程序集附加到执行中的 Phenix.Services.Host 程序, 设置断点观察调用过程。");
            Console.Write("准备好之后,请按任意键继续");
            Console.ReadKey();
            Console.WriteLine();
            Console.WriteLine();

            Phenix.Client.HttpClient httpClient = Phenix.Client.HttpClient.New(new Uri("http://localhost.:5000"));
            Console.WriteLine("构造一个 Phenix.Client.HttpClient 对象用于访问‘{0}’服务端。", httpClient.BaseAddress);
            string userName = "******" + Guid.NewGuid().ToString();

            Console.WriteLine("登记/注册用户:{0}", userName);
            Console.WriteLine(httpClient.CheckInAsync(userName).Result);
            while (true)
            {
                try
                {
                    Console.Write("请依照以上提示,输入找到的动态口令/登录口令,完成后按回车确认:");
                    string password = Console.ReadLine() ?? String.Empty;
                    Phenix.Client.Security.Identity identity = httpClient.LogonAsync(userName, password.Trim()).Result;
                    Console.WriteLine("登录成功:{0}", identity.IsAuthenticated ? "ok" : "error");
                    break;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("登录失败,需重试:{0}", Phenix.Core.AppRun.GetErrorMessage(ex));
                    Console.WriteLine();
                }
            }

            Console.WriteLine("Phenix.Client.HttpClient.Default 缺省为第一个调用 LogonAsync 成功的 HttpClient 对象:{0}", Phenix.Client.HttpClient.Default == httpClient ? "ok" : "error");
            Console.WriteLine("Phenix.Client.HttpClient.Default.Identity 缺省为 Phenix.Client.Security.Identity.CurrentIdentity 对象:{0}", Phenix.Client.HttpClient.Default.Identity == Phenix.Client.Security.Identity.CurrentIdentity ? "ok" : "error");
            Console.WriteLine("当前用户资料:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.Security.Identity.CurrentIdentity.User));
            Console.Write("请按任意键继续");
            Console.ReadKey();
            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine("更新用户资料...");
            Phenix.Client.HttpClient.Default.Identity.User.Phone = "我的手机号";
            Phenix.Client.HttpClient.Default.Identity.User.UpdateSelf();
            User user = Phenix.Client.HttpClient.Default.Identity.ReFetchUserAsync().Result;

            Console.WriteLine("服务端已更新用户资料:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(user));
            Console.WriteLine();

            Console.WriteLine("搭建组织架构...");
            Phenix.Client.HttpClient.Default.Identity.User.PatchRootTeamsAsync("我的公司").Wait();
            Console.WriteLine("所属顶层团体:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.HttpClient.Default.Identity.User.RootTeams));
            Console.WriteLine("所属团体:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.HttpClient.Default.Identity.User.Teams));
            Console.WriteLine();
            Teams teamsA = Phenix.Client.HttpClient.Default.Identity.User.RootTeams.AddChild("A部门");
            Teams teamsB = Phenix.Client.HttpClient.Default.Identity.User.RootTeams.AddChild("B部门");

            Console.WriteLine("添加两部门后的组织架构:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.HttpClient.Default.Identity.User.RootTeams));
            Console.WriteLine();
            teamsB.ChangeParent(teamsA);
            Console.WriteLine("改变两部门层级关系后的组织架构:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.HttpClient.Default.Identity.User.RootTeams));
            Console.WriteLine();
            teamsB.Name = "AB部门";
            teamsB.UpdateSelf();
            Console.WriteLine("改变部门名称后的组织架构:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.HttpClient.Default.Identity.User.RootTeams));
            Console.WriteLine();
            teamsA.DeleteBranch();
            Console.WriteLine("删除部门后的组织架构:{0}", Phenix.Core.Reflection.Utilities.JsonSerialize(Phenix.Client.HttpClient.Default.Identity.User.RootTeams));
            Console.WriteLine();

            Console.Write("请按回车键结束演示");
            Console.ReadLine();
        }