using EVCB_OCPP.Domain;
using EVCB_OCPP.Domain.Models.Database;
using EVCB_OCPP.Packet.Features;
using EVCB_OCPP.Packet.Messages;
using EVCB_OCPP.Packet.Messages.Core;
using Microsoft.Win32;
using Newtonsoft.Json;
using OCPPPackage.Profiles;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.Entity;
using EVCB_OCPP.Packet.Messages.RemoteTrigger;
using EVCB_OCPP.Packet.Messages.SubTypes;
using EVCB_OCPP.Packet.Messages.LocalAuthListManagement;
using EVCB_OCPP.Packet.Messages.FirmwareManagement;
using EVCB_OCPP.Packet.Messages.Reservation;
using EVCB_OCPP.Packet.Messages.SmartCharging;
using System.Threading;
using System.Net.Http;
using Newtonsoft.Json.Converters;
namespace TestTool.RemoteTriggerAPP
{
///
/// MainWindow.xaml 的互動邏輯
///
public partial class MainWindow : Window
{
string action = "";
List publishes = new List();
FTPClient UploadClient = new FTPClient(@"ftp://test.evsocket.phihong.com.cn", "testocpp", "testocpp");
string chargingProfilePath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "SetChargingProfile.json");
string dataTransferPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DataTransfer.json");
int selectedPublish = -1;
bool isDestroyMode = false;
public MainWindow()
{
var oo = new { idToken = "3345678", price = "Connection Fee: $2.11 NTD/time; Current Rate: $2.22 NTD/kWh;Occupancy Fee: $2.33 NTD/hr; Account Balance: $2444 NTD" };
var tt = new DataTransferRequest()
{
vendorId = "Phihong Technology",
messageId = "SetUserPrice",
data = JsonConvert.SerializeObject(oo)
};
var ttt = JsonConvert.SerializeObject(tt);
InitializeComponent();
Loaded += MainWindow_Loaded;
UploadClient.OnUploadProgress += UploadClient_OnUploadProgress;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
uxChargeBoxIdTb.Text = Properties.Settings.Default.ChargeBoxId;
}
private void UxSubmitBtn_Click(object sender, RoutedEventArgs e)
{
if (isDestroyMode)
{
try
{
string actualAction = action.Split(new char[] { '_', '(' })[0];
var uuid = Guid.NewGuid().ToString();
WritetoDB(uuid, null, actualAction, GetDestroyVersionData(actualAction));
uxMsgTb.Text = string.Format("Send Actions: {0} UUID:{1}", actualAction, uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
{
switch (action)
{
#region Core Profile
case "ChangeAvailability_Inoperative":
{
SetChangeAvailability_Inoperative();
}
break;
case "ChangeAvailability_Operative":
{
SetChangeAvailability_Operative();
}
break;
case "DataTransfer":
{
var request = VerifyDataTransfer(dataTransferPath);
SetDataTransfer(request);
}
break;
case "GetConfiguration":
{
if (uxConfigKeyTb.Text == "")
{
SetGetConfiguration_ALL();
}
else
{
SetGetConfiguration();
}
}
break;
case "ChangeConfiguration":
{
SetChangeConfiguration();
}
break;
case "ClearCache":
{
SetClearCache();
}
break;
case "RemoteStartTransaction":
{
SetRemoteStartTransaction();
}
break;
case "RemoteStartTransaction_ChargingProfile":
{
var chargingProfile = VerifyChargingProfile(chargingProfilePath);
if (chargingProfile != null)
{
SetRemoteStartTransaction(chargingProfile);
}
else
{
uxMsgTb.Text = "Please check chargingProfile.json exist in " + AppDomain.CurrentDomain.BaseDirectory;
}
}
break;
case "RemoteStopTransaction":
{
SetRemoteStopTransaction();
}
break;
case "Reset_HardReset":
{
SetHardReset();
}
break;
case "Reset_SoftReset":
{
SetSoftReset();
}
break;
case "UnlockConnector":
{
SetUnlockConnector();
}
break;
#endregion
#region Local Authorization
case "GetLocalListVersion":
{
GetLocalListVersion();
}
break;
case "SendLocalList_Full":
{
SendLocalAuthorizationList(true);
}
break;
case "SendLocalList_Diff":
{
SendLocalAuthorizationList(false);
}
break;
#endregion
case "GetDiagnostics_FTP":
{
GetDiagnostics(true);
}
break;
case "GetDiagnostics_HTTP":
{
GetDiagnostics(false);
}
break;
case "ReserveNow":
{
ReserveNow();
}
break;
case "CancelReservation":
{
CancelReservation();
}
break;
case "ClearChargingProfile":
{
ClearChargingProfile();
}
break;
case "GetCompositeSchedule":
{
GetCompositeSchedule();
}
break;
case "SetChargingProfile":
{
var chargingProfile = VerifyChargingProfile(chargingProfilePath);
if (chargingProfile != null)
{
SetChargingProfile(chargingProfile);
}
else
{
uxMsgTb.Text = "Please check chargingProfile.json exist in " + AppDomain.CurrentDomain.BaseDirectory;
}
//SetChargingProfile(new SetChargingProfileRequest()
//{
// connectorId = 0,
// csChargingProfiles = new csChargingProfiles()
// {
// chargingProfileId = 1,
// chargingProfileKind = ChargingProfileKindType.Recurring,
// chargingProfilePurpose = ChargingProfilePurposeType.ChargePointMaxProfile,
// chargingSchedule = new ChargingSchedule()
// {
// chargingRateUnit = ChargingRateUnitType.W,
// chargingSchedulePeriod = new List()
// {
// new ChargingSchedulePeriod(){ startPeriod=0, limit=int.Parse(uxConfigValueTb.Text)}
// },
// },
// recurrencyKind = RecurrencyKindType.Daily,
// stackLevel = 1,
// }
//});
}
break;
#region Trigger Profile
case "TriggerMessage_BootNotification":
case "TriggerMessage_DiagnosticsStatusNotification":
case "TriggerMessage_FirmwareStatusNotification":
case "TriggerMessage_Heartbeat":
case "TriggerMessage_MeterValues":
case "TriggerMessage_StatusNotification":
{
SetRemoteTrigger(action);
}
break;
#endregion
default:
break;
}
}
}
private void SetDataTransfer(DataTransferRequest request)
{
try
{
var uuid = Guid.NewGuid().ToString();
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private DataTransferRequest VerifyDataTransfer(string path)
{
DataTransferRequest request = null;
if (!File.Exists(path)) return request;
try
{
request = JsonConvert.DeserializeObject(File.ReadAllText(path));
}
catch
{
}
return request;
}
private SetChargingProfileRequest VerifyChargingProfile(string path)
{
SetChargingProfileRequest request = null;
if (!File.Exists(path)) return request;
try
{
request = JsonConvert.DeserializeObject(File.ReadAllText(path));
}
catch
{
}
return request;
}
private void SetChargingProfile(SetChargingProfileRequest csProfile)
{
try
{
var uuid = Guid.NewGuid().ToString();
WritetoDB(uuid, csProfile);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void GetCompositeSchedule()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new GetCompositeScheduleRequest()
{
connectorId = Convert.ToInt32(uxConnectorIdTb.Text),
duration = 10000
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void ClearChargingProfile()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ClearChargingProfileRequest()
{
connectorId = Convert.ToInt32(uxConnectorIdTb.Text),
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void CancelReservation()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new CancelReservationRequest()
{
reservationId = Convert.ToInt32(uxReservationTb.Text),
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetWrongAction()
{
bool isError = false;
DateTime expiryTime = DateTime.Now;
try
{
try
{
expiryTime = Convert.ToDateTime(uxExpiryTimeTb.Text);
//if (expiryTime < DateTime.Now.AddSeconds(60))
//{
// isError = true;
// uxMsgTb.Text = string.Format("ExpiryTime is too close or too early to the current time (60 seconds).");
//}
}
catch (Exception ex)
{
if (ex is FormatException)
{
isError = true;
uxMsgTb.Text = string.Format("ExpiryTime's Format is wrong Example:{0}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
}
}
if (!isError)
{
var uuid = Guid.NewGuid().ToString();
var request = new ReserveNowRequest()
{
connectorId = Convert.ToInt32(uxConnectorIdTb.Text),
expiryDate = expiryTime.ToUniversalTime(),
idTag = uxIdTagTb.Text,
parentIdTag = "PTAG",
reservationId = Convert.ToInt32(expiryTime.ToUniversalTime().ToString("yyMMddHHmm")),
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void ReserveNow()
{
bool isError = false;
DateTime expiryTime = DateTime.Now;
try
{
try
{
expiryTime = Convert.ToDateTime(uxExpiryTimeTb.Text);
//if (expiryTime < DateTime.Now.AddSeconds(60))
//{
// isError = true;
// uxMsgTb.Text = string.Format("ExpiryTime is too close or too early to the current time (60 seconds).");
//}
}
catch (Exception ex)
{
if (ex is FormatException)
{
isError = true;
uxMsgTb.Text = string.Format("ExpiryTime's Format is wrong Example:{0}", DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
}
}
if (!isError)
{
var uuid = Guid.NewGuid().ToString();
var request = new ReserveNowRequest()
{
connectorId = Convert.ToInt32(uxConnectorIdTb.Text),
expiryDate = expiryTime.ToUniversalTime(),
idTag = uxIdTagTb.Text,
parentIdTag = "PTAG",
reservationId = Convert.ToInt32(expiryTime.ToUniversalTime().ToString("yyMMddHHmm")),
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void GetDiagnostics(bool ftp)
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new GetDiagnosticsRequest()
{
location = new Uri(ftp ? Properties.Settings.Default.FTPGetDiagnosticsPreUrl : Properties.Settings.Default.GetDiagnosticsPreUrl),
retries = 1,
retryInterval = 30,
startTime = DateTime.Now.AddHours(-1).ToUniversalTime(),
stopTime = DateTime.Now.ToUniversalTime()
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
#region Local Authorization
private void GetLocalListVersion()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new GetLocalListVersionRequest()
{
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SendLocalAuthorizationList(bool isFull)
{
try
{
var size = Convert.ToInt32(uxLocalListSizeTb.Text);
var uuid = Guid.NewGuid().ToString();
var request = new SendLocalListRequest()
{
listVersion = Convert.ToInt32(DateTimeOffset.Now.AddDays(-50).ToUnixTimeSeconds()),
updateType = isFull ? UpdateType.Full : UpdateType.Differential,
localAuthorizationList = new List()
//localAuthorizationList = new List()
//{
// new AuthorizationData()
// {
// idTagInfo=new IdTagInfo(){ expiryDate=DateTime.Now.ToUniversalTime().AddDays(3), status= AuthorizationStatus.Accepted},
// idTag="F5902677"
// }, new AuthorizationData()
// {
// idTagInfo=new IdTagInfo(){ expiryDate=DateTime.Now.ToUniversalTime().AddDays(3), status= AuthorizationStatus.Expired},
// idTag="772690F5"
// }
//}
};
//request.localAuthorizationList.Add(new AuthorizationData()
//{
// idTag = "F5902677",
// idTagInfo = new IdTagInfo()
// {
// parentIdTag = "0000000000000000001",
// expiryDate = DateTime.UtcNow.AddMonths(1),
// status = AuthorizationStatus.ConcurrentTx
// }
//});
request.localAuthorizationList.Add(new AuthorizationData()
{
idTag = "AA",
idTagInfo = new IdTagInfo()
{
parentIdTag = "SuperVisor",
expiryDate = DateTime.UtcNow.AddMinutes(5),
status = AuthorizationStatus.Accepted
}
});
request.localAuthorizationList.Add(new AuthorizationData()
{
idTag = "BB",
idTagInfo = new IdTagInfo()
{
parentIdTag = "SuperVisor",
expiryDate = DateTime.UtcNow.AddMinutes(5),
status = AuthorizationStatus.Accepted
}
});
request.localAuthorizationList.Add(new AuthorizationData()
{
idTag = "CC",
idTagInfo = new IdTagInfo()
{
parentIdTag = "SuperVisor",
expiryDate = DateTime.UtcNow.AddMinutes(5),
status = AuthorizationStatus.Accepted
}
});
request.localAuthorizationList.Add(new AuthorizationData()
{
idTag = "DD",
idTagInfo = new IdTagInfo()
{
parentIdTag = "SuperVisor",
expiryDate = DateTime.UtcNow.AddMonths(-1),
status = AuthorizationStatus.Invalid
}
});
request.localAuthorizationList.Add(new AuthorizationData()
{
idTag = "EE",
idTagInfo = new IdTagInfo()
{
parentIdTag = "SuperVisor",
expiryDate = DateTime.UtcNow.AddMonths(-1),
status = AuthorizationStatus.Invalid
}
});
for (int i = 0; i < size - request.localAuthorizationList.Count(); i++)
{
request.localAuthorizationList.Add(new AuthorizationData()
{
idTag = DateTime.Now.ToString("yyyyMMddHHmmss" + i.ToString("00000")),
idTagInfo = new IdTagInfo()
{
parentIdTag = "0000000000000000001",
expiryDate = DateTime.UtcNow.AddMonths(1),
status = AuthorizationStatus.Accepted
}
});
}
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
#endregion
private void SetRemoteTrigger(string action)
{
try
{
string type = action.Split('_').Last();
var uuid = Guid.NewGuid().ToString();
var request = new TriggerMessageRequest()
{
requestedMessage = (MessageTrigger)Enum.Parse(typeof(MessageTrigger), type, false)
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetGetConfiguration()
{
try
{
string uuid = Guid.NewGuid().ToString();
var request = new GetConfigurationRequest()
{
key = uxConfigKeyTb.Text.Split('/').ToList()
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void UxCmdCb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var item = uxCmdCb.SelectedValue as ComboBoxItem;
action = item.Content as string;
}
private void SetRemoteStartTransaction(SetChargingProfileRequest csProfile = null)
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new RemoteStartTransactionRequest()
{
connectorId = int.Parse(uxConnectorIdTb.Text),
idTag = uxIdTagTb.Text
};
if (csProfile != null)
{
request.chargingProfile = csProfile.csChargingProfiles;
}
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetUnlockConnector()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new UnlockConnectorRequest()
{
connectorId = int.Parse(uxConnectorIdTb.Text),
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetChangeAvailability_Inoperative()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ChangeAvailabilityRequest()
{
connectorId = int.Parse(uxConnectorIdTb.Text),
type = EVCB_OCPP.Packet.Messages.SubTypes.AvailabilityType.Inoperative
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetChangeAvailability_Operative()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ChangeAvailabilityRequest()
{
connectorId = int.Parse(uxConnectorIdTb.Text),
type = EVCB_OCPP.Packet.Messages.SubTypes.AvailabilityType.Operative
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetChangeConfiguration()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ChangeConfigurationRequest()
{
key = uxConfigKeyTb.Text,
value = uxConfigValueTb.Text,
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetClearCache()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ClearCacheRequest()
{
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetGetConfiguration_ALL()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new GetConfigurationRequest()
{
key = new List() { }
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetHardReset()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ResetRequest()
{
type = EVCB_OCPP.Packet.Messages.SubTypes.ResetType.Hard
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetSoftReset()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new ResetRequest()
{
type = EVCB_OCPP.Packet.Messages.SubTypes.ResetType.Soft
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void SetRemoteStopTransaction()
{
try
{
var uuid = Guid.NewGuid().ToString();
var request = new RemoteStopTransactionRequest()
{
transactionId = int.Parse(uxTransactionIdTb.Text)
};
WritetoDB(uuid, request);
uxMsgTb.Text = string.Format("UUID:{0}", uuid);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void WritetoDB(string uuid, IRequest request, string action = "", string destroyData = "")
{
using (var db = new MainDBContext())
{
db.MachineOperateRecord.Add(new MachineOperateRecord()
{
CreatedOn = DateTime.Now.ToUniversalTime(),
ChargeBoxId = uxChargeBoxIdTb.Text,
SerialNo = uuid,
RequestContent = !string.IsNullOrEmpty(destroyData) ? destroyData : JsonConvert.SerializeObject(request, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.None }),
EVSE_Status = 0,
Status = 0,
RequestType = 1,
Action = !string.IsNullOrEmpty(destroyData) ? action : request.Action.ToString()
});
db.ServerMessage.Add(new ServerMessage()
{
ChargeBoxId = uxChargeBoxIdTb.Text,
CreatedBy = !string.IsNullOrEmpty(destroyData) ? "Destroyer" : "TestTool",
CreatedOn = DateTime.Now.ToUniversalTime(),
OutAction = !string.IsNullOrEmpty(destroyData) ? action : request.Action.ToString(),
OutRequest = !string.IsNullOrEmpty(destroyData) ? destroyData : JsonConvert.SerializeObject(request, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore, Formatting = Formatting.None }),
SerialNo = uuid,
InMessage = string.Empty
});
db.SaveChanges();
}
}
private void uxFileSubmitBtn_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "Select file";
var result = openFileDialog.ShowDialog();
if (result == true)
{
uxUploadFileTb.Text = openFileDialog.FileName;
}
}
private void uxUploadBtn_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(uxUploadFileTb.Text))
{
uxMsgTb.Text = "Please select upload file!";
return;
}
FileInfo f = new FileInfo(uxUploadFileTb.Text);
int size = (int)f.Length;
string md5 = "";
string filePreUrl = ConfigurationManager.AppSettings["UpdateFWPreUrl"];
using (WebClient client = new WebClient())
{
client.UseDefaultCredentials = false;
client.Headers.Add("Content-Type", "application/octet-stream");
using (Stream fileStream = File.OpenRead(uxUploadFileTb.Text))
{
var _md5 = MD5.Create();
var hash = _md5.ComputeHash(fileStream);
md5 = BitConverter.ToString(hash).Replace("-", String.Empty).ToLowerInvariant();
}
}
UploadFile ufObj = new UploadFile();
ufObj.CreatedOn = DateTime.Now.ToUniversalTime();
ufObj.FileExtensionName = System.IO.Path.GetExtension(uxUploadFileTb.Text);
ufObj.Id = Guid.NewGuid().ToString();
ufObj.FileName = md5 + ufObj.FileExtensionName;
ufObj.FilePath = "~/UploadFiles/Fw/" + ufObj.FileName;
ufObj.FileSize = size;
ufObj.FileMD5 = md5;
ufObj.OriginName = System.IO.Path.GetFileName(uxUploadFileTb.Text);
ufObj.FileUrl = new Uri(Properties.Settings.Default.UpdateFWPreUrl + ufObj.FilePath.Replace("~/", "")).ToString();
ufObj.VendorId = "TestTool";
ufObj.ModelName = "TestTool";
ufObj.ModuleId = 0;
using (var db = new MainDBContext())
{
db.UploadFile.Add(ufObj);
db.SaveChanges();
}
string filePath = uxUploadFileTb.Text;
uxMsgTb.Text = "Uploading........";
Task.Run(async () =>
{
await UploadTask(filePath, ufObj.FileName);
});
}
private async Task UploadTask(string filePath, string fileName)
{
bool uploadResult = UploadClient.FtpUploadBroken(filePath, @"ftp://ocpp.phihong.com.tw/" + fileName);
await Dispatcher.BeginInvoke(new Action(() =>
{
if (uploadResult)
{
uxMsgTb.Text = "Current Progress :100 %";
Thread.CurrentThread.Join(100);
}
uxMsgTb.Text = "Upload File Result :" + (uploadResult ? "Success" : "Fail");
}));
}
private void UploadClient_OnUploadProgress(double percent)
{
Dispatcher.BeginInvoke(new Action(() =>
{
uxMsgTb.Text = "Current Progress :" + (int)percent + " %";
}));
}
private void uxFTPUploadBtn_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(uxUploadFileTb.Text))
{
uxMsgTb.Text = "Please select upload file!";
return;
}
FileInfo f = new FileInfo(uxUploadFileTb.Text);
int size = (int)f.Length;
string md5 = "";
using (WebClient client = new WebClient())
{
client.UseDefaultCredentials = false;
client.Headers.Add("Content-Type", "application/octet-stream");
using (Stream fileStream = File.OpenRead(uxUploadFileTb.Text))
{
var _md5 = MD5.Create();
var hash = _md5.ComputeHash(fileStream);
md5 = BitConverter.ToString(hash).Replace("-", String.Empty).ToLowerInvariant();
}
}
UploadFile ufObj = new UploadFile();
ufObj.CreatedOn = DateTime.Now.ToUniversalTime();
ufObj.FileExtensionName = System.IO.Path.GetExtension(uxUploadFileTb.Text);
ufObj.Id = Guid.NewGuid().ToString();
ufObj.FileName = md5 + ufObj.FileExtensionName;
ufObj.FilePath = "~/UploadFiles/Fw/" + ufObj.FileName;
ufObj.FileSize = size;
ufObj.FileMD5 = md5;
ufObj.OriginName = System.IO.Path.GetFileName(uxUploadFileTb.Text);
ufObj.FileUrl = new Uri(Properties.Settings.Default.FTPUpdateFWPreUrl + ufObj.FileName).ToString();
ufObj.VendorId = "TestTool";
ufObj.ModelName = "TestTool";
ufObj.ModuleId = 0;
using (var db = new MainDBContext())
{
db.UploadFile.Add(ufObj);
db.SaveChanges();
}
string filePath = uxUploadFileTb.Text;
uxMsgTb.Text = "Uploading........";
Task.Run(async () =>
{
await UploadTask(filePath, ufObj.FileName);
});
}
private void uxRefreshBtn_Click(object sender, RoutedEventArgs e)
{
using (var db = new MainDBContext())
{
publishes = db.UploadFile.OrderByDescending(c => c.CreatedOn).Take(20).ToList();
StringBuilder sb = new StringBuilder();
uxPublishCb.Items.Clear();
foreach (var i in publishes)
{
string prefix = i.FileUrl.StartsWith("ftp") ? "FTP" : "HTTP";
sb.Clear();
sb.Append(string.Format("[{0}]", prefix));
sb.Append("_上傳日期:");
sb.Append(i.CreatedOn.ToString());
sb.Append("_檔名:");
sb.Append(i.OriginName);
uxPublishCb.Items.Add(sb.ToString());
uxPublishCb.SelectedIndex = 0;
}
}
}
private void uxPublishBtn_Click(object sender, RoutedEventArgs e)
{
if (selectedPublish < 0)
{
uxMsgTb.Text = "Please choose publish version!";
return;
}
using (var db = new MainDBContext())
{
var machine = db.Machine.Where(x => x.ChargeBoxId == uxChargeBoxIdTb.Text).FirstOrDefault();
MachineVersionFile obj = new MachineVersionFile()
{
ChargeBoxId = uxChargeBoxIdTb.Text,
UploadFileId = publishes[selectedPublish].Id,
CreatedOn = DateTime.Now.ToUniversalTime()
};
db.MachineVersionFile.Add(obj);
//將machine的軟體更新更新到這個值
db.SaveChanges();
machine.FW_AssignedVersion = obj.Id;
db.SaveChanges();
}
uxMsgTb.Text = "Publish Complete";
}
private void uxPublishCb_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
selectedPublish = uxPublishCb.SelectedIndex;
}
private void uxClearPublishBtn_Click(object sender, RoutedEventArgs e)
{
using (var db = new MainDBContext())
{
var machine = db.Machine.Where(x => x.ChargeBoxId == uxChargeBoxIdTb.Text).FirstOrDefault();
machine.FW_AssignedVersion = null;
db.SaveChanges();
}
uxMsgTb.Text = "Clear Publish";
}
private void uxChargeBoxIdTb_LostFocus(object sender, RoutedEventArgs e)
{
Properties.Settings.Default.ChargeBoxId = uxChargeBoxIdTb.Text;
Properties.Settings.Default.Save();
}
private string GetDestroyVersionData(string action)
{
string result = "";
try
{
string path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, action + ".json");
var request = JsonConvert.DeserializeObject(File.ReadAllText(path));
result = JsonConvert.SerializeObject(request);
}
catch (Exception ex)
{
uxMsgTb.Text += "解析檔案發生問題 " + ex.ToString();
}
return result;
}
private void uxDestroyCb_Checked(object sender, RoutedEventArgs e)
{
isDestroyMode = true;
uxConnectorIdTb.IsEnabled = false;
uxReservationTb.IsEnabled = false;
uxIdTagTb.IsEnabled = false;
uxParentIdTagTb.IsEnabled = false;
uxTransactionIdTb.IsEnabled = false;
uxLocalListSizeTb.IsEnabled = false;
uxConfigKeyTb.IsEnabled = false;
uxConfigValueTb.IsEnabled = false;
uxExpiryTimeTb.IsEnabled = false;
}
private void uxDestroyCb_Unchecked(object sender, RoutedEventArgs e)
{
isDestroyMode = false;
uxConnectorIdTb.IsEnabled = true;
uxReservationTb.IsEnabled = true;
uxIdTagTb.IsEnabled = true;
uxParentIdTagTb.IsEnabled = true;
uxTransactionIdTb.IsEnabled = true;
uxLocalListSizeTb.IsEnabled = true;
uxConfigKeyTb.IsEnabled = true;
uxConfigValueTb.IsEnabled = true;
uxExpiryTimeTb.IsEnabled = true;
}
}
}