Files
OpenRA/OpenRAUploader/Program.cs
2010-05-05 23:07:43 +12:00

93 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
namespace OpenRAUploader
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 6) { PrintUsage(); return; }
var server = args[0];
var user = args[1];
var password = args[2];
var platform = args[3];
var version = args[4];
var filename = args[5];
var uri = new UriBuilder("ftp", server);
uri.UserName = user;
uri.Password = password;
uri.Path += platform + "/";
var mainFileUri = new UriBuilder(uri.Uri);
mainFileUri.Path += Path.GetFileName(filename);
if (!File.Exists(filename)) { Console.WriteLine(filename + " does not exist."); return; }
Console.WriteLine(string.Format("Uploading {0} to {1}", Path.GetFileName(filename), mainFileUri.Uri));
var fileStream = File.Open(filename, FileMode.Open, FileAccess.Read);
var size = fileStream.Length;
var response = UploadFile(mainFileUri.Uri, fileStream, false);
if (response != null) Console.WriteLine("Response: " + response.StatusDescription);
fileStream.Close();
var jsonUri = new UriBuilder(uri.Uri);
jsonUri.Path += "version.json";
string formatString = "{{\n" +
"\t\"version\":\"{0}\",\n" +
"\t\"size\":\"{1:F2}MB\"\n" +
"}}";
string json = string.Format(formatString,
version,
((double)size / 1048576));
MemoryStream jsonStream = new MemoryStream(Encoding.ASCII.GetBytes(json));
Console.WriteLine("Uploading version JSON file");
response = UploadFile(jsonUri.Uri, jsonStream, true);
if (response != null) Console.WriteLine("Response: " + response.StatusDescription);
jsonStream.Close();
var latestUri = new UriBuilder(uri.Uri);
latestUri.Path += "latest.txt";
MemoryStream latestStream = new MemoryStream(Encoding.ASCII.GetBytes(Path.GetFileName(filename)));
Console.WriteLine("Uploading latest.txt");
response = UploadFile(latestUri.Uri, latestStream, true);
if (response != null) Console.WriteLine("Response: " + response.StatusDescription);
latestStream.Close();
}
static FtpWebResponse UploadFile(Uri uri, Stream file, bool text)
{
var ftp = WebRequest.Create(uri) as FtpWebRequest;
if (ftp == null) { Console.WriteLine("Couldn't create FTP client. URI incorrect?\n" + uri.ToString()); return null; }
ftp.Method = WebRequestMethods.Ftp.UploadFile;
ftp.UseBinary = !text;
var stream = ftp.GetRequestStream();
const int bufferLength = 2048;
byte[] buffer = new byte[bufferLength];
int readBytes = 0;
while ((readBytes = file.Read(buffer, 0, bufferLength)) != 0)
stream.Write(buffer, 0, readBytes);
stream.Close();
return ftp.GetResponse() as FtpWebResponse;
}
static void PrintUsage()
{
Console.WriteLine("Usage:\n OpenRAUploader.exe <ftp path> <username> <password> <platform> <version> <filename>");
}
}
}