aboutsummaryrefslogtreecommitdiff
path: root/source/WindowsFormsApplication1/Online/Package_Grabber.cs
diff options
context:
space:
mode:
authorMichaelTheShifter <[email protected]>2016-06-25 08:10:03 -0400
committerMichaelTheShifter <[email protected]>2016-06-25 08:10:03 -0400
commit84f689b91a73e512b035df40bbcf556b008a3b81 (patch)
treeda1020b2b5866c7ce300ac7b9c97112fe80fa1b3 /source/WindowsFormsApplication1/Online/Package_Grabber.cs
parent6707e2076a63dafab686fd533c95fb8ceb6c23fa (diff)
downloadshiftos-c-_theultimatehacker-84f689b91a73e512b035df40bbcf556b008a3b81.tar.gz
shiftos-c-_theultimatehacker-84f689b91a73e512b035df40bbcf556b008a3b81.tar.bz2
shiftos-c-_theultimatehacker-84f689b91a73e512b035df40bbcf556b008a3b81.zip
Sort source code into folders.
It feels better to know what's responsible for what... Plus I removed some un-needed C# stuff.
Diffstat (limited to 'source/WindowsFormsApplication1/Online/Package_Grabber.cs')
-rw-r--r--source/WindowsFormsApplication1/Online/Package_Grabber.cs402
1 files changed, 402 insertions, 0 deletions
diff --git a/source/WindowsFormsApplication1/Online/Package_Grabber.cs b/source/WindowsFormsApplication1/Online/Package_Grabber.cs
new file mode 100644
index 0000000..b6bbc61
--- /dev/null
+++ b/source/WindowsFormsApplication1/Online/Package_Grabber.cs
@@ -0,0 +1,402 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+using System.IO.Compression;
+using Newtonsoft.Json;
+using System.Windows.Forms;
+using System.Threading;
+using System.Drawing;
+using NetSockets;
+
+namespace ShiftOS
+{
+ [Serializable]
+ public class ObjectModel
+ {
+ public string SysId { get; set; }
+ public string Command { get; set; }
+ public object OptionalObject { get; set; }
+ }
+
+ [Serializable]
+ public class ChatUser
+ {
+ public string Name { get; set; }
+ public event EventHandler OnJoin;
+ public event EventHandler OnLeave;
+ }
+
+ [Serializable]
+ public class ChatMessage
+ {
+ public string Text { get; set; }
+ public ChatUser User { get; set; }
+ }
+
+ class Package_Grabber
+ {
+
+
+ public static Dictionary<string, NetObjectClient> clients = null;
+
+ /// <summary>
+ /// Connect to a ShiftOS server
+ /// </summary>
+ /// <param name="address">IP address</param>
+ /// <param name="port">Port (typically this is 4433.)</param>
+ public static void ConnectToServer(string address, int port)
+ {
+ if(clients == null)
+ {
+ clients = new Dictionary<string, NetObjectClient>();
+ }
+ bool blacklisted = false;
+ string blacklist = new WebClient().DownloadString("http://playshiftos.ml/server/blacklist");
+ string[] splitter = blacklist.Split(';');
+ foreach (string addr in splitter)
+ {
+ try
+ {
+ string[] addSplitter = addr.Split(':');
+ string host = addSplitter[0];
+ int prt = Convert.ToInt32(addSplitter[1]);
+ if(address == host && port == prt)
+ {
+ blacklisted = true;
+ }
+ }
+ catch
+ {
+
+ }
+ }
+ if (!blacklisted)
+ {
+ var client = new NetObjectClient();
+ client.OnReceived += (object s, NetReceivedEventArgs<NetObject> a) =>
+ {
+ try
+ {
+ var obj = (ObjectModel)a.Data.Object;
+ if (obj.Command == "set_ident")
+ {
+ this_id = obj.SysId;
+ }
+ }
+ catch
+ {
+
+ }
+ };
+
+ try
+ {
+ client.Connect(address, port);
+ clients.Add(client.RemoteHost, client);
+ }
+ catch
+ {
+ }
+ }
+ else
+ {
+ API.CreateInfoboxSession("Server Connection Error", "The server you are trying to connect to has been blacklisted for breaking the rules of the Server Showcase, therefore you may not connect to it.", infobox.InfoboxMode.Info);
+ }
+ }
+
+ private static string this_id = "";
+
+ /// <summary>
+ /// Send a message to a server.
+ /// </summary>
+ /// <param name="host">Server hostname/IP</param>
+ /// <param name="text">Messge contents.</param>
+ public static void SendMessage(string host, string text)
+ {
+ var obj = new ObjectModel();
+ obj.SysId = this_id;
+ obj.Command = text;
+ try {
+ clients[host].Send(new NetObject("test", obj));
+ }
+ catch
+ {
+
+ }
+ }
+
+ /// <summary>
+ /// Send a message to a server containing a .NET object.
+ /// </summary>
+ /// <param name="host">Server hostname/IP</param>
+ /// <param name="text">Message text.</param>
+ /// <param name="optional">The object to go with it.</param>
+ public static void SendMessage(string host, string text, object optional)
+ {
+ var obj = new ObjectModel();
+ obj.SysId = this_id;
+ obj.Command = text;
+ obj.OptionalObject = optional;
+ try {
+ clients[host].Send(obj.SysId, obj);
+ }
+ catch
+ {
+
+ }
+ }
+
+
+
+ /// <summary>
+ /// Disconnect from a server.
+ /// </summary>
+ /// <param name="host">Server host.</param>
+ public static void Disconnect(string host)
+ {
+ if(clients.ContainsKey(host))
+ {
+ if(clients[host].IsConnected == true)
+ {
+ clients[host].Disconnect();
+ }
+ }
+ }
+
+
+ /// <summary>
+ /// Download a package through spkg.
+ /// </summary>
+ /// <param name="pkgname">Package name</param>
+ /// <returns>Could it download?</returns>
+ public static bool GetPackage(string pkgname)
+ {
+ bool result = true;
+ try
+ {
+ string downloadpath = Paths.Mod_Temp;
+ if (!Directory.Exists(downloadpath))
+ {
+ Directory.CreateDirectory(downloadpath);
+ } else
+ {
+ Directory.Delete(downloadpath, true);
+ Directory.CreateDirectory(downloadpath);
+ }
+ WebClient wc = new WebClient();
+ wc.DownloadFile("http://playshiftos.ml/shiftnet/packages/" + pkgname + ".pkg", downloadpath + pkgname + ".pkg");
+ LastPackage_DownloadPath = downloadpath + pkgname + ".pkg";
+ }
+ catch
+ {
+ result = false;
+ }
+ return result;
+ }
+
+ public static string LastPackage_DownloadPath = null;
+
+ /// <summary>
+ /// Extracts the last downloaded package.
+ /// </summary>
+ /// <returns>The temp path</returns>
+ public static string ExtractPackage()
+ {
+ if (LastPackage_DownloadPath != null)
+ {
+ string packagedir = null;
+ if (LastPackage_DownloadPath.EndsWith(".pkg"))
+ {
+ packagedir = LastPackage_DownloadPath.Replace(".pkg", "");
+ }
+ else
+ {
+ packagedir = LastPackage_DownloadPath.Replace(".stp", "");
+ }
+ if (Directory.Exists(packagedir))
+ {
+ Directory.Delete(packagedir, true);
+ }
+ ZipFile.ExtractToDirectory(LastPackage_DownloadPath, packagedir);
+ return packagedir;
+ }
+ else
+ {
+ return "fail";
+ }
+ }
+
+ /// <summary>
+ /// Extract a specified .stp or .pkg file.
+ /// </summary>
+ /// <param name="localpath">File to extract</param>
+ /// <returns>The new temp path</returns>
+ public static string ExtractPackage(string localpath)
+ {
+ try {
+
+ string packagedir = Paths.Mod_Temp + "pkg";
+ if (Directory.Exists(packagedir))
+ {
+ Directory.Delete(packagedir, true);
+ }
+ Directory.CreateDirectory(packagedir);
+ ZipFile.ExtractToDirectory(localpath, packagedir);
+ return packagedir;
+ }
+ catch
+ {
+ return "fail";
+ }
+ }
+
+ /// <summary>
+ /// Install a package from a directory
+ /// </summary>
+ /// <param name="dir">The package directory</param>
+ /// <returns>Could it install?</returns>
+ public static string InstallPackage(string dir)
+ {
+ try
+ {
+ string dirsepchar = "\\";
+ switch (OSInfo.GetPlatformID())
+ {
+ case "microsoft":
+ dirsepchar = "\\";
+ break;
+ default:
+ dirsepchar = "/";
+ break;
+ }
+ string alfile = null;
+ foreach (string file in Directory.GetFiles(dir))
+ {
+ if (file.Contains("applauncher"))
+ {
+ alfile = file;
+ }
+ }
+ string json = File.ReadAllText(alfile);
+ if (!Directory.Exists(Paths.Mod_AppLauncherEntries))
+ {
+ Directory.CreateDirectory(Paths.Mod_AppLauncherEntries);
+ }
+ ModApplauncherItem itm = JsonConvert.DeserializeObject<ModApplauncherItem>(json);
+ File.WriteAllText(Paths.Mod_AppLauncherEntries + itm.Name, json);
+ //Applauncher Entry installed!
+ if (!Directory.Exists(Paths.Applications + itm.AppDirectory))
+ {
+ Directory.CreateDirectory(Paths.Applications + itm.AppDirectory);
+ }
+
+ Thread.Sleep(200);
+ if (!File.Exists(Paths.Applications + itm.AppDirectory + dirsepchar + "Icon.bmp"))
+ {
+ File.Copy(dir + "Icon.bmp", Paths.Applications + itm.AppDirectory + dirsepchar + "Icon.bmp");
+ }
+ if (File.Exists(Paths.Applications + itm.AppDirectory + dirsepchar + "app.saa"))
+ {
+ File.Delete(Paths.Applications + itm.AppDirectory + dirsepchar + "app.saa");
+ }
+ File.Move(dir + "app.saa", Paths.Applications + itm.AppDirectory + dirsepchar + "app.saa");
+ //App installed.
+ foreach (string file in Directory.GetFiles(dir))
+ {
+ if (file.EndsWith(".dll"))
+ {
+ if (!File.Exists(Paths.Applications + itm.AppDirectory + dirsepchar + new FileInfo(file).Name))
+ {
+ //Dependencies are fucking bitches.
+ File.Copy(file, Paths.Applications + itm.AppDirectory + dirsepchar + new FileInfo(file).Name);
+ }
+ }
+ }
+ //Dependencies installed.
+ API.CurrentSession.SetupAppLauncher();
+ return "success";
+ }
+ catch (Exception ex)
+ {
+ return ex.Message;
+ }
+ }
+ }
+
+ class FTP_API
+ {
+ /// <summary>
+ /// Gets a package image from the ShiftOS website
+ /// </summary>
+ /// <param name="ftpFilePath">Image path relative to the packages directory</param>
+ /// <returns>The image</returns>
+ [Obsolete]
+ public static Image GetImage(string ftpFilePath)
+ {
+ var request = WebRequest.Create("http://playshiftos.ml/appscape/packages/" + ftpFilePath);
+
+ using (var response = request.GetResponse())
+ {
+ using (var str = response.GetResponseStream())
+ {
+ return Image.FromStream(str);
+ }
+ }
+ }
+
+ [Obsolete]
+ public static Image GetSkinImage(string ftpFilePath)
+ {
+ var request = WebRequest.Create("http://playshiftos.ml/appscape/skins/" + ftpFilePath);
+
+ using (var response = request.GetResponse())
+ {
+ using (var str = response.GetResponseStream())
+ {
+ return Image.FromStream(str);
+ }
+ }
+ }
+ }
+
+
+ [Serializable]
+ public class AppscapeModder
+ {
+ public string DevKey { get; set; }
+ public string Name { get; set; }
+ public string Bio { get; set; }
+ public string BitnoteAddress { get; set; }
+ }
+
+ [Serializable]
+ public class AppscapePackage
+ {
+ public string Name { get; set; }
+ public string Address { get; set; }
+ public string DevKey { get; set; }
+ public string Description { get; set; }
+ public string SetupFile { get; set; }
+ public string PkgIconPath { get; set; }
+ public string ScreenshotPath { get; set; }
+ public decimal Cost { get; set; }
+ public string Server { get; set; }
+ }
+
+ [Serializable]
+ public class SkinData
+ {
+ public string Name { get; set; }
+ public string Author { get; set; }
+ public string Description { get; set; }
+ public string Download { get; set; }
+ public string Icon { get; set; }
+ public string Screenshot { get; set; }
+ public decimal Cost { get; set; }
+ public string Server { get; set; }
+ }
+}