From b348a76db785c040d957f055ba9cc8569bf0c285 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 17 Jan 2017 17:08:27 -0500 Subject: Out-of-box experience work It's definitely not working right now. I wouldn't delete your save. I have to implement the tutorial before the OOBE will let you into the game. --- ShiftOS.WinForms/FakeSetupScreen.cs | 206 ++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 ShiftOS.WinForms/FakeSetupScreen.cs (limited to 'ShiftOS.WinForms/FakeSetupScreen.cs') diff --git a/ShiftOS.WinForms/FakeSetupScreen.cs b/ShiftOS.WinForms/FakeSetupScreen.cs new file mode 100644 index 0000000..b223cb2 --- /dev/null +++ b/ShiftOS.WinForms/FakeSetupScreen.cs @@ -0,0 +1,206 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; +using ShiftOS.Engine; + +namespace ShiftOS.WinForms +{ + public partial class FakeSetupScreen : Form + { + private Oobe oobe = null; + + public Action MUDUserFound = null; + + public FakeSetupScreen(Oobe _oobe) + { + oobe = _oobe; + InitializeComponent(); + SetupUI(); + ServerManager.MessageReceived += (msg) => + { + if (msg.Name == "mud_notfound") + this.Invoke(new Action(() => { MUDUserFound?.Invoke(false); })); + else if (msg.Name == "mud_found") + this.Invoke(new Action(() => { MUDUserFound?.Invoke(true); })); + }; + } + + public event Action TextSent; + bool isTyping = false; + + private int currentPage = 0; + + public void SetupUI() + { + btnback.Show(); + pnlheader.Dock = DockStyle.Top; + pnlheader.Height = 50; + switch (currentPage) + { + case 0: + page1.BringToFront(); + pnlheader.Dock = DockStyle.Left; + pnlheader.Width = 100; + btnback.Hide(); + break; + case 1: + btnnext.Hide(); + btnback.Hide(); + page2.BringToFront(); + pgformatprogress.Value = 0; + var dinf = new System.IO.DriveInfo("C:"); + StartWipingInBackground(((dinf.TotalSize / 1024) / 1024) / 1024); + TextType($@"So I see you're progressing through. +I really hope you aren't one of those newbies who just next-next-next-finish their way through these things. +I see you've named your drive " + dinf.VolumeLabel + $@" +And it can contain up to {dinf.TotalSize} bytes of information. +And you've formatted this drive with a partition of type " + dinf.DriveFormat + $@". +Interesting... +Very interesting..."); + break; + case 2: + btnnext.Show(); + btnback.Hide(); + TextType(@"Now it's all gone. Now I need some user input so I can install ShiftOS. +Firstly, please enter a username, password, and system name. +Make the username and system name unique so I can identify exactly who you are. You're not the only one here. +Also, make sure the password is secure... There have been people known to breach users' accounts in ShiftOS and steal their stuff. +So make sure your password is secure enough that it can't be guessed, but easy for you to remember, and don't put any personal information in your account."); + page3.BringToFront(); + break; + case 3: + if (string.IsNullOrEmpty(txtnewusername.Text)) + { + TextType("You must specify a valid username!"); + currentPage--; + SetupUI(); + break; + } + + if (string.IsNullOrEmpty(txtnewpassword.Text)) + { + TextType("A password would seriously be recommended."); + currentPage--; + SetupUI(); + break; + } + + if (string.IsNullOrEmpty(txtnewsysname.Text)) + { + TextType("You must name your computer."); + currentPage--; + SetupUI(); + break; + } + + + MUDUserFound = (val) => + { + if(val == true) + { + TextType("I have just verified that your username and password already exists on my end. Please choose another."); + currentPage--; + SetupUI(); + + } + else + { + TextType("I am going to keep that info on my checklist for installing ShiftOS on your system. Now, onto some legal stuff. I highly suggest you read this."); + currentPage++; + oobe.MySave.Username = txtnewusername.Text; + oobe.MySave.Password = txtnewpassword.Text; + oobe.MySave.SystemName = txtnewsysname.Text; + SetupUI(); + } + }; + ServerManager.SendMessage("mud_checkuserexists", $@"{{ + username: ""{txtnewusername.Text}"", + password: ""{txtnewpassword.Text}"" +}}"); + break; + case 4: + page4.BringToFront(); + txtlicenseagreement.Rtf = Properties.Resources.ShiftOS; + break; + case 5: + CanClose = true; + this.Close(); + break; + } + } + + public void StartWipingInBackground(long arbitraryAmountOfBytes) + { + pgformatprogress.Maximum = (int)arbitraryAmountOfBytes; + var t = new Thread(() => + { + for(long i = 0; i <= arbitraryAmountOfBytes; i++) + { + Thread.Sleep(250); + this.Invoke(new Action(() => + { + pgformatprogress.Value = (int)i; + lbbyteszeroed.Text = $"Gigabytes zeroed: {i}/{arbitraryAmountOfBytes}"; + })); + } + this.Invoke(new Action(() => + { + currentPage++; + SetupUI(); + })); + }); + t.IsBackground = true; + t.Start(); + } + + + + private void TextType(string text) + { + new Thread(() => + { + while(isTyping == true) + { + + } + isTyping = true; + TextSent?.Invoke(text); + isTyping = false; + }).Start(); + } + + bool CanClose = false; + + private void FakeSetupScreen_FormClosing(object sender, FormClosingEventArgs e) + { + if (CanClose) + { + + } + else + { + e.Cancel = true; + TextType("Don't try to close the dialog. It's a futile attempt."); + } + } + + private void btnback_Click(object sender, EventArgs e) + { + currentPage--; + SetupUI(); + } + + private void btnnext_Click(object sender, EventArgs e) + { + currentPage++; + SetupUI(); + } + } +} -- cgit v1.2.3