Compare commits
62 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
afb935da72 | ||
|
|
61e201b261 | ||
|
|
fc009892f2 | ||
|
|
732f8b5fce | ||
|
|
ceec3a7616 | ||
|
|
763e6e3314 | ||
|
|
2ad1a531b8 | ||
|
|
c35c216c78 | ||
|
|
0a17fcf0b2 | ||
|
|
b36127c272 | ||
|
|
bd0769c997 | ||
|
|
27c2163784 | ||
|
|
624347b1a0 | ||
|
|
8bbac989cd | ||
|
|
fcb007bc98 | ||
|
|
2f7d2d07bb | ||
|
|
48f60abbfa | ||
|
|
20d19b2670 | ||
|
|
49e35bcd5e | ||
|
|
7a8a36e91b | ||
|
|
a0742c8c43 | ||
|
|
666c3a859f | ||
|
|
fb0620d178 | ||
|
|
1d6b32872b | ||
|
|
af4bc135da | ||
|
|
57483ad4c8 | ||
|
|
fcb2f62646 | ||
|
|
255eb35e7f | ||
|
|
22168d281f | ||
|
|
1438e55686 | ||
|
|
fd92b1c287 | ||
|
|
548281a3d7 | ||
|
|
e8d3338d9b | ||
|
|
40302fed4b | ||
|
|
edc1133023 | ||
|
|
bdb89a4bf9 | ||
|
|
0bb396eae4 | ||
|
|
f58c24be74 | ||
|
|
a58eced7bf | ||
|
|
22d87b8a62 | ||
|
|
ff9ae98887 | ||
|
|
44da46083e | ||
|
|
5916ccedb3 | ||
|
|
35d63d072c | ||
|
|
09d379d611 | ||
|
|
fcb189a4cd | ||
|
|
9d42ccc1d4 | ||
|
|
238f6e29ae | ||
|
|
ddb2527eb8 | ||
|
|
97a4c0aa45 | ||
|
|
4b975b1892 | ||
|
|
74e227ae27 | ||
|
|
69501b4623 | ||
|
|
36c713ba3f | ||
|
|
17a2905b14 | ||
|
|
df7155f061 | ||
|
|
52ecfda6c5 | ||
|
|
4900ef4888 | ||
|
|
150a9ab502 | ||
|
|
d3ba6c008a | ||
|
|
f1eb4b64d1 | ||
|
|
976feec650 |
@@ -9,9 +9,9 @@ package.cpath = package.cpath..";"..lfs.currentdir().."/LuaSocket/?.dll"
|
|||||||
|
|
||||||
Perun.RefreshStatus = 15 -- (int) base refresh rate in seconds to send status update (values lower than 60 may affect performance!)
|
Perun.RefreshStatus = 15 -- (int) base refresh rate in seconds to send status update (values lower than 60 may affect performance!)
|
||||||
Perun.RefreshMission = 60 -- (int) refresh rate in seconds to send mission information (values lower than 60 may affect performance!)
|
Perun.RefreshMission = 60 -- (int) refresh rate in seconds to send mission information (values lower than 60 may affect performance!)
|
||||||
Perun.UDPTargetPort = 48620 -- (int) UDP port to send data to
|
Perun.TCPTargetPort = 48622 -- (int) TCP port to send data to
|
||||||
Perun.UDPSourcePort = 48621 -- (int) UDP port to send data from
|
Perun.TCPPerunHost = "localhost" -- (string) IP adress of the Perun instance or "localhost"
|
||||||
Perun.Instance = 1 -- (int) Id number of instance (if multiple DCS instances are to run at the same PC)
|
Perun.Instance = 2 -- (int) Id number of instance (if multiple DCS instances are to run at the same PC)
|
||||||
Perun.JsonStatusLocation = "Scripts\\Json\\" -- (string) folder relative do user's SaveGames DCS folder -> status file updated each RefreshMission
|
Perun.JsonStatusLocation = "Scripts\\Json\\" -- (string) folder relative do user's SaveGames DCS folder -> status file updated each RefreshMission
|
||||||
Perun.MOTD_L1 = "Witamy na serwerze Gildia.org !" -- (string) Message send to players connecting the server - Line 1
|
Perun.MOTD_L1 = "Witamy na serwerze Gildia.org !" -- (string) Message send to players connecting the server - Line 1
|
||||||
Perun.MOTD_L2 = "Wymagamy obecnosci DCS SRS oraz TeamSpeak - szczegoly na forum" -- (string) Message send to players connecting the server - Line 2
|
Perun.MOTD_L2 = "Wymagamy obecnosci DCS SRS oraz TeamSpeak - szczegoly na forum" -- (string) Message send to players connecting the server - Line 2
|
||||||
@@ -20,7 +20,7 @@ Perun.MOTD_L2 = "Wymagamy obecnosci DCS SRS oraz TeamSpeak - szczegoly na forum"
|
|||||||
|
|
||||||
|
|
||||||
-- Variable init
|
-- Variable init
|
||||||
Perun.Version = "v0.7.0"
|
Perun.Version = "v0.8.2"
|
||||||
Perun.StatusData = {}
|
Perun.StatusData = {}
|
||||||
Perun.SlotsData = {}
|
Perun.SlotsData = {}
|
||||||
Perun.MissionData = {}
|
Perun.MissionData = {}
|
||||||
@@ -30,15 +30,16 @@ Perun.StatDataLastType = {}
|
|||||||
Perun.MissionHash=""
|
Perun.MissionHash=""
|
||||||
Perun.lastSentStatus =0
|
Perun.lastSentStatus =0
|
||||||
Perun.lastSentMission =0
|
Perun.lastSentMission =0
|
||||||
|
Perun.lastSentKeepAlive =0
|
||||||
|
Perun.lastReconnect = 0
|
||||||
Perun.JsonStatusLocation = lfs.writedir() .. Perun.JsonStatusLocation
|
Perun.JsonStatusLocation = lfs.writedir() .. Perun.JsonStatusLocation
|
||||||
Perun.socket = require("socket")
|
Perun.socket = require("socket")
|
||||||
Perun.IsServer = true --DCS.isServer( ) -- TBD looks like DCS API error, always returning True
|
Perun.IsServer = true --DCS.isServer( ) -- TBD looks like DCS API error, always returning True
|
||||||
Perun.UDPSourcePort = Perun.UDPSourcePort + Perun.Instance - 1
|
|
||||||
|
|
||||||
-- ########### Helper function definitions ###########
|
-- ########### Helper function definitions ###########
|
||||||
function stripChars(str)
|
function stripChars(str)
|
||||||
-- remove accents characters from string
|
-- remove accents characters from string
|
||||||
-- via https://stackoverflow.com/questions/50459102/replace-accented-characters-in-string-to-standard-with-lua TBD: rewrite
|
-- via https://stackoverflow.com/questions/50459102/replace-accented-characters-in-string-to-standard-with-lua
|
||||||
tableAccents = {}
|
tableAccents = {}
|
||||||
tableAccents["à"] = "a"
|
tableAccents["à"] = "a"
|
||||||
tableAccents["á"] = "a"
|
tableAccents["á"] = "a"
|
||||||
@@ -152,7 +153,13 @@ Perun.SideID2Name = function(id)
|
|||||||
return sides[id]
|
return sides[id]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Perun.UpdateStatusPart = function(part_id, data_package)
|
||||||
|
-- Helper for status update container
|
||||||
|
Perun.StatusData[part_id] = data_package
|
||||||
|
end
|
||||||
|
|
||||||
-- ########### Main code ###########
|
-- ########### Main code ###########
|
||||||
|
|
||||||
Perun.AddLog = function(text)
|
Perun.AddLog = function(text)
|
||||||
-- Adds logs to DCS.log file
|
-- Adds logs to DCS.log file
|
||||||
net.log("Perun : ".. text)
|
net.log("Perun : ".. text)
|
||||||
@@ -171,10 +178,28 @@ Perun.UpdateJsonStatus = function()
|
|||||||
perun_export = io.open(Perun.JsonStatusLocation .. "perun_status_data.json", "w")
|
perun_export = io.open(Perun.JsonStatusLocation .. "perun_status_data.json", "w")
|
||||||
perun_export:write(_temp .. "\n")
|
perun_export:write(_temp .. "\n")
|
||||||
perun_export:close()
|
perun_export:close()
|
||||||
|
Perun.AddLog("Updated JSON")
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.Send = function(data_id, data_package)
|
Perun.ConnectToPerun = function ()
|
||||||
-- Sends data package
|
-- Connects to Perun server
|
||||||
|
Perun.AddLog("Connecting to TCP server")
|
||||||
|
Perun.TCP = assert(Perun.socket.tcp())
|
||||||
|
Perun.TCP:settimeout(5000)
|
||||||
|
|
||||||
|
_, err = Perun.TCP:connect(Perun.TCPPerunHost, Perun.TCPTargetPort)
|
||||||
|
if err then
|
||||||
|
Perun.AddLog("TCP connection error : " .. err)
|
||||||
|
else
|
||||||
|
Perun.AddLog("Connected to TCP server")
|
||||||
|
Perun.TCP:setoption("keepalive")
|
||||||
|
Perun.lastReconnect = _now
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Perun.SendToPerun = function(data_id, data_package)
|
||||||
|
-- Prepares and sends data package
|
||||||
|
-- Prepare data
|
||||||
TempData={}
|
TempData={}
|
||||||
TempData["type"]=data_id
|
TempData["type"]=data_id
|
||||||
TempData["payload"]=data_package
|
TempData["payload"]=data_package
|
||||||
@@ -184,13 +209,25 @@ Perun.Send = function(data_id, data_package)
|
|||||||
temp=net.lua2json(TempData)
|
temp=net.lua2json(TempData)
|
||||||
temp=stripChars(temp)
|
temp=stripChars(temp)
|
||||||
|
|
||||||
Perun.UDP:send(temp)
|
-- TCP Part - sending
|
||||||
Perun.AddLog("Packet send "..data_id)
|
Perun.AddLog("Sending packet: " .. data_id)
|
||||||
end
|
intStatus = nil
|
||||||
|
intTries =0
|
||||||
Perun.UpdateStatusPart = function(part_id, data_package)
|
err=nil
|
||||||
-- Helper for status update container
|
while intStatus == nil and intTries < 3 do
|
||||||
Perun.StatusData[part_id] = data_package
|
intStatus, err = Perun.TCP:send(temp)
|
||||||
|
if err then
|
||||||
|
Perun.AddLog("Packed not send : " .. data_id .. " , error: " .. err .. ", tries: " .. intTries)
|
||||||
|
Perun.ConnectToPerun()
|
||||||
|
else
|
||||||
|
Perun.AddLog("Packet send : " .. data_id .. " , tries:" .. intTries)
|
||||||
|
end
|
||||||
|
intTries=intTries+1
|
||||||
|
err = nil
|
||||||
|
end
|
||||||
|
if err then
|
||||||
|
Perun.AddLog("Packed dropped : " .. data_id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.UpdateStatus = function()
|
Perun.UpdateStatus = function()
|
||||||
@@ -200,14 +237,14 @@ Perun.UpdateStatus = function()
|
|||||||
-- Update version data
|
-- Update version data
|
||||||
Perun.ServerData['v_dcs_hook']=Perun.Version
|
Perun.ServerData['v_dcs_hook']=Perun.Version
|
||||||
|
|
||||||
-- Update server data
|
-- Update clients data data
|
||||||
_table=net.get_player_list()
|
_table=net.get_player_list()
|
||||||
_count = 0
|
_count = 0
|
||||||
for _ in pairs(_table) do _count = _count + 1 end
|
for _ in pairs(_table) do _count = _count + 1 end
|
||||||
Perun.ServerData['c_players']=_count
|
Perun.ServerData['c_players']=_count
|
||||||
|
|
||||||
-- Send
|
-- Send
|
||||||
Perun.Send(1,Perun.ServerData)
|
Perun.SendToPerun(1,Perun.ServerData)
|
||||||
|
|
||||||
-- Status data - update all subsections
|
-- Status data - update all subsections
|
||||||
-- 1 - Mission
|
-- 1 - Mission
|
||||||
@@ -230,7 +267,7 @@ Perun.UpdateStatus = function()
|
|||||||
Perun.UpdateStatusPart("players",_temp2)
|
Perun.UpdateStatusPart("players",_temp2)
|
||||||
|
|
||||||
-- Send
|
-- Send
|
||||||
Perun.Send(2,Perun.StatusData)
|
Perun.SendToPerun(2,Perun.StatusData)
|
||||||
|
|
||||||
-- Update slots data
|
-- Update slots data
|
||||||
Perun.SlotsData['coalitions']=DCS.getAvailableCoalitions()
|
Perun.SlotsData['coalitions']=DCS.getAvailableCoalitions()
|
||||||
@@ -252,17 +289,18 @@ Perun.UpdateStatus = function()
|
|||||||
|
|
||||||
end
|
end
|
||||||
-- Send
|
-- Send
|
||||||
Perun.Send(3,Perun.SlotsData)
|
Perun.SendToPerun(3,Perun.SlotsData)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
Perun.UpdateMission = function()
|
Perun.UpdateMission = function()
|
||||||
-- Main function for mission information updates
|
-- Main function for mission information updates
|
||||||
Perun.MissionData=DCS.getCurrentMission()
|
Perun.MissionData=DCS.getCurrentMission()
|
||||||
|
-- Perun.SendToPerun(4,Perun.MissionData) -- TBD can cause data transmission troubles
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.LogChat = function(playerID,msg,all)
|
Perun.LogChat = function(playerID,msg,all)
|
||||||
-- Log chat messages
|
-- Logs chat messages
|
||||||
|
|
||||||
data={}
|
data={}
|
||||||
data['player']= net.get_player_info(playerID, "name")
|
data['player']= net.get_player_info(playerID, "name")
|
||||||
@@ -272,11 +310,11 @@ Perun.LogChat = function(playerID,msg,all)
|
|||||||
data['datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
data['datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
||||||
data['missionhash']=Perun.MissionHash
|
data['missionhash']=Perun.MissionHash
|
||||||
|
|
||||||
Perun.Send(50,data)
|
Perun.SendToPerun(50,data)
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.LogEvent = function(log_type,log_content,log_arg_1,log_arg_2)
|
Perun.LogEvent = function(log_type,log_content,log_arg_1,log_arg_2)
|
||||||
-- Log chat messages
|
-- Logs chat messages
|
||||||
|
|
||||||
data={}
|
data={}
|
||||||
data['log_type']= log_type
|
data['log_type']= log_type
|
||||||
@@ -286,7 +324,7 @@ Perun.LogEvent = function(log_type,log_content,log_arg_1,log_arg_2)
|
|||||||
data['log_datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
data['log_datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
||||||
data['log_missionhash']=Perun.MissionHash
|
data['log_missionhash']=Perun.MissionHash
|
||||||
|
|
||||||
Perun.Send(51,data)
|
Perun.SendToPerun(51,data)
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.LogStatsCount = function(argPlayerID,argAction,argType)
|
Perun.LogStatsCount = function(argPlayerID,argAction,argType)
|
||||||
@@ -333,7 +371,10 @@ Perun.LogStatsCount = function(argPlayerID,argAction,argType)
|
|||||||
if argAction == "eject" then
|
if argAction == "eject" then
|
||||||
Perun.StatData[_ucid]['ps_ejections']=Perun.StatData[_ucid]['ps_ejections']+1
|
Perun.StatData[_ucid]['ps_ejections']=Perun.StatData[_ucid]['ps_ejections']+1
|
||||||
elseif argAction == "pilot_death" then
|
elseif argAction == "pilot_death" then
|
||||||
Perun.StatData[_ucid]['ps_deaths']=Perun.StatData[_ucid]['ps_deaths']+1
|
if DCS.getModelTime() > 300 then
|
||||||
|
-- we do not track deaths during first 5 minutes due to spawning issues TBD
|
||||||
|
Perun.StatData[_ucid]['ps_deaths']=Perun.StatData[_ucid]['ps_deaths']+1
|
||||||
|
end
|
||||||
elseif argAction == "friendly_fire" then
|
elseif argAction == "friendly_fire" then
|
||||||
Perun.StatData[_ucid]['ps_teamkills']=Perun.StatData[_ucid]['ps_teamkills']+1
|
Perun.StatData[_ucid]['ps_teamkills']=Perun.StatData[_ucid]['ps_teamkills']+1
|
||||||
elseif argAction == "crash" then
|
elseif argAction == "crash" then
|
||||||
@@ -427,7 +468,7 @@ Perun.LogStats = function(playerID)
|
|||||||
data['stat_datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
data['stat_datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
||||||
data['stat_missionhash']=Perun.MissionHash
|
data['stat_missionhash']=Perun.MissionHash
|
||||||
|
|
||||||
Perun.Send(52,data)
|
Perun.SendToPerun(52,data)
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.LogLogin = function(playerID)
|
Perun.LogLogin = function(playerID)
|
||||||
@@ -439,7 +480,7 @@ Perun.LogLogin = function(playerID)
|
|||||||
data['login_name']=net.get_player_info(playerID, 'name')
|
data['login_name']=net.get_player_info(playerID, 'name')
|
||||||
data['login_datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
data['login_datetime']=os.date('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
Perun.Send(53,data)
|
Perun.SendToPerun(53,data)
|
||||||
end
|
end
|
||||||
|
|
||||||
--- ########### Event callbacks ###########
|
--- ########### Event callbacks ###########
|
||||||
@@ -484,6 +525,12 @@ Perun.onSimulationFrame = function()
|
|||||||
|
|
||||||
Perun.UpdateStatus()
|
Perun.UpdateStatus()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Send keepalive
|
||||||
|
if _now > Perun.lastSentKeepAlive + 5 then
|
||||||
|
Perun.lastSentKeepAlive = _now
|
||||||
|
Perun.SendToPerun(0,nil)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Perun.onPlayerStart = function (id)
|
Perun.onPlayerStart = function (id)
|
||||||
@@ -653,11 +700,7 @@ end
|
|||||||
|
|
||||||
-- ########### Finalize and set callbacks ###########
|
-- ########### Finalize and set callbacks ###########
|
||||||
if Perun.IsServer then
|
if Perun.IsServer then
|
||||||
Perun.UDP = assert(Perun.socket.udp())
|
|
||||||
Perun.UDP:settimeout(0)
|
|
||||||
Perun.UDP:setsockname("*", Perun.UDPSourcePort)
|
|
||||||
Perun.UDP:setpeername("127.0.0.1",Perun.UDPTargetPort)
|
|
||||||
|
|
||||||
DCS.setUserCallbacks(Perun)
|
DCS.setUserCallbacks(Perun)
|
||||||
net.log("Loaded - Perun - VladMordock - " .. Perun.Version )
|
net.log("Perun by VladMordock was loaded: " .. Perun.Version )
|
||||||
|
Perun.ConnectToPerun()
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
|
[]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 15.0.28307.421
|
VisualStudioVersion = 16.0.29306.81
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perun_v1", "Perun_v1\Perun_v1.csproj", "{5A710507-92E9-4664-9B91-918B8B82F107}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Perun_v1", "Perun_v1\Perun_v1.csproj", "{5A710507-92E9-4664-9B91-918B8B82F107}"
|
||||||
EndProject
|
EndProject
|
||||||
|
|||||||
@@ -3,21 +3,23 @@ using MySql.Data.MySqlClient;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
internal class DatabaseController
|
public class DatabaseController
|
||||||
{
|
{
|
||||||
public static string strMySQLConnectionString; // MySQL connection string
|
public string strMySQLConnectionString; // MySQL connection string
|
||||||
|
public MySqlConnection connMySQL;
|
||||||
|
public bool bStatus;
|
||||||
|
|
||||||
public static void SendToMySql(string strRawUDPFrame)
|
public void SendToMySql(string strRawUDPFrame)
|
||||||
{
|
{
|
||||||
// Main function to send data to mysql
|
// Main function to send data to mysql
|
||||||
dynamic strUDPFrame = JsonConvert.DeserializeObject(strRawUDPFrame); // Deserialize raw data
|
dynamic strUDPFrame = JsonConvert.DeserializeObject(strRawUDPFrame); // Deserialize raw data
|
||||||
string strUDPFrameType = strUDPFrame.type;
|
string strUDPFrameType = strUDPFrame.type;
|
||||||
string strUDPFrameTimestamp = strUDPFrame.timestamp;
|
string strUDPFrameTimestamp = strUDPFrame.timestamp;
|
||||||
string strUDPFrameInstance = strUDPFrame.instance;
|
string strUDPFrameInstance = strUDPFrame.instance;
|
||||||
string strUDPFramePayload = "";
|
string strUDPFramePayload;
|
||||||
string strUDPFramePayload_Perun = "";
|
string strUDPFramePayload_Perun;
|
||||||
string strSQLQueryTxt = "";
|
string strSQLQueryTxt;
|
||||||
|
|
||||||
|
|
||||||
// Some frames may come without timestamp, use database currrent timestampe then
|
// Some frames may come without timestamp, use database currrent timestampe then
|
||||||
if (strUDPFrameTimestamp != null)
|
if (strUDPFrameTimestamp != null)
|
||||||
@@ -30,18 +32,18 @@ internal class DatabaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Modify specific types
|
// Modify specific types
|
||||||
if (strUDPFrameType == "1")
|
if (strUDPFrameType == "1")
|
||||||
{
|
{
|
||||||
strUDPFrame.payload["v_win"] = "v" + Globals.strPerunVersion; // Inject app version information
|
strUDPFrame.payload["v_win"] = "v" + Globals.strPerunVersion; // Inject app version information
|
||||||
}
|
}
|
||||||
|
|
||||||
// Specific SQL
|
// Specific SQL per each frame type
|
||||||
if (strUDPFrameType == "50")
|
if (strUDPFrameType == "50")
|
||||||
{
|
{
|
||||||
// Add entry to chat log
|
// Add entry to chat log
|
||||||
strSQLQueryTxt = "INSERT INTO `pe_DataPlayers` (`pe_DataPlayers_ucid`) SELECT '" + strUDPFrame.payload.ucid + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataPlayers` where `pe_DataPlayers_ucid` = '" + strUDPFrame.payload.ucid + "' );";
|
strSQLQueryTxt = "INSERT INTO `pe_DataPlayers` (`pe_DataPlayers_ucid`) SELECT '" + strUDPFrame.payload.ucid + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataPlayers` where `pe_DataPlayers_ucid` = '" + strUDPFrame.payload.ucid + "' );";
|
||||||
strSQLQueryTxt += "UPDATE `pe_DataPlayers` SET `pe_DataPlayers_updated` = " + strUDPFrameTimestamp + ",`pe_DataPlayers_lastname`='" + strUDPFrame.payload.player + "' WHERE `pe_DataPlayers_ucid`='" + strUDPFrame.payload.ucid + "' ;";
|
strSQLQueryTxt += "UPDATE `pe_DataPlayers` SET `pe_DataPlayers_updated` = " + strUDPFrameTimestamp + ",`pe_DataPlayers_lastname`='" + strUDPFrame.payload.player + "' WHERE `pe_DataPlayers_ucid`='" + strUDPFrame.payload.ucid + "' ;";
|
||||||
strSQLQueryTxt += "INSERT INTO `pe_DataMissionHashes` (`pe_DataMissionHashes_hash`,`pe_DataMissionHashes_instance`) SELECT '" + strUDPFrame.payload.missionhash + "','" + strUDPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataMissionHashes` where `pe_DataMissionHashes_hash` ='" + strUDPFrame.payload.missionhash + "' AND `pe_DataMissionHashes_instance`="+ strUDPFrameInstance + ");";
|
strSQLQueryTxt += "INSERT INTO `pe_DataMissionHashes` (`pe_DataMissionHashes_hash`,`pe_DataMissionHashes_instance`) SELECT '" + strUDPFrame.payload.missionhash + "','" + strUDPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataMissionHashes` where `pe_DataMissionHashes_hash` ='" + strUDPFrame.payload.missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + ");";
|
||||||
strSQLQueryTxt += "UPDATE `pe_DataMissionHashes` SET `pe_DataMissionHashes_datetime` = " + strUDPFrameTimestamp + " WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + " ;";
|
strSQLQueryTxt += "UPDATE `pe_DataMissionHashes` SET `pe_DataMissionHashes_datetime` = " + strUDPFrameTimestamp + " WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + " ;";
|
||||||
strSQLQueryTxt += "INSERT INTO `pe_LogChat` (`pe_LogChat_id`,`pe_LogChat_datetime`, `pe_LogChat_playerid`, `pe_LogChat_msg`, `pe_LogChat_all`,`pe_LogChat_missionhash_id`) VALUES (NULL,'" + strUDPFrame.payload.datetime + "', (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + strUDPFrame.payload.ucid + "'), '" + strUDPFrame.payload.msg + "', '" + strUDPFrame.payload.all + "',(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.missionhash + "'));";
|
strSQLQueryTxt += "INSERT INTO `pe_LogChat` (`pe_LogChat_id`,`pe_LogChat_datetime`, `pe_LogChat_playerid`, `pe_LogChat_msg`, `pe_LogChat_all`,`pe_LogChat_missionhash_id`) VALUES (NULL,'" + strUDPFrame.payload.datetime + "', (SELECT `pe_DataPlayers_id` from `pe_DataPlayers` WHERE `pe_DataPlayers_ucid` = '" + strUDPFrame.payload.ucid + "'), '" + strUDPFrame.payload.msg + "', '" + strUDPFrame.payload.all + "',(SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.missionhash + "'));";
|
||||||
}
|
}
|
||||||
@@ -50,7 +52,7 @@ internal class DatabaseController
|
|||||||
// Add entry to event log
|
// Add entry to event log
|
||||||
strSQLQueryTxt = "INSERT INTO `pe_DataMissionHashes` (`pe_DataMissionHashes_hash`,`pe_DataMissionHashes_instance`) SELECT '" + strUDPFrame.payload.log_missionhash + "','" + strUDPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataMissionHashes` where `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.log_missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + ");";
|
strSQLQueryTxt = "INSERT INTO `pe_DataMissionHashes` (`pe_DataMissionHashes_hash`,`pe_DataMissionHashes_instance`) SELECT '" + strUDPFrame.payload.log_missionhash + "','" + strUDPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataMissionHashes` where `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.log_missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + ");";
|
||||||
strSQLQueryTxt += "UPDATE `pe_DataMissionHashes` SET `pe_DataMissionHashes_datetime` = " + strUDPFrameTimestamp + " WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.log_missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + ";";
|
strSQLQueryTxt += "UPDATE `pe_DataMissionHashes` SET `pe_DataMissionHashes_datetime` = " + strUDPFrameTimestamp + " WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.log_missionhash + "' AND `pe_DataMissionHashes_instance`=" + strUDPFrameInstance + ";";
|
||||||
strSQLQueryTxt += "INSERT INTO `pe_LogEvent` (`pe_LogEvent_arg1`,`pe_LogEvent_arg2`,`pe_LogEvent_id`, `pe_LogEvent_datetime`, `pe_LogEvent_type`, `pe_LogEvent_content`,`pe_LogEvent_missionhash_id`) VALUES ('"+ strUDPFrame.payload.log_arg_1 + "','"+ strUDPFrame.payload.log_arg_2 + "', NULL, '" + strUDPFrame.payload.log_datetime + "', '" + strUDPFrame.payload.log_type + "', '" + strUDPFrame.payload.log_content + "', (SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.log_missionhash + "'));";
|
strSQLQueryTxt += "INSERT INTO `pe_LogEvent` (`pe_LogEvent_arg1`,`pe_LogEvent_arg2`,`pe_LogEvent_id`, `pe_LogEvent_datetime`, `pe_LogEvent_type`, `pe_LogEvent_content`,`pe_LogEvent_missionhash_id`) VALUES ('" + strUDPFrame.payload.log_arg_1 + "','" + strUDPFrame.payload.log_arg_2 + "', NULL, '" + strUDPFrame.payload.log_datetime + "', '" + strUDPFrame.payload.log_type + "', '" + strUDPFrame.payload.log_content + "', (SELECT `pe_DataMissionHashes_id` FROM `pe_DataMissionHashes` WHERE `pe_DataMissionHashes_hash` = '" + strUDPFrame.payload.log_missionhash + "'));";
|
||||||
}
|
}
|
||||||
else if (strUDPFrameType == "52")
|
else if (strUDPFrameType == "52")
|
||||||
{
|
{
|
||||||
@@ -72,58 +74,72 @@ internal class DatabaseController
|
|||||||
|
|
||||||
strSQLQueryTxt = "INSERT INTO `pe_DataPlayers` (`pe_DataPlayers_ucid`) SELECT '" + strUDPFrame.payload.login_ucid + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataPlayers` where pe_DataPlayers_ucid='" + strUDPFrame.payload.login_ucid + "');";
|
strSQLQueryTxt = "INSERT INTO `pe_DataPlayers` (`pe_DataPlayers_ucid`) SELECT '" + strUDPFrame.payload.login_ucid + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataPlayers` where pe_DataPlayers_ucid='" + strUDPFrame.payload.login_ucid + "');";
|
||||||
strSQLQueryTxt += "UPDATE `pe_DataPlayers` SET pe_DataPlayers_lastip='" + strUDPFrame.payload.login_ipaddr + "', pe_DataPlayers_lastname='" + strUDPFrame.payload.login_name + "',pe_DataPlayers_updated='" + strUDPFrame.payload.login_datetime + "' WHERE `pe_DataPlayers_ucid`= '" + strUDPFrame.payload.login_ucid + "';";
|
strSQLQueryTxt += "UPDATE `pe_DataPlayers` SET pe_DataPlayers_lastip='" + strUDPFrame.payload.login_ipaddr + "', pe_DataPlayers_lastname='" + strUDPFrame.payload.login_name + "',pe_DataPlayers_updated='" + strUDPFrame.payload.login_datetime + "' WHERE `pe_DataPlayers_ucid`= '" + strUDPFrame.payload.login_ucid + "';";
|
||||||
strSQLQueryTxt += "INSERT INTO `pe_LogLogins` (`pe_LogLogins_datetime`, `pe_LogLogins_playerid`, `pe_LogLogins_name`, `pe_LogLogins_ip`,`pe_LogLogins_instance`) VALUES ('" + strUDPFrame.payload.login_datetime + "', (SELECT pe_DataPlayers_id from pe_DataPlayers WHERE pe_DataPlayers_ucid = '" + strUDPFrame.payload.login_ucid + "'), '" + strUDPFrame.payload.login_name + "', '" + strUDPFrame.payload.login_ipaddr + "','"+ strUDPFrameInstance + "');";
|
strSQLQueryTxt += "INSERT INTO `pe_LogLogins` (`pe_LogLogins_datetime`, `pe_LogLogins_playerid`, `pe_LogLogins_name`, `pe_LogLogins_ip`,`pe_LogLogins_instance`) VALUES ('" + strUDPFrame.payload.login_datetime + "', (SELECT pe_DataPlayers_id from pe_DataPlayers WHERE pe_DataPlayers_ucid = '" + strUDPFrame.payload.login_ucid + "'), '" + strUDPFrame.payload.login_name + "', '" + strUDPFrame.payload.login_ipaddr + "','" + strUDPFrameInstance + "');";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// General definition used for 1-10 type packets
|
// General definition used for 1-10 type packets
|
||||||
strUDPFramePayload = JsonConvert.SerializeObject(strUDPFrame.payload); // Deserialize payload
|
strUDPFramePayload = JsonConvert.SerializeObject(strUDPFrame.payload); // Deserialize payload
|
||||||
|
|
||||||
strSQLQueryTxt = "INSERT INTO `pe_DataRaw` (`pe_dataraw_type`,`pe_dataraw_instance`) SELECT '" + strUDPFrameType + "','"+ strUDPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataRaw` WHERE `pe_dataraw_type` = '" + strUDPFrameType + "' AND `pe_dataraw_instance` = " + strUDPFrameInstance + ");";
|
strSQLQueryTxt = "INSERT INTO `pe_DataRaw` (`pe_dataraw_type`,`pe_dataraw_instance`) SELECT '" + strUDPFrameType + "','" + strUDPFrameInstance + "' FROM DUAL WHERE NOT EXISTS (SELECT * FROM `pe_DataRaw` WHERE `pe_dataraw_type` = '" + strUDPFrameType + "' AND `pe_dataraw_instance` = " + strUDPFrameInstance + ");";
|
||||||
strSQLQueryTxt += "UPDATE `pe_DataRaw` SET `pe_dataraw_payload` = JSON_QUOTE('" + strUDPFramePayload + "'), `pe_dataraw_updated`=" + strUDPFrameTimestamp + " WHERE `pe_dataraw_type`=" + strUDPFrameType + " AND `pe_dataraw_instance` = "+ strUDPFrameInstance + ";";
|
strSQLQueryTxt += "UPDATE `pe_DataRaw` SET `pe_dataraw_payload` = JSON_QUOTE('" + strUDPFramePayload + "'), `pe_dataraw_updated`=" + strUDPFrameTimestamp + " WHERE `pe_dataraw_type`=" + strUDPFrameType + " AND `pe_dataraw_instance` = " + strUDPFrameInstance + ";";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect to mysql and execute sql
|
// Connect to mysql and execute sql
|
||||||
MySqlConnection connMySQL = new MySqlConnection(DatabaseController.strMySQLConnectionString);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Console.WriteLine("Sending data to MySQL - Begin");
|
connMySQL = new MySqlConnection(strMySQLConnectionString);
|
||||||
connMySQL.Open();
|
|
||||||
|
|
||||||
MySqlCommand cmdMySQL = new MySqlCommand(strSQLQueryTxt, connMySQL);
|
try
|
||||||
MySqlDataReader rdrMySQL = cmdMySQL.ExecuteReader();
|
{
|
||||||
|
Console.WriteLine("Sending data to MySQL - Begin");
|
||||||
|
connMySQL.Open();
|
||||||
|
bStatus = true;
|
||||||
|
MySqlCommand cmdMySQL = new MySqlCommand(strSQLQueryTxt, connMySQL);
|
||||||
|
MySqlDataReader rdrMySQL = cmdMySQL.ExecuteReader();
|
||||||
|
|
||||||
while (rdrMySQL.Read())
|
while (rdrMySQL.Read())
|
||||||
{
|
{
|
||||||
Console.WriteLine(rdrMySQL[0] + " -- " + rdrMySQL[1]);
|
Console.WriteLine(rdrMySQL[0] + " -- " + rdrMySQL[1]);
|
||||||
|
}
|
||||||
|
rdrMySQL.Close();
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > MySQL updated, package type: " + strUDPFrameType);
|
||||||
}
|
}
|
||||||
rdrMySQL.Close();
|
catch (ArgumentException a_ex)
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#"+strUDPFrameInstance + " > MySQL updated, package type: " + strUDPFrameType);
|
|
||||||
}
|
|
||||||
catch (ArgumentException a_ex)
|
|
||||||
{
|
|
||||||
// General exception found
|
|
||||||
Console.WriteLine(a_ex.ToString());
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - package type: " + strUDPFrameType);
|
|
||||||
}
|
|
||||||
catch (MySqlException m_ex)
|
|
||||||
{
|
|
||||||
// MySQL exception found
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - package type: " + strUDPFrameType);
|
|
||||||
switch (m_ex.Number)
|
|
||||||
{
|
{
|
||||||
case 1042: // Unable to connect to any of the specified MySQL hosts (Check Server,Port)
|
// General exception found
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - unable to connect");
|
Console.WriteLine(a_ex.ToString());
|
||||||
break;
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL - package type: " + strUDPFrameType);
|
||||||
case 0: // Access denied (Check DB name,username,password)
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL >" + a_ex.Message);
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - access denied");
|
bStatus = false;
|
||||||
break;
|
|
||||||
default:
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "ERROR MySQL - " + m_ex.Number);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
catch (MySqlException m_ex)
|
||||||
|
{
|
||||||
|
// MySQL exception found
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL - package type: " + strUDPFrameType);
|
||||||
|
switch (m_ex.Number)
|
||||||
|
{
|
||||||
|
case 1042: // Unable to connect to any of the specified MySQL hosts (Check Server,Port)
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL - unable to connect >" + m_ex.Message);
|
||||||
|
break;
|
||||||
|
case 0: // Access denied (Check DB name,username,password)
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL - access denied > " + m_ex.Message);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL > " + m_ex.Number);
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL > " + m_ex.Message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
bStatus = false;
|
||||||
|
}
|
||||||
|
connMySQL.Close();
|
||||||
|
Console.WriteLine("Sending data to MySQL - Done");
|
||||||
}
|
}
|
||||||
connMySQL.Close();
|
catch (ArgumentException x_ex)
|
||||||
Console.WriteLine("Sending data to MySQL - Done");
|
{
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + strUDPFrameInstance + " > ERROR MySQL - unable to connect > " + x_ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,22 @@
|
|||||||
// This class gathers all global variables
|
// This class gathers all global variable
|
||||||
|
|
||||||
internal class Globals
|
internal class Globals
|
||||||
{
|
{
|
||||||
public static string strPerunVersion = "DEBUG"; // Helper for pulling version definition
|
public static string strPerunVersion = "DEBUG"; // Helper for pulling version definition
|
||||||
public static string[] arrLogHistory = new string[10]; // Log history for GUI
|
public static string[] arrGUILogHistory = new string[10]; // Log history for GUI
|
||||||
}
|
public static bool bGUILogHistoryUpdate = true; // Flag if log control requires update
|
||||||
|
public static string strPerunTitleText = ""; // Helper to update title
|
||||||
|
public static int intInstanceId = 0; // Kepp the instance ID
|
||||||
|
public static bool bStatusIconsForce = true; // Force main window icons reload
|
||||||
|
public static bool bdcConnection = false; // Historic db connection status
|
||||||
|
public static bool bTCPServer = false; // Historic tcp connection status
|
||||||
|
public static bool bSRSStatus = false; // Historic srs connection status
|
||||||
|
public static bool bLotATCStatus = false; // Historic lotatc connection status
|
||||||
|
public static bool bClientConnected = false; // Flag if is TCP connectionstill alive
|
||||||
|
public static int intMysqlErros = 0; // MySQL - Error counter
|
||||||
|
public static int intGameErros = 0; // TCP connection - Error counter
|
||||||
|
public static int intGameErrosHistory = 0; // TCP connection - historic value of Error counter
|
||||||
|
public static int intSRSErros = 0; // DCS SRS - error counter
|
||||||
|
public static int intLotATCErros = 0; // LotATC - error counter
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
45
02_Windows_App/Perun_v1/01_Classes/LogController.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
class LogController
|
||||||
|
{
|
||||||
|
// TBD - done via https://stackoverflow.com/questions/20185015/how-to-write-log-file-in-c
|
||||||
|
public static void WriteLog(string strLog)
|
||||||
|
{
|
||||||
|
StreamWriter log;
|
||||||
|
FileStream fileStream = null;
|
||||||
|
DirectoryInfo logDirInfo = null;
|
||||||
|
FileInfo logFileInfo;
|
||||||
|
|
||||||
|
string logFilePath = Path.Combine(Environment.ExpandEnvironmentVariables("%userprofile%"), "Documents") + "\\Perun\\";
|
||||||
|
logFilePath = logFilePath + "Perun_Log_" + System.DateTime.Today.ToString("yyyyddMM") + "." + "txt";
|
||||||
|
logFileInfo = new FileInfo(logFilePath);
|
||||||
|
logDirInfo = new DirectoryInfo(logFileInfo.DirectoryName);
|
||||||
|
if (!logDirInfo.Exists) logDirInfo.Create();
|
||||||
|
if (!logFileInfo.Exists)
|
||||||
|
{
|
||||||
|
fileStream = logFileInfo.Create();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
fileStream = new FileStream(logFilePath, FileMode.Append);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
log = new StreamWriter(fileStream);
|
||||||
|
log.WriteLine(strLog);
|
||||||
|
log.Close();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// This class just wraps some Win32 stuff that we're going to use for blocking of multiple instances
|
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
internal class NativeMethods
|
|
||||||
{
|
|
||||||
public const int HWND_BROADCAST = 0xffff;
|
|
||||||
public static readonly int WM_SHOWME = RegisterWindowMessage("WM_SHOWME");
|
|
||||||
[DllImport("user32")]
|
|
||||||
public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
|
|
||||||
[DllImport("user32")]
|
|
||||||
public static extern int RegisterWindowMessage(string message);
|
|
||||||
}
|
|
||||||
@@ -1,26 +1,40 @@
|
|||||||
// This class gathers all helper functions
|
// This class gathers all helper functions
|
||||||
using System;
|
using System;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
internal class PerunHelper
|
internal class PerunHelper
|
||||||
{
|
{
|
||||||
public static void LogHistoryAdd(ref string[] arrLogHistory, string strEntryToAdd)
|
public static void GUILogHistoryAdd(ref string[] arrLogHistory, string strEntryToAdd)
|
||||||
{
|
{
|
||||||
// Add entry to log history and rotate
|
// Rotate log history
|
||||||
for (int i = 0; i < arrLogHistory.Length - 1; i++)
|
for (int i = 0; i < arrLogHistory.Length - 1; i++)
|
||||||
{
|
{
|
||||||
arrLogHistory[i] = arrLogHistory[i + 1]; // Shift one down
|
arrLogHistory[i] = arrLogHistory[i + 1]; // Shift one down
|
||||||
}
|
}
|
||||||
|
|
||||||
arrLogHistory[arrLogHistory.Length - 1] = DateTime.Now.ToString("HH:mm:ss") + " > " + strEntryToAdd; // Add entry at the last position
|
// Add new entry
|
||||||
|
arrLogHistory[arrLogHistory.Length - 1] = DateTime.Now.ToString("yyyy-dd-MM HH:mm:ss") + " > " + strEntryToAdd; // Add entry at the last position
|
||||||
|
|
||||||
|
// Add the entry to log file
|
||||||
|
LogController.WriteLog(arrLogHistory[arrLogHistory.Length - 1]);
|
||||||
|
|
||||||
|
// Update control at my window
|
||||||
|
Globals.bGUILogHistoryUpdate = true;
|
||||||
}
|
}
|
||||||
public static string GetAppVersion(string strBeginning)
|
public static string GetAppVersion(string strBeginning)
|
||||||
{
|
{
|
||||||
// Gets build version
|
// Gets build version
|
||||||
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
|
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
|
||||||
{
|
{
|
||||||
|
// For network deployed
|
||||||
System.Deployment.Application.ApplicationDeployment cd = System.Deployment.Application.ApplicationDeployment.CurrentDeployment;
|
System.Deployment.Application.ApplicationDeployment cd = System.Deployment.Application.ApplicationDeployment.CurrentDeployment;
|
||||||
Globals.strPerunVersion = cd.CurrentVersion.ToString();
|
Globals.strPerunVersion = cd.CurrentVersion.ToString();
|
||||||
}
|
}
|
||||||
return strBeginning+"v" + Globals.strPerunVersion;
|
else
|
||||||
|
{
|
||||||
|
// For other cases
|
||||||
|
Globals.strPerunVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||||
|
}
|
||||||
|
return strBeginning + "v" + Globals.strPerunVersion;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace Perun_v1
|
namespace Perun_v1
|
||||||
@@ -10,38 +9,20 @@ namespace Perun_v1
|
|||||||
/// Main entry point to app
|
/// Main entry point to app
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
||||||
// Mutex to block multiple instances
|
|
||||||
static Mutex mutex = new Mutex(true, "{5a710507-92e9-4664-9b91-918b8b82f107}");
|
|
||||||
|
|
||||||
[STAThread]
|
[STAThread]
|
||||||
|
|
||||||
static void Main()
|
static void Main()
|
||||||
{
|
{
|
||||||
// Check if no other instances running
|
// Main entry point to the app
|
||||||
if (mutex.WaitOne(TimeSpan.Zero, true))
|
Application.EnableVisualStyles();
|
||||||
{
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
// Only instance
|
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
||||||
Application.EnableVisualStyles();
|
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
|
||||||
Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
|
|
||||||
|
|
||||||
void Application_ApplicationExit(object sender, EventArgs e)
|
void Application_ApplicationExit(object sender, EventArgs e)
|
||||||
{
|
|
||||||
Properties.Settings.Default.Save(); // We will save settings on exit
|
|
||||||
}
|
|
||||||
Application.Run(new form_Main()); // Run main form
|
|
||||||
mutex.ReleaseMutex(); // Release mutex
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// Multiple instance - send our Win32 message to make the currently running instance jump to front
|
Properties.Settings.Default.Save(); // We will save settings on exit
|
||||||
NativeMethods.PostMessage(
|
|
||||||
(IntPtr)NativeMethods.HWND_BROADCAST,
|
|
||||||
NativeMethods.WM_SHOWME,
|
|
||||||
IntPtr.Zero,
|
|
||||||
IntPtr.Zero);
|
|
||||||
MessageBox.Show("Only one Perun instance is allowed.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
||||||
}
|
}
|
||||||
|
Application.Run(new form_Main()); // Run main form
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
171
02_Windows_App/Perun_v1/01_Classes/TCPController.cs
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
// This class handles TCP communication
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
|
||||||
|
public class TCPController
|
||||||
|
{
|
||||||
|
// Main class for TCP listener
|
||||||
|
public int intListenPort; // Port to connect to
|
||||||
|
public bool bCloseConnection; // Helper to exit main loop without killing thread
|
||||||
|
public string[] arrGUILogHistory; // Log history for GUI
|
||||||
|
public string[] arrMySQLSendBuffer; // MySQL send buffer
|
||||||
|
public Thread thrTCPListener; // Seperate thread for TCP
|
||||||
|
|
||||||
|
public void Create(int par_intListenPort, ref string[] par_arrLogHistory, ref string[] par_arrSendBuffer)
|
||||||
|
{
|
||||||
|
// Create class and map creation arguments to class
|
||||||
|
intListenPort = par_intListenPort;
|
||||||
|
arrGUILogHistory = par_arrLogHistory;
|
||||||
|
arrMySQLSendBuffer = par_arrSendBuffer;
|
||||||
|
bCloseConnection = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StopListen()
|
||||||
|
{
|
||||||
|
// Stop listening
|
||||||
|
bCloseConnection = true;
|
||||||
|
|
||||||
|
// Clear send buffer
|
||||||
|
for (int i = 0; i < arrMySQLSendBuffer.Length - 1; i++)
|
||||||
|
{
|
||||||
|
arrMySQLSendBuffer[i] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void StartListen()
|
||||||
|
{
|
||||||
|
// Start listening
|
||||||
|
NetworkStream nsReadStream = null;
|
||||||
|
TcpClient tcpClient = null;
|
||||||
|
bool bTCPConnectionOnline = false;
|
||||||
|
|
||||||
|
// Main loop - do until diconnect button is clicked
|
||||||
|
while (!bCloseConnection)
|
||||||
|
{
|
||||||
|
Console.WriteLine("TCP Listen start");
|
||||||
|
TcpListener tcpServer = new TcpListener(IPAddress.Any, intListenPort); ; // Create listener object
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Start listening to TCP
|
||||||
|
string strReceivedData;
|
||||||
|
|
||||||
|
// Start the main loop
|
||||||
|
tcpServer.Start();
|
||||||
|
|
||||||
|
// While user do not clicked Disconnect button
|
||||||
|
while (!bCloseConnection)
|
||||||
|
{
|
||||||
|
// Start listening
|
||||||
|
Console.WriteLine("TCP: Waiting for connection");
|
||||||
|
Globals.bClientConnected = false;
|
||||||
|
|
||||||
|
// Wait for pending connection
|
||||||
|
if (tcpServer.Pending())
|
||||||
|
{
|
||||||
|
Console.WriteLine("TCP: Connected");
|
||||||
|
bTCPConnectionOnline = true;
|
||||||
|
tcpClient = tcpServer.AcceptTcpClient(); //if a connection exists, the server will accept it
|
||||||
|
nsReadStream = tcpClient.GetStream(); //networkstream is used to send/receive messages
|
||||||
|
nsReadStream.ReadTimeout = 6000;
|
||||||
|
tcpClient.ReceiveTimeout = 6000;
|
||||||
|
|
||||||
|
|
||||||
|
while (tcpClient.Connected && !bCloseConnection && bTCPConnectionOnline) //while the client is connected, we look for incoming messages
|
||||||
|
{
|
||||||
|
StringBuilder CompleteMessage = new StringBuilder();
|
||||||
|
Globals.bClientConnected = true;
|
||||||
|
|
||||||
|
if (nsReadStream.CanRead)
|
||||||
|
{
|
||||||
|
Console.WriteLine("TCP: Can read");
|
||||||
|
byte[] ReadBuffer = new byte[1024];
|
||||||
|
CompleteMessage = new StringBuilder();
|
||||||
|
int numberOfBytesRead = 0;
|
||||||
|
|
||||||
|
// Incoming message may be larger than the buffer size.
|
||||||
|
do
|
||||||
|
{
|
||||||
|
Console.WriteLine("TCP: Read");
|
||||||
|
numberOfBytesRead = nsReadStream.Read(ReadBuffer, 0, ReadBuffer.Length);
|
||||||
|
CompleteMessage.AppendFormat("{0}", Encoding.ASCII.GetString(ReadBuffer, 0, numberOfBytesRead));
|
||||||
|
if (numberOfBytesRead == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (nsReadStream.DataAvailable && nsReadStream.CanRead && tcpClient.Connected);
|
||||||
|
}
|
||||||
|
strReceivedData = CompleteMessage.ToString();
|
||||||
|
Console.WriteLine("Sender: {0} Payload: {1}", null, strReceivedData);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (strReceivedData != "")
|
||||||
|
{
|
||||||
|
dynamic dynamicRawTCPFrame = JsonConvert.DeserializeObject(strReceivedData); // Deserialize received frame
|
||||||
|
string strRawTCPFrameType = dynamicRawTCPFrame.type;
|
||||||
|
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref arrGUILogHistory, "#" + Globals.intInstanceId + "> TCP packet received, type: " + strRawTCPFrameType);
|
||||||
|
|
||||||
|
// Add to mySQL send buffer (find first empty slot)
|
||||||
|
if (Int32.Parse(strRawTCPFrameType) != 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < arrMySQLSendBuffer.Length - 1; i++)
|
||||||
|
{
|
||||||
|
if (arrMySQLSendBuffer[i] == null)
|
||||||
|
{
|
||||||
|
arrMySQLSendBuffer[i] = strReceivedData;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bTCPConnectionOnline = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Globals.intGameErros++;
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref arrGUILogHistory, "#" + Globals.intInstanceId + " > TCP ERROR incorrect JSON > " + e.Message);
|
||||||
|
bTCPConnectionOnline = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.Threading.Thread.Sleep(500);
|
||||||
|
}
|
||||||
|
tcpServer.Stop();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Globals.intGameErros++;
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref arrGUILogHistory, "#" + Globals.intInstanceId + " > TCP error - connection closed or port in use > " + e.Message);
|
||||||
|
bTCPConnectionOnline = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up and prepare for next connection
|
||||||
|
if (!(nsReadStream is null))
|
||||||
|
{
|
||||||
|
nsReadStream.Flush();
|
||||||
|
nsReadStream.Close();
|
||||||
|
}
|
||||||
|
if (!(tcpClient is null))
|
||||||
|
{
|
||||||
|
tcpClient.Close();
|
||||||
|
}
|
||||||
|
if (!(tcpServer is null))
|
||||||
|
{
|
||||||
|
tcpServer.Stop();
|
||||||
|
}
|
||||||
|
Console.WriteLine("TCP listen stop");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
// This class handles UDP communication
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using System;
|
|
||||||
using System.Net;
|
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
internal class UDPController
|
|
||||||
{
|
|
||||||
// Main class for UDP listener
|
|
||||||
public static int intListenPort; // Port to listen at
|
|
||||||
public static bool boolDone; // Helper to exit main loop without killing thread
|
|
||||||
public static UdpClient udpListener; // Listener object
|
|
||||||
public static string[] arrLogHistory; // Log history for GUI
|
|
||||||
public static string[] arrSendBuffer; // Mysql send buffer
|
|
||||||
public static Thread thrUDPListener; // Seperate thread for UDP
|
|
||||||
|
|
||||||
public static void Create(int intListenPort, ref string[] arrLogHistory, ref string[] arrSendBuffer)
|
|
||||||
{
|
|
||||||
// Create class
|
|
||||||
UDPController.intListenPort = intListenPort;
|
|
||||||
UDPController.arrLogHistory = arrLogHistory;
|
|
||||||
UDPController.arrSendBuffer = arrSendBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void StopListen()
|
|
||||||
{
|
|
||||||
// FInish listening
|
|
||||||
UDPController.boolDone = true;
|
|
||||||
UDPController.udpListener.Close();
|
|
||||||
UDPController.udpListener = null;
|
|
||||||
|
|
||||||
for (int i = 0; i < arrSendBuffer.Length - 1; i++)
|
|
||||||
{
|
|
||||||
arrSendBuffer[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void StartListen()
|
|
||||||
{
|
|
||||||
Console.WriteLine("UDP Listen start");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// Start listening to UDP
|
|
||||||
|
|
||||||
udpListener = new UdpClient(intListenPort);
|
|
||||||
IPEndPoint ipendpointGroupEP = new IPEndPoint(IPAddress.Loopback, intListenPort);
|
|
||||||
string strReceivedData;
|
|
||||||
byte[] arrReceiveByteArray;
|
|
||||||
|
|
||||||
// Start the main loop
|
|
||||||
UDPController.boolDone = false;
|
|
||||||
while (!UDPController.boolDone)
|
|
||||||
{
|
|
||||||
// Start listening
|
|
||||||
Console.WriteLine("UDP: Waiting for packet");
|
|
||||||
arrReceiveByteArray = udpListener.Receive(ref ipendpointGroupEP);
|
|
||||||
strReceivedData = Encoding.ASCII.GetString(arrReceiveByteArray, 0, arrReceiveByteArray.Length);
|
|
||||||
Console.WriteLine("Sender: {0} Payload: {1}", ipendpointGroupEP.ToString(), strReceivedData);
|
|
||||||
|
|
||||||
// Add to log history and rotate
|
|
||||||
dynamic dynamicRawUDPFrame = JsonConvert.DeserializeObject(strReceivedData); // Deserialize received frame
|
|
||||||
string strRawUDPFrameType = dynamicRawUDPFrame.type;
|
|
||||||
PerunHelper.LogHistoryAdd(ref arrLogHistory, "UDP packet received, type: " + strRawUDPFrameType);
|
|
||||||
|
|
||||||
// Add to mySQL send buffer (find first empty slot)
|
|
||||||
for (int i = 0; i < arrSendBuffer.Length - 1; i++)
|
|
||||||
{
|
|
||||||
if (arrSendBuffer[i] == null)
|
|
||||||
{
|
|
||||||
arrSendBuffer[i] = strReceivedData;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
udpListener.Close(); // Close port
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
// General exception found
|
|
||||||
if (e.HResult != -2147467259) {
|
|
||||||
Console.WriteLine(e.ToString());
|
|
||||||
PerunHelper.LogHistoryAdd(ref arrLogHistory, "ERROR UDP - port may be in use");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Console.WriteLine("UDP listen stop");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
267
02_Windows_App/Perun_v1/02_Forms/form_Main.Designer.cs
generated
@@ -34,7 +34,7 @@
|
|||||||
this.con_Button_Listen_ON = new System.Windows.Forms.Button();
|
this.con_Button_Listen_ON = new System.Windows.Forms.Button();
|
||||||
this.con_Button_Listen_OFF = new System.Windows.Forms.Button();
|
this.con_Button_Listen_OFF = new System.Windows.Forms.Button();
|
||||||
this.con_GroupBox_1 = new System.Windows.Forms.GroupBox();
|
this.con_GroupBox_1 = new System.Windows.Forms.GroupBox();
|
||||||
this.tim_1000ms = new System.Windows.Forms.Timer(this.components);
|
this.tim_GUI = new System.Windows.Forms.Timer(this.components);
|
||||||
this.con_GroupBox_2 = new System.Windows.Forms.GroupBox();
|
this.con_GroupBox_2 = new System.Windows.Forms.GroupBox();
|
||||||
this.label6 = new System.Windows.Forms.Label();
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
this.con_txt_mysql_port = new System.Windows.Forms.TextBox();
|
this.con_txt_mysql_port = new System.Windows.Forms.TextBox();
|
||||||
@@ -57,18 +57,29 @@
|
|||||||
this.trayIconMain = new System.Windows.Forms.NotifyIcon(this.components);
|
this.trayIconMain = new System.Windows.Forms.NotifyIcon(this.components);
|
||||||
this.openFileDialog_SRS = new System.Windows.Forms.OpenFileDialog();
|
this.openFileDialog_SRS = new System.Windows.Forms.OpenFileDialog();
|
||||||
this.openFileDialog_LotATC = new System.Windows.Forms.OpenFileDialog();
|
this.openFileDialog_LotATC = new System.Windows.Forms.OpenFileDialog();
|
||||||
this.tim_10000ms = new System.Windows.Forms.Timer(this.components);
|
this.tim_3rdparties = new System.Windows.Forms.Timer(this.components);
|
||||||
this.tim_200ms = new System.Windows.Forms.Timer(this.components);
|
this.tim_MySQL = new System.Windows.Forms.Timer(this.components);
|
||||||
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
|
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||||
this.con_txt_3rd_lotatc2 = new System.Windows.Forms.MaskedTextBox();
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
this.con_txt_3rd_srs2 = new System.Windows.Forms.MaskedTextBox();
|
this.con_txt_dcs_instance = new System.Windows.Forms.MaskedTextBox();
|
||||||
this.con_check_3rd_lotatc2 = new System.Windows.Forms.CheckBox();
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
this.con_check_3rd_srs2 = new System.Windows.Forms.CheckBox();
|
this.con_txt_dcs_server_port = new System.Windows.Forms.MaskedTextBox();
|
||||||
|
this.label9 = new System.Windows.Forms.Label();
|
||||||
|
this.label10 = new System.Windows.Forms.Label();
|
||||||
|
this.label11 = new System.Windows.Forms.Label();
|
||||||
|
this.label12 = new System.Windows.Forms.Label();
|
||||||
|
this.con_img_lotATC = new System.Windows.Forms.PictureBox();
|
||||||
|
this.con_img_srs = new System.Windows.Forms.PictureBox();
|
||||||
|
this.con_img_dcs = new System.Windows.Forms.PictureBox();
|
||||||
|
this.con_img_db = new System.Windows.Forms.PictureBox();
|
||||||
this.con_GroupBox_1.SuspendLayout();
|
this.con_GroupBox_1.SuspendLayout();
|
||||||
this.con_GroupBox_2.SuspendLayout();
|
this.con_GroupBox_2.SuspendLayout();
|
||||||
this.con_GroupBox_3.SuspendLayout();
|
this.con_GroupBox_3.SuspendLayout();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_lotATC)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_srs)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_dcs)).BeginInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_db)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// con_List_Received
|
// con_List_Received
|
||||||
@@ -76,47 +87,48 @@
|
|||||||
this.con_List_Received.Enabled = false;
|
this.con_List_Received.Enabled = false;
|
||||||
this.con_List_Received.FormattingEnabled = true;
|
this.con_List_Received.FormattingEnabled = true;
|
||||||
this.con_List_Received.Items.AddRange(new object[] {
|
this.con_List_Received.Items.AddRange(new object[] {
|
||||||
"Welcome to Perun for DCS World!"});
|
"Not connected"});
|
||||||
this.con_List_Received.Location = new System.Drawing.Point(6, 19);
|
this.con_List_Received.Location = new System.Drawing.Point(11, 19);
|
||||||
this.con_List_Received.Name = "con_List_Received";
|
this.con_List_Received.Name = "con_List_Received";
|
||||||
this.con_List_Received.Size = new System.Drawing.Size(307, 147);
|
this.con_List_Received.Size = new System.Drawing.Size(307, 134);
|
||||||
this.con_List_Received.TabIndex = 0;
|
this.con_List_Received.TabIndex = 0;
|
||||||
|
this.con_List_Received.SelectedIndexChanged += new System.EventHandler(this.con_List_Received_SelectedIndexChanged);
|
||||||
//
|
//
|
||||||
// con_Button_Listen_ON
|
// con_Button_Listen_ON
|
||||||
//
|
//
|
||||||
this.con_Button_Listen_ON.Location = new System.Drawing.Point(12, 517);
|
this.con_Button_Listen_ON.Location = new System.Drawing.Point(12, 553);
|
||||||
this.con_Button_Listen_ON.Name = "con_Button_Listen_ON";
|
this.con_Button_Listen_ON.Name = "con_Button_Listen_ON";
|
||||||
this.con_Button_Listen_ON.Size = new System.Drawing.Size(86, 39);
|
this.con_Button_Listen_ON.Size = new System.Drawing.Size(86, 39);
|
||||||
this.con_Button_Listen_ON.TabIndex = 2;
|
this.con_Button_Listen_ON.TabIndex = 2;
|
||||||
this.con_Button_Listen_ON.Text = "Connect";
|
this.con_Button_Listen_ON.Text = "Start";
|
||||||
this.con_Button_Listen_ON.UseVisualStyleBackColor = true;
|
this.con_Button_Listen_ON.UseVisualStyleBackColor = true;
|
||||||
this.con_Button_Listen_ON.Click += new System.EventHandler(this.con_Button_Listen_ON_Click);
|
this.con_Button_Listen_ON.Click += new System.EventHandler(this.con_Button_Listen_ON_Click);
|
||||||
//
|
//
|
||||||
// con_Button_Listen_OFF
|
// con_Button_Listen_OFF
|
||||||
//
|
//
|
||||||
this.con_Button_Listen_OFF.Enabled = false;
|
this.con_Button_Listen_OFF.Enabled = false;
|
||||||
this.con_Button_Listen_OFF.Location = new System.Drawing.Point(104, 517);
|
this.con_Button_Listen_OFF.Location = new System.Drawing.Point(104, 553);
|
||||||
this.con_Button_Listen_OFF.Name = "con_Button_Listen_OFF";
|
this.con_Button_Listen_OFF.Name = "con_Button_Listen_OFF";
|
||||||
this.con_Button_Listen_OFF.Size = new System.Drawing.Size(86, 39);
|
this.con_Button_Listen_OFF.Size = new System.Drawing.Size(86, 39);
|
||||||
this.con_Button_Listen_OFF.TabIndex = 3;
|
this.con_Button_Listen_OFF.TabIndex = 3;
|
||||||
this.con_Button_Listen_OFF.Text = "Disconnect";
|
this.con_Button_Listen_OFF.Text = "Stop";
|
||||||
this.con_Button_Listen_OFF.UseVisualStyleBackColor = true;
|
this.con_Button_Listen_OFF.UseVisualStyleBackColor = true;
|
||||||
this.con_Button_Listen_OFF.Click += new System.EventHandler(this.con_Button_Listen_OFF_Click);
|
this.con_Button_Listen_OFF.Click += new System.EventHandler(this.con_Button_Listen_OFF_Click);
|
||||||
//
|
//
|
||||||
// con_GroupBox_1
|
// con_GroupBox_1
|
||||||
//
|
//
|
||||||
this.con_GroupBox_1.Controls.Add(this.con_List_Received);
|
this.con_GroupBox_1.Controls.Add(this.con_List_Received);
|
||||||
this.con_GroupBox_1.Location = new System.Drawing.Point(12, 335);
|
this.con_GroupBox_1.Location = new System.Drawing.Point(12, 385);
|
||||||
this.con_GroupBox_1.Name = "con_GroupBox_1";
|
this.con_GroupBox_1.Name = "con_GroupBox_1";
|
||||||
this.con_GroupBox_1.Size = new System.Drawing.Size(324, 176);
|
this.con_GroupBox_1.Size = new System.Drawing.Size(324, 162);
|
||||||
this.con_GroupBox_1.TabIndex = 4;
|
this.con_GroupBox_1.TabIndex = 4;
|
||||||
this.con_GroupBox_1.TabStop = false;
|
this.con_GroupBox_1.TabStop = false;
|
||||||
this.con_GroupBox_1.Text = "UDP log";
|
this.con_GroupBox_1.Text = "Data log";
|
||||||
//
|
//
|
||||||
// tim_1000ms
|
// tim_GUI
|
||||||
//
|
//
|
||||||
this.tim_1000ms.Interval = 1000;
|
this.tim_GUI.Interval = 200;
|
||||||
this.tim_1000ms.Tick += new System.EventHandler(this.timer1_Tick);
|
this.tim_GUI.Tick += new System.EventHandler(this.Tim_GUI_Tick);
|
||||||
//
|
//
|
||||||
// con_GroupBox_2
|
// con_GroupBox_2
|
||||||
//
|
//
|
||||||
@@ -148,7 +160,6 @@
|
|||||||
//
|
//
|
||||||
// con_txt_mysql_port
|
// con_txt_mysql_port
|
||||||
//
|
//
|
||||||
this.con_txt_mysql_port.Enabled = false;
|
|
||||||
this.con_txt_mysql_port.Location = new System.Drawing.Point(106, 45);
|
this.con_txt_mysql_port.Location = new System.Drawing.Point(106, 45);
|
||||||
this.con_txt_mysql_port.Name = "con_txt_mysql_port";
|
this.con_txt_mysql_port.Name = "con_txt_mysql_port";
|
||||||
this.con_txt_mysql_port.Size = new System.Drawing.Size(207, 20);
|
this.con_txt_mysql_port.Size = new System.Drawing.Size(207, 20);
|
||||||
@@ -225,12 +236,12 @@
|
|||||||
this.con_GroupBox_3.Controls.Add(this.con_txt_3rd_srs);
|
this.con_GroupBox_3.Controls.Add(this.con_txt_3rd_srs);
|
||||||
this.con_GroupBox_3.Controls.Add(this.con_check_3rd_lotatc);
|
this.con_GroupBox_3.Controls.Add(this.con_check_3rd_lotatc);
|
||||||
this.con_GroupBox_3.Controls.Add(this.con_check_3rd_srs);
|
this.con_GroupBox_3.Controls.Add(this.con_check_3rd_srs);
|
||||||
this.con_GroupBox_3.Location = new System.Drawing.Point(12, 187);
|
this.con_GroupBox_3.Location = new System.Drawing.Point(12, 261);
|
||||||
this.con_GroupBox_3.Name = "con_GroupBox_3";
|
this.con_GroupBox_3.Name = "con_GroupBox_3";
|
||||||
this.con_GroupBox_3.Size = new System.Drawing.Size(324, 68);
|
this.con_GroupBox_3.Size = new System.Drawing.Size(324, 68);
|
||||||
this.con_GroupBox_3.TabIndex = 6;
|
this.con_GroupBox_3.TabIndex = 6;
|
||||||
this.con_GroupBox_3.TabStop = false;
|
this.con_GroupBox_3.TabStop = false;
|
||||||
this.con_GroupBox_3.Text = "Instance #1";
|
this.con_GroupBox_3.Text = "3rd party";
|
||||||
//
|
//
|
||||||
// con_txt_3rd_lotatc
|
// con_txt_3rd_lotatc
|
||||||
//
|
//
|
||||||
@@ -270,7 +281,7 @@
|
|||||||
//
|
//
|
||||||
// con_Button_Quit
|
// con_Button_Quit
|
||||||
//
|
//
|
||||||
this.con_Button_Quit.Location = new System.Drawing.Point(251, 517);
|
this.con_Button_Quit.Location = new System.Drawing.Point(251, 553);
|
||||||
this.con_Button_Quit.Name = "con_Button_Quit";
|
this.con_Button_Quit.Name = "con_Button_Quit";
|
||||||
this.con_Button_Quit.Size = new System.Drawing.Size(86, 39);
|
this.con_Button_Quit.Size = new System.Drawing.Size(86, 39);
|
||||||
this.con_Button_Quit.TabIndex = 7;
|
this.con_Button_Quit.TabIndex = 7;
|
||||||
@@ -316,79 +327,163 @@
|
|||||||
//
|
//
|
||||||
this.openFileDialog_LotATC.FileName = "openFileDialog1";
|
this.openFileDialog_LotATC.FileName = "openFileDialog1";
|
||||||
//
|
//
|
||||||
// tim_10000ms
|
// tim_3rdparties
|
||||||
//
|
//
|
||||||
this.tim_10000ms.Interval = 30000;
|
this.tim_3rdparties.Interval = 30000;
|
||||||
this.tim_10000ms.Tick += new System.EventHandler(this.tim_10000ms_Tick);
|
this.tim_3rdparties.Tick += new System.EventHandler(this.tim_3rdparties_Tick);
|
||||||
//
|
//
|
||||||
// tim_200ms
|
// tim_MySQL
|
||||||
//
|
//
|
||||||
this.tim_200ms.Tick += new System.EventHandler(this.tim_200ms_Tick);
|
this.tim_MySQL.Tick += new System.EventHandler(this.Tim_MySQL_Tick);
|
||||||
//
|
|
||||||
// notifyIcon1
|
|
||||||
//
|
|
||||||
this.notifyIcon1.Text = "notifyIcon1";
|
|
||||||
this.notifyIcon1.Visible = true;
|
|
||||||
//
|
//
|
||||||
// groupBox1
|
// groupBox1
|
||||||
//
|
//
|
||||||
this.groupBox1.Controls.Add(this.con_txt_3rd_lotatc2);
|
this.groupBox1.Controls.Add(this.label8);
|
||||||
this.groupBox1.Controls.Add(this.con_txt_3rd_srs2);
|
this.groupBox1.Controls.Add(this.con_txt_dcs_instance);
|
||||||
this.groupBox1.Controls.Add(this.con_check_3rd_lotatc2);
|
this.groupBox1.Controls.Add(this.label7);
|
||||||
this.groupBox1.Controls.Add(this.con_check_3rd_srs2);
|
this.groupBox1.Controls.Add(this.con_txt_dcs_server_port);
|
||||||
this.groupBox1.Location = new System.Drawing.Point(12, 261);
|
this.groupBox1.Location = new System.Drawing.Point(12, 187);
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.Size = new System.Drawing.Size(324, 68);
|
this.groupBox1.Size = new System.Drawing.Size(324, 68);
|
||||||
this.groupBox1.TabIndex = 7;
|
this.groupBox1.TabIndex = 7;
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
this.groupBox1.Text = "Instance #2";
|
this.groupBox1.Text = "DCS Connection";
|
||||||
//
|
//
|
||||||
// con_txt_3rd_lotatc2
|
// label8
|
||||||
//
|
//
|
||||||
this.con_txt_3rd_lotatc2.Location = new System.Drawing.Point(123, 39);
|
this.label8.AutoSize = true;
|
||||||
this.con_txt_3rd_lotatc2.Name = "con_txt_3rd_lotatc2";
|
this.label8.Location = new System.Drawing.Point(41, 45);
|
||||||
this.con_txt_3rd_lotatc2.Size = new System.Drawing.Size(190, 20);
|
this.label8.Name = "label8";
|
||||||
this.con_txt_3rd_lotatc2.TabIndex = 4;
|
this.label8.Size = new System.Drawing.Size(62, 13);
|
||||||
this.con_txt_3rd_lotatc2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.con_txt_3rd_lotatc2_Click);
|
this.label8.TabIndex = 12;
|
||||||
|
this.label8.Text = "Instance ID";
|
||||||
//
|
//
|
||||||
// con_txt_3rd_srs2
|
// con_txt_dcs_instance
|
||||||
//
|
//
|
||||||
this.con_txt_3rd_srs2.Location = new System.Drawing.Point(123, 16);
|
this.con_txt_dcs_instance.Location = new System.Drawing.Point(106, 42);
|
||||||
this.con_txt_3rd_srs2.Name = "con_txt_3rd_srs2";
|
this.con_txt_dcs_instance.Name = "con_txt_dcs_instance";
|
||||||
this.con_txt_3rd_srs2.Size = new System.Drawing.Size(190, 20);
|
this.con_txt_dcs_instance.Size = new System.Drawing.Size(207, 20);
|
||||||
this.con_txt_3rd_srs2.TabIndex = 3;
|
this.con_txt_dcs_instance.TabIndex = 11;
|
||||||
this.con_txt_3rd_srs2.MouseClick += new System.Windows.Forms.MouseEventHandler(this.con_txt_3rd_srs2_Click);
|
|
||||||
//
|
//
|
||||||
// con_check_3rd_lotatc2
|
// label7
|
||||||
//
|
//
|
||||||
this.con_check_3rd_lotatc2.AutoSize = true;
|
this.label7.AutoSize = true;
|
||||||
this.con_check_3rd_lotatc2.Location = new System.Drawing.Point(6, 42);
|
this.label7.Location = new System.Drawing.Point(41, 19);
|
||||||
this.con_check_3rd_lotatc2.Name = "con_check_3rd_lotatc2";
|
this.label7.Name = "label7";
|
||||||
this.con_check_3rd_lotatc2.Size = new System.Drawing.Size(100, 17);
|
this.label7.Size = new System.Drawing.Size(59, 13);
|
||||||
this.con_check_3rd_lotatc2.TabIndex = 1;
|
this.label7.TabIndex = 10;
|
||||||
this.con_check_3rd_lotatc2.Text = "LotATC json file";
|
this.label7.Text = "Server port";
|
||||||
this.con_check_3rd_lotatc2.UseVisualStyleBackColor = true;
|
|
||||||
//
|
//
|
||||||
// con_check_3rd_srs2
|
// con_txt_dcs_server_port
|
||||||
//
|
//
|
||||||
this.con_check_3rd_srs2.AutoSize = true;
|
this.con_txt_dcs_server_port.Location = new System.Drawing.Point(106, 16);
|
||||||
this.con_check_3rd_srs2.Location = new System.Drawing.Point(6, 19);
|
this.con_txt_dcs_server_port.Name = "con_txt_dcs_server_port";
|
||||||
this.con_check_3rd_srs2.Name = "con_check_3rd_srs2";
|
this.con_txt_dcs_server_port.Size = new System.Drawing.Size(207, 20);
|
||||||
this.con_check_3rd_srs2.Size = new System.Drawing.Size(111, 17);
|
this.con_txt_dcs_server_port.TabIndex = 3;
|
||||||
this.con_check_3rd_srs2.TabIndex = 0;
|
//
|
||||||
this.con_check_3rd_srs2.Text = "DCS SRS json file";
|
// label9
|
||||||
this.con_check_3rd_srs2.UseVisualStyleBackColor = true;
|
//
|
||||||
|
this.label9.AutoSize = true;
|
||||||
|
this.label9.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label9.Location = new System.Drawing.Point(21, 369);
|
||||||
|
this.label9.Name = "label9";
|
||||||
|
this.label9.Size = new System.Drawing.Size(61, 13);
|
||||||
|
this.label9.TabIndex = 1;
|
||||||
|
this.label9.Text = "Database";
|
||||||
|
//
|
||||||
|
// label10
|
||||||
|
//
|
||||||
|
this.label10.AutoSize = true;
|
||||||
|
this.label10.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label10.Location = new System.Drawing.Point(117, 369);
|
||||||
|
this.label10.Name = "label10";
|
||||||
|
this.label10.Size = new System.Drawing.Size(39, 13);
|
||||||
|
this.label10.TabIndex = 14;
|
||||||
|
this.label10.Text = "Game";
|
||||||
|
//
|
||||||
|
// label11
|
||||||
|
//
|
||||||
|
this.label11.AutoSize = true;
|
||||||
|
this.label11.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label11.Location = new System.Drawing.Point(205, 369);
|
||||||
|
this.label11.Name = "label11";
|
||||||
|
this.label11.Size = new System.Drawing.Size(32, 13);
|
||||||
|
this.label11.TabIndex = 15;
|
||||||
|
this.label11.Text = "SRS";
|
||||||
|
//
|
||||||
|
// label12
|
||||||
|
//
|
||||||
|
this.label12.AutoSize = true;
|
||||||
|
this.label12.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
|
this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label12.Location = new System.Drawing.Point(282, 369);
|
||||||
|
this.label12.Name = "label12";
|
||||||
|
this.label12.Size = new System.Drawing.Size(49, 13);
|
||||||
|
this.label12.TabIndex = 16;
|
||||||
|
this.label12.Text = "LotATC";
|
||||||
|
//
|
||||||
|
// con_img_lotATC
|
||||||
|
//
|
||||||
|
this.con_img_lotATC.Image = global::Perun_v1.Properties.Resources.status_disconnected;
|
||||||
|
this.con_img_lotATC.Location = new System.Drawing.Point(292, 335);
|
||||||
|
this.con_img_lotATC.Name = "con_img_lotATC";
|
||||||
|
this.con_img_lotATC.Size = new System.Drawing.Size(29, 28);
|
||||||
|
this.con_img_lotATC.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
|
this.con_img_lotATC.TabIndex = 13;
|
||||||
|
this.con_img_lotATC.TabStop = false;
|
||||||
|
//
|
||||||
|
// con_img_srs
|
||||||
|
//
|
||||||
|
this.con_img_srs.Image = global::Perun_v1.Properties.Resources.status_disconnected;
|
||||||
|
this.con_img_srs.Location = new System.Drawing.Point(207, 335);
|
||||||
|
this.con_img_srs.Name = "con_img_srs";
|
||||||
|
this.con_img_srs.Size = new System.Drawing.Size(29, 28);
|
||||||
|
this.con_img_srs.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
|
this.con_img_srs.TabIndex = 12;
|
||||||
|
this.con_img_srs.TabStop = false;
|
||||||
|
//
|
||||||
|
// con_img_dcs
|
||||||
|
//
|
||||||
|
this.con_img_dcs.Image = global::Perun_v1.Properties.Resources.status_disconnected;
|
||||||
|
this.con_img_dcs.Location = new System.Drawing.Point(122, 335);
|
||||||
|
this.con_img_dcs.Name = "con_img_dcs";
|
||||||
|
this.con_img_dcs.Size = new System.Drawing.Size(29, 28);
|
||||||
|
this.con_img_dcs.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
|
this.con_img_dcs.TabIndex = 11;
|
||||||
|
this.con_img_dcs.TabStop = false;
|
||||||
|
//
|
||||||
|
// con_img_db
|
||||||
|
//
|
||||||
|
this.con_img_db.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
|
||||||
|
this.con_img_db.Image = global::Perun_v1.Properties.Resources.status_disconnected;
|
||||||
|
this.con_img_db.Location = new System.Drawing.Point(37, 335);
|
||||||
|
this.con_img_db.Name = "con_img_db";
|
||||||
|
this.con_img_db.Size = new System.Drawing.Size(29, 28);
|
||||||
|
this.con_img_db.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
|
||||||
|
this.con_img_db.TabIndex = 10;
|
||||||
|
this.con_img_db.TabStop = false;
|
||||||
//
|
//
|
||||||
// form_Main
|
// form_Main
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(349, 558);
|
this.ClientSize = new System.Drawing.Size(349, 604);
|
||||||
|
this.Controls.Add(this.label12);
|
||||||
|
this.Controls.Add(this.label11);
|
||||||
|
this.Controls.Add(this.label10);
|
||||||
|
this.Controls.Add(this.label9);
|
||||||
|
this.Controls.Add(this.con_img_lotATC);
|
||||||
|
this.Controls.Add(this.con_img_srs);
|
||||||
|
this.Controls.Add(this.con_img_dcs);
|
||||||
|
this.Controls.Add(this.con_img_db);
|
||||||
this.Controls.Add(this.groupBox1);
|
this.Controls.Add(this.groupBox1);
|
||||||
|
this.Controls.Add(this.con_GroupBox_3);
|
||||||
this.Controls.Add(this.label5);
|
this.Controls.Add(this.label5);
|
||||||
this.Controls.Add(this.con_lab_github);
|
this.Controls.Add(this.con_lab_github);
|
||||||
this.Controls.Add(this.con_Button_Quit);
|
this.Controls.Add(this.con_Button_Quit);
|
||||||
this.Controls.Add(this.con_GroupBox_3);
|
|
||||||
this.Controls.Add(this.con_GroupBox_2);
|
this.Controls.Add(this.con_GroupBox_2);
|
||||||
this.Controls.Add(this.con_GroupBox_1);
|
this.Controls.Add(this.con_GroupBox_1);
|
||||||
this.Controls.Add(this.con_Button_Listen_OFF);
|
this.Controls.Add(this.con_Button_Listen_OFF);
|
||||||
@@ -396,10 +491,9 @@
|
|||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.MaximizeBox = false;
|
this.MaximizeBox = false;
|
||||||
this.MinimizeBox = false;
|
|
||||||
this.Name = "form_Main";
|
this.Name = "form_Main";
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
this.Text = "Perun for DCS World";
|
this.Text = "Perun for DCS";
|
||||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.form_Main_FormClosing);
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.form_Main_FormClosing);
|
||||||
this.Load += new System.EventHandler(this.form_Main_Load);
|
this.Load += new System.EventHandler(this.form_Main_Load);
|
||||||
this.con_GroupBox_1.ResumeLayout(false);
|
this.con_GroupBox_1.ResumeLayout(false);
|
||||||
@@ -409,6 +503,10 @@
|
|||||||
this.con_GroupBox_3.PerformLayout();
|
this.con_GroupBox_3.PerformLayout();
|
||||||
this.groupBox1.ResumeLayout(false);
|
this.groupBox1.ResumeLayout(false);
|
||||||
this.groupBox1.PerformLayout();
|
this.groupBox1.PerformLayout();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_lotATC)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_srs)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_dcs)).EndInit();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.con_img_db)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
this.PerformLayout();
|
this.PerformLayout();
|
||||||
|
|
||||||
@@ -420,7 +518,7 @@
|
|||||||
private System.Windows.Forms.Button con_Button_Listen_ON;
|
private System.Windows.Forms.Button con_Button_Listen_ON;
|
||||||
private System.Windows.Forms.Button con_Button_Listen_OFF;
|
private System.Windows.Forms.Button con_Button_Listen_OFF;
|
||||||
private System.Windows.Forms.GroupBox con_GroupBox_1;
|
private System.Windows.Forms.GroupBox con_GroupBox_1;
|
||||||
private System.Windows.Forms.Timer tim_1000ms;
|
private System.Windows.Forms.Timer tim_GUI;
|
||||||
private System.Windows.Forms.GroupBox con_GroupBox_2;
|
private System.Windows.Forms.GroupBox con_GroupBox_2;
|
||||||
private System.Windows.Forms.GroupBox con_GroupBox_3;
|
private System.Windows.Forms.GroupBox con_GroupBox_3;
|
||||||
private System.Windows.Forms.TextBox con_txt_mysql_database;
|
private System.Windows.Forms.TextBox con_txt_mysql_database;
|
||||||
@@ -441,16 +539,23 @@
|
|||||||
private System.Windows.Forms.NotifyIcon trayIconMain;
|
private System.Windows.Forms.NotifyIcon trayIconMain;
|
||||||
private System.Windows.Forms.OpenFileDialog openFileDialog_SRS;
|
private System.Windows.Forms.OpenFileDialog openFileDialog_SRS;
|
||||||
private System.Windows.Forms.OpenFileDialog openFileDialog_LotATC;
|
private System.Windows.Forms.OpenFileDialog openFileDialog_LotATC;
|
||||||
private System.Windows.Forms.Timer tim_10000ms;
|
private System.Windows.Forms.Timer tim_3rdparties;
|
||||||
private System.Windows.Forms.Label label6;
|
private System.Windows.Forms.Label label6;
|
||||||
private System.Windows.Forms.TextBox con_txt_mysql_port;
|
private System.Windows.Forms.TextBox con_txt_mysql_port;
|
||||||
private System.Windows.Forms.Timer tim_200ms;
|
private System.Windows.Forms.Timer tim_MySQL;
|
||||||
private System.Windows.Forms.NotifyIcon notifyIcon1;
|
|
||||||
private System.Windows.Forms.GroupBox groupBox1;
|
private System.Windows.Forms.GroupBox groupBox1;
|
||||||
private System.Windows.Forms.MaskedTextBox con_txt_3rd_lotatc2;
|
private System.Windows.Forms.MaskedTextBox con_txt_dcs_server_port;
|
||||||
private System.Windows.Forms.MaskedTextBox con_txt_3rd_srs2;
|
private System.Windows.Forms.Label label7;
|
||||||
private System.Windows.Forms.CheckBox con_check_3rd_lotatc2;
|
private System.Windows.Forms.Label label8;
|
||||||
private System.Windows.Forms.CheckBox con_check_3rd_srs2;
|
private System.Windows.Forms.MaskedTextBox con_txt_dcs_instance;
|
||||||
|
private System.Windows.Forms.PictureBox con_img_db;
|
||||||
|
private System.Windows.Forms.PictureBox con_img_dcs;
|
||||||
|
private System.Windows.Forms.PictureBox con_img_srs;
|
||||||
|
private System.Windows.Forms.PictureBox con_img_lotATC;
|
||||||
|
private System.Windows.Forms.Label label9;
|
||||||
|
private System.Windows.Forms.Label label10;
|
||||||
|
private System.Windows.Forms.Label label11;
|
||||||
|
private System.Windows.Forms.Label label12;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,73 @@
|
|||||||
using System;
|
using Newtonsoft.Json;
|
||||||
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Drawing;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using Newtonsoft.Json;
|
|
||||||
|
|
||||||
namespace Perun_v1
|
namespace Perun_v1
|
||||||
{
|
{
|
||||||
public partial class form_Main : Form
|
public partial class form_Main : Form
|
||||||
{
|
{
|
||||||
// Variable definitions
|
// Variable definitions
|
||||||
public string[] arrSendBuffer = new string[100]; // Mysql send buffer
|
public string[] arrMySQLSendBuffer = new string[65534]; // MySQL send buffer
|
||||||
public bool boolLetMeOut = false; // Helper to handle system tray
|
public bool bAllowAppClosure = false; // Helper to handle system tray
|
||||||
|
|
||||||
|
public DatabaseController dcConnection = new DatabaseController(); // MySQL controller
|
||||||
|
public TCPController tcpServer = new TCPController(); // TCP controller
|
||||||
|
|
||||||
|
public bool bSRSStatus; // Use empty/default SRS status
|
||||||
|
public bool bLotATCStatus; // Use empty/default LotATC status
|
||||||
|
|
||||||
// ################################ Main ################################
|
// ################################ Main ################################
|
||||||
private void form_Main_Load(object sender, EventArgs e)
|
private void form_Main_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Form loaded - fill controls with default values
|
// Form loaded - fill controls with default values
|
||||||
|
Globals.arrGUILogHistory[0] = DateTime.Now.ToString("HH:mm:ss") + " > " + "Perun started";
|
||||||
|
|
||||||
Globals.arrLogHistory[0] = DateTime.Now.ToString("HH:mm:ss") + " > " + "Perun started";
|
// Display build version in title bar
|
||||||
form_Main_LoadSettings(); // Load settings
|
Globals.strPerunTitleText = PerunHelper.GetAppVersion(this.Text + " - ");
|
||||||
this.Text = PerunHelper.GetAppVersion(this.Text + " - "); // Display build version in title bar
|
this.Text = Globals.strPerunTitleText;
|
||||||
|
|
||||||
|
// Load settings from registry
|
||||||
|
form_Main_LoadSettings();
|
||||||
|
|
||||||
|
// Use command line parameters
|
||||||
|
string[] args = Environment.GetCommandLineArgs();
|
||||||
|
if (args.Length > 1)
|
||||||
|
{
|
||||||
|
// Get argument server port
|
||||||
|
if (args[1] != null)
|
||||||
|
{
|
||||||
|
con_txt_dcs_server_port.Text = args[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args.Length > 2)
|
||||||
|
{
|
||||||
|
// Get argument instance id
|
||||||
|
if (args[2] != null)
|
||||||
|
{
|
||||||
|
con_txt_dcs_instance.Text = args[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args.Length > 3)
|
||||||
|
{
|
||||||
|
// Get argument DCS SRS file path
|
||||||
|
if (args[3] != null)
|
||||||
|
{
|
||||||
|
con_txt_3rd_srs.Text = args[3];
|
||||||
|
con_check_3rd_srs.Checked = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (args.Length > 4)
|
||||||
|
{
|
||||||
|
// Get argument lotATC file path
|
||||||
|
if (args[4] != null)
|
||||||
|
{
|
||||||
|
con_txt_3rd_lotatc.Text = args[4];
|
||||||
|
con_check_3rd_lotatc.Checked = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public form_Main()
|
public form_Main()
|
||||||
@@ -31,7 +79,7 @@ namespace Perun_v1
|
|||||||
// ################################ Helpers ################################
|
// ################################ Helpers ################################
|
||||||
private void form_Main_LoadSettings()
|
private void form_Main_LoadSettings()
|
||||||
{
|
{
|
||||||
// Loads settings
|
// Loads registry settings
|
||||||
con_txt_mysql_database.Text = Properties.Settings.Default.MYSQL_DB;
|
con_txt_mysql_database.Text = Properties.Settings.Default.MYSQL_DB;
|
||||||
con_txt_mysql_username.Text = Properties.Settings.Default.MYSQL_User;
|
con_txt_mysql_username.Text = Properties.Settings.Default.MYSQL_User;
|
||||||
con_txt_mysql_password.Text = Properties.Settings.Default.MYSQL_Password;
|
con_txt_mysql_password.Text = Properties.Settings.Default.MYSQL_Password;
|
||||||
@@ -41,15 +89,13 @@ namespace Perun_v1
|
|||||||
con_txt_3rd_srs.Text = Properties.Settings.Default.OTHER_SRS_FILE;
|
con_txt_3rd_srs.Text = Properties.Settings.Default.OTHER_SRS_FILE;
|
||||||
con_check_3rd_lotatc.Checked = Properties.Settings.Default.OTHER_LOTATC_USE;
|
con_check_3rd_lotatc.Checked = Properties.Settings.Default.OTHER_LOTATC_USE;
|
||||||
con_check_3rd_srs.Checked = Properties.Settings.Default.OTHER_SRS_USE;
|
con_check_3rd_srs.Checked = Properties.Settings.Default.OTHER_SRS_USE;
|
||||||
con_txt_3rd_lotatc2.Text = Properties.Settings.Default.OTHER_LOTATC_FILE2;
|
con_txt_dcs_server_port.Text = Properties.Settings.Default.DCS_Server_Port.ToString();
|
||||||
con_txt_3rd_srs2.Text = Properties.Settings.Default.OTHER_SRS_FILE2;
|
con_txt_dcs_instance.Text = Properties.Settings.Default.DCS_Instance.ToString();
|
||||||
con_check_3rd_lotatc2.Checked = Properties.Settings.Default.OTHER_LOTATC_USE2;
|
|
||||||
con_check_3rd_srs2.Checked = Properties.Settings.Default.OTHER_SRS_USE2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void form_Main_SaveSettings()
|
private void form_Main_SaveSettings()
|
||||||
{
|
{
|
||||||
// Saves settings
|
// Saves registry settings
|
||||||
Properties.Settings.Default.MYSQL_Server = con_txt_mysql_database.Text;
|
Properties.Settings.Default.MYSQL_Server = con_txt_mysql_database.Text;
|
||||||
Properties.Settings.Default.MYSQL_DB = con_txt_mysql_database.Text;
|
Properties.Settings.Default.MYSQL_DB = con_txt_mysql_database.Text;
|
||||||
Properties.Settings.Default.MYSQL_User = con_txt_mysql_username.Text;
|
Properties.Settings.Default.MYSQL_User = con_txt_mysql_username.Text;
|
||||||
@@ -61,10 +107,8 @@ namespace Perun_v1
|
|||||||
Properties.Settings.Default.OTHER_SRS_FILE = con_txt_3rd_srs.Text;
|
Properties.Settings.Default.OTHER_SRS_FILE = con_txt_3rd_srs.Text;
|
||||||
Properties.Settings.Default.OTHER_LOTATC_USE = con_check_3rd_lotatc.Checked;
|
Properties.Settings.Default.OTHER_LOTATC_USE = con_check_3rd_lotatc.Checked;
|
||||||
Properties.Settings.Default.OTHER_SRS_USE = con_check_3rd_srs.Checked;
|
Properties.Settings.Default.OTHER_SRS_USE = con_check_3rd_srs.Checked;
|
||||||
Properties.Settings.Default.OTHER_LOTATC_FILE2 = con_txt_3rd_lotatc2.Text;
|
Properties.Settings.Default.DCS_Server_Port = Int32.Parse(con_txt_dcs_server_port.Text);
|
||||||
Properties.Settings.Default.OTHER_SRS_FILE2 = con_txt_3rd_srs2.Text;
|
Properties.Settings.Default.DCS_Instance = Int32.Parse(con_txt_dcs_instance.Text);
|
||||||
Properties.Settings.Default.OTHER_LOTATC_USE2 = con_check_3rd_lotatc2.Checked;
|
|
||||||
Properties.Settings.Default.OTHER_SRS_USE2 = con_check_3rd_srs2.Checked;
|
|
||||||
|
|
||||||
Properties.Settings.Default.Save();
|
Properties.Settings.Default.Save();
|
||||||
}
|
}
|
||||||
@@ -74,6 +118,7 @@ namespace Perun_v1
|
|||||||
// Disables controls
|
// Disables controls
|
||||||
con_Button_Listen_ON.Enabled = false;
|
con_Button_Listen_ON.Enabled = false;
|
||||||
con_Button_Listen_OFF.Enabled = true;
|
con_Button_Listen_OFF.Enabled = true;
|
||||||
|
con_Button_Quit.Enabled = false;
|
||||||
con_txt_mysql_database.Enabled = false;
|
con_txt_mysql_database.Enabled = false;
|
||||||
con_txt_mysql_username.Enabled = false;
|
con_txt_mysql_username.Enabled = false;
|
||||||
con_txt_mysql_password.Enabled = false;
|
con_txt_mysql_password.Enabled = false;
|
||||||
@@ -83,10 +128,8 @@ namespace Perun_v1
|
|||||||
con_txt_3rd_srs.Enabled = false;
|
con_txt_3rd_srs.Enabled = false;
|
||||||
con_check_3rd_lotatc.Enabled = false;
|
con_check_3rd_lotatc.Enabled = false;
|
||||||
con_check_3rd_srs.Enabled = false;
|
con_check_3rd_srs.Enabled = false;
|
||||||
con_txt_3rd_lotatc2.Enabled = false;
|
con_txt_dcs_server_port.Enabled = false;
|
||||||
con_txt_3rd_srs2.Enabled = false;
|
con_txt_dcs_instance.Enabled = false;
|
||||||
con_check_3rd_lotatc2.Enabled = false;
|
|
||||||
con_check_3rd_srs2.Enabled = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void form_Main_EnableControls()
|
private void form_Main_EnableControls()
|
||||||
@@ -94,61 +137,115 @@ namespace Perun_v1
|
|||||||
// Enables controls
|
// Enables controls
|
||||||
con_Button_Listen_ON.Enabled = true;
|
con_Button_Listen_ON.Enabled = true;
|
||||||
con_Button_Listen_OFF.Enabled = false;
|
con_Button_Listen_OFF.Enabled = false;
|
||||||
|
con_Button_Quit.Enabled = true;
|
||||||
con_txt_mysql_database.Enabled = true;
|
con_txt_mysql_database.Enabled = true;
|
||||||
con_txt_mysql_username.Enabled = true;
|
con_txt_mysql_username.Enabled = true;
|
||||||
con_txt_mysql_password.Enabled = true;
|
con_txt_mysql_password.Enabled = true;
|
||||||
//con_txt_mysql_port.Enabled = true; // TBD - protect against writting text in the port field
|
con_txt_mysql_port.Enabled = true;
|
||||||
con_txt_mysql_server.Enabled = true;
|
con_txt_mysql_server.Enabled = true;
|
||||||
con_txt_3rd_lotatc.Enabled = true;
|
con_txt_3rd_lotatc.Enabled = true;
|
||||||
con_txt_3rd_srs.Enabled = true;
|
con_txt_3rd_srs.Enabled = true;
|
||||||
con_check_3rd_lotatc.Enabled = true;
|
con_check_3rd_lotatc.Enabled = true;
|
||||||
con_check_3rd_srs.Enabled = true;
|
con_check_3rd_srs.Enabled = true;
|
||||||
con_txt_3rd_lotatc2.Enabled = true;
|
con_txt_dcs_server_port.Enabled = true;
|
||||||
con_txt_3rd_srs2.Enabled = true;
|
con_txt_dcs_instance.Enabled = true;
|
||||||
con_check_3rd_lotatc2.Enabled = true;
|
|
||||||
con_check_3rd_srs2.Enabled = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ################################ User input ################################
|
// ################################ User input ################################
|
||||||
private void con_Button_Listen_ON_Click(object sender, EventArgs e)
|
private void con_Button_Listen_ON_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Start listening
|
// Start listening
|
||||||
UDPController.Create(48620, ref Globals.arrLogHistory, ref arrSendBuffer);
|
// Set globals
|
||||||
UDPController.thrUDPListener = new Thread(UDPController.StartListen);
|
Globals.intInstanceId = Int32.Parse(con_txt_dcs_instance.Text);
|
||||||
UDPController.thrUDPListener.Start();
|
Globals.bStatusIconsForce = true;
|
||||||
UDPController.thrUDPListener.Name = "UDPThread";
|
|
||||||
|
|
||||||
form_Main_DisableControls(); // Disable controlls
|
Globals.intMysqlErros = 0; // Reset error counter
|
||||||
form_Main_SaveSettings(); // Save settings
|
Globals.intGameErros = 0; // Reset error counter
|
||||||
|
Globals.intSRSErros = 0; // Reset error counter
|
||||||
|
Globals.intLotATCErros = 0; // Reset error counter
|
||||||
|
|
||||||
// Prepare connection string
|
Globals.bClientConnected = false; // Reset connection status
|
||||||
DatabaseController.strMySQLConnectionString = "server=" + con_txt_mysql_server.Text + ";user=" + con_txt_mysql_username.Text + ";database=" + con_txt_mysql_database.Text + ";port=" + con_txt_mysql_port.Text + ";password=" + con_txt_mysql_password.Text;
|
|
||||||
|
// Prepare GUI
|
||||||
|
form_Main_DisableControls();
|
||||||
|
form_Main_SaveSettings();
|
||||||
|
this.Text = "[#" + con_txt_dcs_instance.Text + "] " + Globals.strPerunTitleText; // Set title bar
|
||||||
|
trayIconMain.Text = this.Text; // Set notification icon text
|
||||||
|
|
||||||
|
// Prepare MySQL connection string
|
||||||
|
dcConnection.strMySQLConnectionString = "server=" + con_txt_mysql_server.Text + ";user=" + con_txt_mysql_username.Text + ";database=" + con_txt_mysql_database.Text + ";port=" + con_txt_mysql_port.Text + ";password=" + con_txt_mysql_password.Text;
|
||||||
|
|
||||||
|
// Start listening
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Globals.intInstanceId + " > " + "Opening connections");
|
||||||
|
tcpServer.Create(Int32.Parse(con_txt_dcs_server_port.Text), ref Globals.arrGUILogHistory, ref arrMySQLSendBuffer);
|
||||||
|
tcpServer.thrTCPListener = new Thread(tcpServer.StartListen);
|
||||||
|
tcpServer.thrTCPListener.Start();
|
||||||
|
tcpServer.thrTCPListener.Name = "TCPThread";
|
||||||
|
|
||||||
// Start timmers
|
// Start timmers
|
||||||
tim_200ms.Enabled = true;
|
tim_MySQL.Enabled = true;
|
||||||
tim_1000ms.Enabled = true;
|
tim_GUI.Enabled = true;
|
||||||
tim_10000ms.Enabled = true;
|
tim_3rdparties.Enabled = true;
|
||||||
|
|
||||||
|
// Send initial data
|
||||||
|
Tim_MySQL_Tick(null, null);
|
||||||
|
tim_3rdparties_Tick(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void con_Button_Listen_OFF_Click(object sender, EventArgs e)
|
private void con_Button_Listen_OFF_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Stop listening
|
// Stop listening
|
||||||
|
// Prepare GUI
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Globals.intInstanceId + " > " + "Closing connections");
|
||||||
|
con_Button_Listen_OFF.Enabled = false;
|
||||||
|
Tim_GUI_Tick(null, null);
|
||||||
|
this.Refresh();
|
||||||
|
Application.DoEvents();
|
||||||
|
|
||||||
|
// Stop timmers
|
||||||
|
tim_GUI.Enabled = false;
|
||||||
|
tim_3rdparties.Enabled = false;
|
||||||
|
tim_MySQL.Enabled = false;
|
||||||
|
|
||||||
|
// Wait untill TCP server closed connection
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
UDPController.StopListen();
|
tcpServer.StopListen();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine(ex.ToString());
|
Console.WriteLine(ex.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (tcpServer.thrTCPListener.IsAlive)
|
||||||
|
{
|
||||||
|
Thread.Sleep(100); //ms
|
||||||
|
}
|
||||||
form_Main_EnableControls(); // Enable controls
|
form_Main_EnableControls(); // Enable controls
|
||||||
|
|
||||||
// Stop timmers
|
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected");
|
||||||
tim_1000ms.Enabled = false;
|
con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected");
|
||||||
tim_10000ms.Enabled = false;
|
con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected");
|
||||||
tim_200ms.Enabled = false;
|
con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected");
|
||||||
|
|
||||||
|
// Display information about closed connections
|
||||||
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Globals.intInstanceId + " > " + "Connections closed");
|
||||||
|
Tim_GUI_Tick(null, null);
|
||||||
|
|
||||||
|
// Set title bar
|
||||||
|
this.Text = Globals.strPerunTitleText;
|
||||||
|
trayIconMain.Text = this.Text;
|
||||||
|
|
||||||
|
// Set globals
|
||||||
|
Globals.intInstanceId = 0;
|
||||||
|
|
||||||
|
// Set helpers for updates
|
||||||
|
Globals.bGUILogHistoryUpdate = false;
|
||||||
|
Globals.bdcConnection = false;
|
||||||
|
Globals.bTCPServer = false;
|
||||||
|
Globals.bSRSStatus = false;
|
||||||
|
Globals.bLotATCStatus = false;
|
||||||
|
Globals.bClientConnected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void con_lab_github_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
private void con_lab_github_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
@@ -188,36 +285,6 @@ namespace Perun_v1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void con_txt_3rd_srs2_Click(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
// Chose SRS Json file
|
|
||||||
if (openFileDialog_SRS.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
|
||||||
con_txt_3rd_srs2.Text = openFileDialog_SRS.FileName;
|
|
||||||
con_check_3rd_srs2.Checked = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
con_txt_3rd_srs2.Text = "";
|
|
||||||
con_check_3rd_srs2.Checked = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void con_txt_3rd_lotatc2_Click(object sender, MouseEventArgs e)
|
|
||||||
{
|
|
||||||
// Chose LotATC Json file
|
|
||||||
if (openFileDialog_LotATC.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
|
||||||
con_txt_3rd_lotatc2.Text = openFileDialog_LotATC.FileName;
|
|
||||||
con_check_3rd_lotatc2.Checked = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
con_txt_3rd_lotatc2.Text = "";
|
|
||||||
con_check_3rd_lotatc2.Checked = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ################################ Form state ################################
|
// ################################ Form state ################################
|
||||||
private void con_Button_Quit_Click(object sender, EventArgs e)
|
private void con_Button_Quit_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
@@ -227,7 +294,7 @@ namespace Perun_v1
|
|||||||
{
|
{
|
||||||
form_Main_SaveSettings();
|
form_Main_SaveSettings();
|
||||||
|
|
||||||
boolLetMeOut = true; // Save settings on exit
|
bAllowAppClosure = true; // Save settings on exit
|
||||||
this.Close(); // Allow to exit application
|
this.Close(); // Allow to exit application
|
||||||
}
|
}
|
||||||
else if (dialogResult == DialogResult.No)
|
else if (dialogResult == DialogResult.No)
|
||||||
@@ -236,16 +303,6 @@ namespace Perun_v1
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void WndProc(ref Message m)
|
|
||||||
{
|
|
||||||
// Try to run of 2nd instance
|
|
||||||
if (m.Msg == NativeMethods.WM_SHOWME)
|
|
||||||
{
|
|
||||||
form_Main_BringFromTray();
|
|
||||||
}
|
|
||||||
base.WndProc(ref m);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void form_Main_SendToTray()
|
private void form_Main_SendToTray()
|
||||||
{
|
{
|
||||||
// Sends app to system tray
|
// Sends app to system tray
|
||||||
@@ -277,7 +334,7 @@ namespace Perun_v1
|
|||||||
private void form_Main_FormClosing(object sender, FormClosingEventArgs e)
|
private void form_Main_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
{
|
{
|
||||||
// Minimize to try on clicking "X"
|
// Minimize to try on clicking "X"
|
||||||
if (e.CloseReason == CloseReason.UserClosing && !boolLetMeOut)
|
if (e.CloseReason == CloseReason.UserClosing && !bAllowAppClosure)
|
||||||
{
|
{
|
||||||
e.Cancel = true;
|
e.Cancel = true;
|
||||||
form_Main_SendToTray(); // Send app to system tray
|
form_Main_SendToTray(); // Send app to system tray
|
||||||
@@ -291,47 +348,133 @@ namespace Perun_v1
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ################################ Timers ################################
|
// ################################ Timers ################################
|
||||||
private void timer1_Tick(object sender, EventArgs e)
|
private void Tim_GUI_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Main timer to sync GUI with background tasks and flush buffers
|
// Main timer to sync GUI with background tasks and flush buffers
|
||||||
|
|
||||||
// Refresh Log Window
|
// Refresh Log Window
|
||||||
con_List_Received.Items.Clear();
|
if (Globals.bGUILogHistoryUpdate)
|
||||||
foreach (string i in Globals.arrLogHistory)
|
|
||||||
{
|
{
|
||||||
if (i != null)
|
con_List_Received.Items.Clear();
|
||||||
|
foreach (string i in Globals.arrGUILogHistory)
|
||||||
{
|
{
|
||||||
con_List_Received.Items.Add(i);
|
if (i != null)
|
||||||
|
{
|
||||||
|
con_List_Received.Items.Add(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Globals.bGUILogHistoryUpdate = false;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Do nothing , control does not require update
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update status icons at main form
|
||||||
|
if ((dcConnection.bStatus != Globals.bdcConnection) || Globals.bStatusIconsForce)
|
||||||
|
{
|
||||||
|
if (dcConnection.bStatus)
|
||||||
|
{
|
||||||
|
if (Globals.intMysqlErros == 0)
|
||||||
|
{
|
||||||
|
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected_error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_db.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected_error");
|
||||||
|
}
|
||||||
|
Globals.bdcConnection = dcConnection.bStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((Globals.bClientConnected != Globals.bTCPServer) || Globals.bStatusIconsForce || Globals.intGameErros != Globals.intGameErrosHistory)
|
||||||
|
{
|
||||||
|
if (Globals.bClientConnected)
|
||||||
|
{
|
||||||
|
if (Globals.intGameErros == 0)
|
||||||
|
{
|
||||||
|
con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected_error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_dcs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected_error");
|
||||||
|
}
|
||||||
|
Globals.bTCPServer = Globals.bClientConnected;
|
||||||
|
Globals.intGameErrosHistory = Globals.intGameErros;
|
||||||
|
}
|
||||||
|
if ((bSRSStatus != Globals.bSRSStatus) || Globals.bStatusIconsForce)
|
||||||
|
{
|
||||||
|
if (bSRSStatus && con_check_3rd_srs.Checked)
|
||||||
|
{
|
||||||
|
if (Globals.intSRSErros == 0)
|
||||||
|
{
|
||||||
|
con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected_error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_srs.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected_error");
|
||||||
|
}
|
||||||
|
Globals.bSRSStatus = bSRSStatus;
|
||||||
|
}
|
||||||
|
if ((bLotATCStatus != Globals.bLotATCStatus) || Globals.bStatusIconsForce)
|
||||||
|
{
|
||||||
|
if (bLotATCStatus && con_check_3rd_lotatc.Checked)
|
||||||
|
{
|
||||||
|
if (Globals.intLotATCErros == 0)
|
||||||
|
{
|
||||||
|
con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_connected_error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
con_img_lotATC.Image = (Image)Properties.Resources.ResourceManager.GetObject("status_disconnected_error");
|
||||||
|
}
|
||||||
|
Globals.bLotATCStatus = bLotATCStatus;
|
||||||
|
}
|
||||||
|
Globals.bStatusIconsForce = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tim_200ms_Tick(object sender, EventArgs e)
|
private void Tim_MySQL_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Send buffer to MySQL
|
// Send buffer to MySQL
|
||||||
for (int i = 0; i < arrSendBuffer.Length - 1; i++)
|
for (int i = 0; i < arrMySQLSendBuffer.Length - 1; i++)
|
||||||
{
|
{
|
||||||
if (arrSendBuffer[i] != null)
|
if (arrMySQLSendBuffer[i] != null)
|
||||||
{
|
{
|
||||||
DatabaseController.SendToMySql(arrSendBuffer[i]);
|
dcConnection.SendToMySql(arrMySQLSendBuffer[i]);
|
||||||
arrSendBuffer[i] = null;
|
arrMySQLSendBuffer[i] = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void tim_10000ms_Tick(object sender, EventArgs e)
|
private void tim_3rdparties_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Main timer to send JSON files to MySQL
|
// Main timer to send JSON files to MySQL
|
||||||
string strSRSJson = "";
|
string strSRSJson = "";
|
||||||
string strLotATCJson = "";
|
string strLotATCJson = "";
|
||||||
string strSRSJson2 = "";
|
|
||||||
string strLotATCJson2 = "";
|
|
||||||
|
|
||||||
bool boolSRSdefault = true;
|
bool boolSRSdefault = true;
|
||||||
bool boolLotATCdefault = true;
|
bool boolLotATCdefault = true;
|
||||||
bool boolSRSdefault2 = true;
|
|
||||||
bool boolLotATCdefault2 = true;
|
|
||||||
|
|
||||||
// Handle SRS - TBD clean code for multiinstance
|
// Handle SRS
|
||||||
if (con_check_3rd_srs.Checked)
|
if (con_check_3rd_srs.Checked)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -373,94 +516,32 @@ namespace Perun_v1
|
|||||||
if (raw_lotatc.Count > 0)
|
if (raw_lotatc.Count > 0)
|
||||||
{
|
{
|
||||||
strSRSJson = JsonConvert.SerializeObject(raw_lotatc);
|
strSRSJson = JsonConvert.SerializeObject(raw_lotatc);
|
||||||
strSRSJson = "{'type':'100','instance':'1','payload':'" + strSRSJson + "'}";
|
strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':'" + strSRSJson + "'}";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strSRSJson = "{'type':'100','instance':'1','payload':{'ignore':'false'}}"; // No SRS clients connected
|
strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'false'}}"; // No SRS clients connected
|
||||||
}
|
}
|
||||||
boolSRSdefault = false;
|
boolSRSdefault = false;
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > SRS data loaded");
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > SRS data loaded");
|
||||||
|
bSRSStatus = true;
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception exc_srs)
|
||||||
{
|
{
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > SRS data ERROR");
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > SRS data ERROR > " + exc_srs.Message);
|
||||||
|
bSRSStatus = false;
|
||||||
|
Globals.intSRSErros++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if (boolSRSdefault)
|
if (boolSRSdefault)
|
||||||
{
|
{
|
||||||
strSRSJson = "{'type':'100','instance':'1','payload':{'ignore':'true'}}";
|
strSRSJson = "{'type':'100','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'true'}}";
|
||||||
}
|
}
|
||||||
DatabaseController.SendToMySql(strSRSJson);
|
dcConnection.SendToMySql(strSRSJson);
|
||||||
|
|
||||||
if (con_check_3rd_srs2.Checked)
|
// Handle LotATC
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
strSRSJson2 = System.IO.File.ReadAllText(con_txt_3rd_srs2.Text);
|
|
||||||
dynamic raw_lotatc = JsonConvert.DeserializeObject(strSRSJson2);
|
|
||||||
|
|
||||||
for (int i = 0; i < raw_lotatc.Count; i++)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (raw_lotatc[i].RadioInfo != null)
|
|
||||||
{
|
|
||||||
|
|
||||||
int temp = raw_lotatc[i].RadioInfo.radios.Count - 1;
|
|
||||||
for (int j = temp; j >= 0; j--)
|
|
||||||
{
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].enc.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].encKey.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].encMode.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].freqMax.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].freqMin.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].modulation.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].freqMode.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].volMode.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].expansion.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].channel.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].simul.Parent.Remove();
|
|
||||||
|
|
||||||
if (raw_lotatc[i].RadioInfo.radios[j].name == "No Radio")
|
|
||||||
{
|
|
||||||
raw_lotatc[i].RadioInfo.radios[j].Remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
raw_lotatc[i].ClientChannelId.Parent.Remove();
|
|
||||||
raw_lotatc[i].RadioInfo.simultaneousTransmission.Parent.Remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (raw_lotatc.Count > 0)
|
|
||||||
{
|
|
||||||
strSRSJson2 = JsonConvert.SerializeObject(raw_lotatc);
|
|
||||||
strSRSJson2 = "{'type':'100','instance':'2','payload':'" + strSRSJson2 + "'}";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
strSRSJson2 = "{'type':'100','instance':'2','payload':{'ignore':'false'}}"; // No SRS clients connected
|
|
||||||
}
|
|
||||||
boolSRSdefault2 = false;
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#2 > SRS data loaded");
|
|
||||||
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#2 > SRS data ERROR");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
if (boolSRSdefault2)
|
|
||||||
{
|
|
||||||
strSRSJson = "{'type':'100','instance':'2','payload':{'ignore':'true'}}";
|
|
||||||
}
|
|
||||||
DatabaseController.SendToMySql(strSRSJson2);
|
|
||||||
|
|
||||||
// Handle LotATC - TBD clean code for multiinstance
|
|
||||||
if (con_check_3rd_lotatc.Checked)
|
if (con_check_3rd_lotatc.Checked)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -468,46 +549,38 @@ namespace Perun_v1
|
|||||||
strLotATCJson = System.IO.File.ReadAllText(con_txt_3rd_lotatc.Text);
|
strLotATCJson = System.IO.File.ReadAllText(con_txt_3rd_lotatc.Text);
|
||||||
dynamic raw_srs = JsonConvert.DeserializeObject(strLotATCJson);
|
dynamic raw_srs = JsonConvert.DeserializeObject(strLotATCJson);
|
||||||
|
|
||||||
strLotATCJson = "{'type':'101','instance':'1','payload':'" + strLotATCJson + "'}";
|
strLotATCJson = "{'type':'101','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':'" + strLotATCJson + "'}";
|
||||||
boolLotATCdefault = false;
|
boolLotATCdefault = false;
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > LotATC data loaded");
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > LotATC data loaded");
|
||||||
|
bLotATCStatus = true;
|
||||||
}
|
}
|
||||||
catch
|
catch (Exception exc_lotatc)
|
||||||
{
|
{
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#1 > LotATC data ERROR");
|
PerunHelper.GUILogHistoryAdd(ref Globals.arrGUILogHistory, "#" + Int32.Parse(con_txt_dcs_instance.Text) + " > LotATC data ERROR > " + exc_lotatc.Message);
|
||||||
|
bLotATCStatus = false;
|
||||||
|
Globals.intLotATCErros++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if (boolLotATCdefault)
|
if (boolLotATCdefault)
|
||||||
{
|
{
|
||||||
strLotATCJson = "{'type':'101','instance':'1','payload':{'ignore':'true'}}"; // No LotATC controller connected
|
strLotATCJson = "{'type':'101','instance':'" + Int32.Parse(con_txt_dcs_instance.Text) + "','payload':{'ignore':'true'}}"; // No LotATC controller connected
|
||||||
}
|
}
|
||||||
DatabaseController.SendToMySql(strLotATCJson);
|
dcConnection.SendToMySql(strLotATCJson);
|
||||||
|
|
||||||
if (con_check_3rd_lotatc2.Checked)
|
// Let's do not risk int overload
|
||||||
{
|
Globals.intMysqlErros = (Globals.intMysqlErros > 999) ? 999 : Globals.intMysqlErros;
|
||||||
try
|
Globals.intGameErros = (Globals.intGameErros > 999) ? 999 : Globals.intGameErros;
|
||||||
{
|
Globals.intSRSErros = (Globals.intSRSErros > 999) ? 999 : Globals.intSRSErros;
|
||||||
strLotATCJson2 = System.IO.File.ReadAllText(con_txt_3rd_lotatc2.Text);
|
Globals.intLotATCErros = (Globals.intLotATCErros > 999) ? 999 : Globals.intLotATCErros;
|
||||||
dynamic raw_srs = JsonConvert.DeserializeObject(strLotATCJson2);
|
|
||||||
|
|
||||||
strLotATCJson2 = "{'type':'101','instance':'2','payload':'" + strLotATCJson2 + "'}";
|
}
|
||||||
boolLotATCdefault2 = false;
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#2 > LotATC data loaded");
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
PerunHelper.LogHistoryAdd(ref Globals.arrLogHistory, "#2 > LotATC data ERROR");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
private void con_List_Received_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
if (boolLotATCdefault2)
|
{
|
||||||
{
|
|
||||||
strLotATCJson = "{'type':'101','instance':'2','payload':{'ignore':'true'}}"; // No LotATC controller connected
|
|
||||||
}
|
|
||||||
DatabaseController.SendToMySql(strLotATCJson2);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<metadata name="tim_1000ms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="tim_GUI.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>17, 17</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="trayIconMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="trayIconMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
@@ -413,15 +413,12 @@
|
|||||||
<metadata name="openFileDialog_LotATC.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="openFileDialog_LotATC.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>397, 17</value>
|
<value>397, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="tim_10000ms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="tim_3rdparties.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>563, 19</value>
|
<value>563, 19</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="tim_200ms.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="tim_MySQL.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>687, 19</value>
|
<value>687, 19</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<metadata name="notifyIcon1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>797, 19</value>
|
|
||||||
</metadata>
|
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
AAABAAEAQD8AAAEAIAAgQQAAFgAAACgAAABAAAAAfgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAABAAEAQD8AAAEAIAAgQQAAFgAAACgAAABAAAAAfgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
|||||||
@@ -8,11 +8,12 @@
|
|||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<RootNamespace>Perun_v1</RootNamespace>
|
<RootNamespace>Perun_v1</RootNamespace>
|
||||||
<AssemblyName>Perun</AssemblyName>
|
<AssemblyName>Perun</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<IsWebBootstrapper>true</IsWebBootstrapper>
|
<IsWebBootstrapper>true</IsWebBootstrapper>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
<PublishUrl>ftp://s18.mydevil.net/perun/</PublishUrl>
|
<PublishUrl>ftp://s18.mydevil.net/perun/</PublishUrl>
|
||||||
<Install>true</Install>
|
<Install>true</Install>
|
||||||
<InstallFrom>Web</InstallFrom>
|
<InstallFrom>Web</InstallFrom>
|
||||||
@@ -32,8 +33,8 @@
|
|||||||
<SuiteName>Perun</SuiteName>
|
<SuiteName>Perun</SuiteName>
|
||||||
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
|
||||||
<WebPage>Perun.htm</WebPage>
|
<WebPage>Perun.htm</WebPage>
|
||||||
<ApplicationRevision>6</ApplicationRevision>
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
<ApplicationVersion>0.7.0.%2a</ApplicationVersion>
|
<ApplicationVersion>0.8.2.%2a</ApplicationVersion>
|
||||||
<UseApplicationTrust>false</UseApplicationTrust>
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
<CreateDesktopShortcut>true</CreateDesktopShortcut>
|
||||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||||
@@ -48,6 +49,7 @@
|
|||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<CodeAnalysisRuleSet>SecurityRules.ruleset</CodeAnalysisRuleSet>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
@@ -74,7 +76,7 @@
|
|||||||
<GenerateManifests>true</GenerateManifests>
|
<GenerateManifests>true</GenerateManifests>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SignManifests>true</SignManifests>
|
<SignManifests>false</SignManifests>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<SignAssembly>false</SignAssembly>
|
<SignAssembly>false</SignAssembly>
|
||||||
@@ -87,14 +89,20 @@
|
|||||||
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
<ApplicationManifest>Properties\app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Google.Protobuf, Version=3.5.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
<Reference Include="BouncyCastle.Crypto, Version=1.8.3.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
|
||||||
<HintPath>..\packages\Google.Protobuf.3.5.1\lib\net45\Google.Protobuf.dll</HintPath>
|
<HintPath>..\packages\BouncyCastle.1.8.3.1\lib\BouncyCastle.Crypto.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="MySql.Data, Version=8.0.15.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
<Reference Include="Google.Protobuf, Version=3.6.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\MySql.Data.8.0.15\lib\net452\MySql.Data.dll</HintPath>
|
<HintPath>..\packages\Google.Protobuf.3.6.1\lib\net45\Google.Protobuf.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="MySql.Data, Version=8.0.17.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\MySql.Data.8.0.17\lib\net452\MySql.Data.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.ComponentModel" />
|
<Reference Include="System.ComponentModel" />
|
||||||
@@ -116,11 +124,11 @@
|
|||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="01_Classes\UDPController.cs" />
|
<Compile Include="01_Classes\LogController.cs" />
|
||||||
|
<Compile Include="01_Classes\TCPController.cs" />
|
||||||
<Compile Include="01_Classes\Globals.cs" />
|
<Compile Include="01_Classes\Globals.cs" />
|
||||||
<Compile Include="01_Classes\DatabaseController.cs" />
|
<Compile Include="01_Classes\DatabaseController.cs" />
|
||||||
<Compile Include="01_Classes\PerunHelper.cs" />
|
<Compile Include="01_Classes\PerunHelper.cs" />
|
||||||
<Compile Include="01_Classes\NativeMethods.cs" />
|
|
||||||
<Compile Include="02_Forms\form_Main.cs">
|
<Compile Include="02_Forms\form_Main.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -145,6 +153,7 @@
|
|||||||
<None Include="00_Config\packages.config" />
|
<None Include="00_Config\packages.config" />
|
||||||
<None Include="00_Config\Perun_v1_TemporaryKey.pfx" />
|
<None Include="00_Config\Perun_v1_TemporaryKey.pfx" />
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
<None Include="Properties\app.manifest" />
|
<None Include="Properties\app.manifest" />
|
||||||
<None Include="Properties\Settings.settings">
|
<None Include="Properties\Settings.settings">
|
||||||
<Generator>SettingsSingleFileGenerator</Generator>
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
@@ -162,7 +171,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
|
<BootstrapperPackage Include=".NETFramework,Version=v4.6.1">
|
||||||
<Visible>False</Visible>
|
<Visible>False</Visible>
|
||||||
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 i x64%29</ProductName>
|
<ProductName>Microsoft .NET Framework 4.6.1 %28x86 and x64%29</ProductName>
|
||||||
<Install>true</Install>
|
<Install>true</Install>
|
||||||
</BootstrapperPackage>
|
</BootstrapperPackage>
|
||||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
@@ -173,6 +182,17 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="03_Resources\perun_logo.ico" />
|
<Content Include="03_Resources\perun_logo.ico" />
|
||||||
|
<None Include="Resources\status-connectedx.png" />
|
||||||
|
<None Include="Resources\status-disconnected-game.png" />
|
||||||
|
<None Include="Resources\status-disconnected-error.png" />
|
||||||
|
<None Include="Resources\status-disconnected.png" />
|
||||||
|
<None Include="Resources\status-connected.png" />
|
||||||
|
<None Include="Resources\ico_error.png" />
|
||||||
|
<None Include="Resources\ico_srs.png" />
|
||||||
|
<None Include="Resources\ico_lotatc.png" />
|
||||||
|
<None Include="Resources\ico_game.png" />
|
||||||
|
<None Include="Resources\ico_db.png" />
|
||||||
|
<None Include="Resources\img_db.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup />
|
<ItemGroup />
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ using System.Runtime.InteropServices;
|
|||||||
// Możesz określić wszystkie wartości lub użyć domyślnych numerów kompilacji i poprawki
|
// Możesz określić wszystkie wartości lub użyć domyślnych numerów kompilacji i poprawki
|
||||||
// przy użyciu symbolu „*”, tak jak pokazano poniżej:
|
// przy użyciu symbolu „*”, tak jak pokazano poniżej:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("0.7.0.0")]
|
[assembly: AssemblyVersion("0.8.2.0")]
|
||||||
[assembly: AssemblyFileVersion("0.7.0.0")]
|
[assembly: AssemblyFileVersion("0.8.2.0")]
|
||||||
[assembly: NeutralResourcesLanguage("en")]
|
[assembly: NeutralResourcesLanguage("en")]
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// Ten kod został wygenerowany przez narzędzie.
|
// This code was generated by a tool.
|
||||||
// Wersja wykonawcza:4.0.30319.42000
|
// Runtime Version:4.0.30319.42000
|
||||||
//
|
//
|
||||||
// Zmiany w tym pliku mogą spowodować nieprawidłowe zachowanie i zostaną utracone, jeśli
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// kod zostanie ponownie wygenerowany.
|
// the code is regenerated.
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -13,13 +13,13 @@ namespace Perun_v1.Properties {
|
|||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Klasa zasobu wymagająca zdefiniowania typu do wyszukiwania zlokalizowanych ciągów itd.
|
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
// Ta klasa została automatycznie wygenerowana za pomocą klasy StronglyTypedResourceBuilder
|
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||||
// przez narzędzie, takie jak ResGen lub Visual Studio.
|
// class via a tool like ResGen or Visual Studio.
|
||||||
// Aby dodać lub usunąć składową, edytuj plik ResX, a następnie ponownie uruchom narzędzie ResGen
|
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||||
// z opcją /str lub ponownie utwórz projekt VS.
|
// with the /str option, or rebuild your VS project.
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
internal class Resources {
|
internal class Resources {
|
||||||
@@ -33,7 +33,7 @@ namespace Perun_v1.Properties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Zwraca buforowane wystąpienie ResourceManager używane przez tę klasę.
|
/// Returns the cached ResourceManager instance used by this class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
@@ -47,8 +47,8 @@ namespace Perun_v1.Properties {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Przesłania właściwość CurrentUICulture bieżącego wątku dla wszystkich
|
/// Overrides the current thread's CurrentUICulture property for all
|
||||||
/// przypadków przeszukiwania zasobów za pomocą tej klasy zasobów wymagającej zdefiniowania typu.
|
/// resource lookups using this strongly typed resource class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
internal static global::System.Globalization.CultureInfo Culture {
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
@@ -59,5 +59,45 @@ namespace Perun_v1.Properties {
|
|||||||
resourceCulture = value;
|
resourceCulture = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap status_connected {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("status_connected", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap status_connected_error {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("status_connected_error", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap status_disconnected {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("status_disconnected", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized resource of type System.Drawing.Bitmap.
|
||||||
|
/// </summary>
|
||||||
|
internal static System.Drawing.Bitmap status_disconnected_error {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("status_disconnected_error", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,4 +117,17 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="status_connected" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\status-connected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="status_connected_error" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\status-connectedx.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="status_disconnected" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\status-disconnected.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
|
<data name="status_disconnected_error" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\status-disconnected-error.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// Ten kod został wygenerowany przez narzędzie.
|
// This code was generated by a tool.
|
||||||
// Wersja wykonawcza:4.0.30319.42000
|
// Runtime Version:4.0.30319.42000
|
||||||
//
|
//
|
||||||
// Zmiany w tym pliku mogą spowodować nieprawidłowe zachowanie i zostaną utracone, jeśli
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// kod zostanie ponownie wygenerowany.
|
// the code is regenerated.
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ namespace Perun_v1.Properties {
|
|||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.2.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
@@ -133,49 +133,25 @@ namespace Perun_v1.Properties {
|
|||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
[global::System.Configuration.DefaultSettingValueAttribute("48620")]
|
||||||
public string OTHER_LOTATC_FILE2 {
|
public int DCS_Server_Port {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["OTHER_LOTATC_FILE2"]));
|
return ((int)(this["DCS_Server_Port"]));
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
this["OTHER_LOTATC_FILE2"] = value;
|
this["DCS_Server_Port"] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
[global::System.Configuration.DefaultSettingValueAttribute("1")]
|
||||||
public string OTHER_SRS_FILE2 {
|
public int DCS_Instance {
|
||||||
get {
|
get {
|
||||||
return ((string)(this["OTHER_SRS_FILE2"]));
|
return ((int)(this["DCS_Instance"]));
|
||||||
}
|
}
|
||||||
set {
|
set {
|
||||||
this["OTHER_SRS_FILE2"] = value;
|
this["DCS_Instance"] = value;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
|
||||||
public bool OTHER_LOTATC_USE2 {
|
|
||||||
get {
|
|
||||||
return ((bool)(this["OTHER_LOTATC_USE2"]));
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
this["OTHER_LOTATC_USE2"] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
|
||||||
public bool OTHER_SRS_USE2 {
|
|
||||||
get {
|
|
||||||
return ((bool)(this["OTHER_SRS_USE2"]));
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
this["OTHER_SRS_USE2"] = value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,17 +29,11 @@
|
|||||||
<Setting Name="MYSQL_Port" Type="System.String" Scope="User">
|
<Setting Name="MYSQL_Port" Type="System.String" Scope="User">
|
||||||
<Value Profile="(Default)">3306</Value>
|
<Value Profile="(Default)">3306</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="OTHER_LOTATC_FILE2" Type="System.String" Scope="User">
|
<Setting Name="DCS_Server_Port" Type="System.Int32" Scope="User">
|
||||||
<Value Profile="(Default)" />
|
<Value Profile="(Default)">48620</Value>
|
||||||
</Setting>
|
</Setting>
|
||||||
<Setting Name="OTHER_SRS_FILE2" Type="System.String" Scope="User">
|
<Setting Name="DCS_Instance" Type="System.Int32" Scope="User">
|
||||||
<Value Profile="(Default)" />
|
<Value Profile="(Default)">1</Value>
|
||||||
</Setting>
|
|
||||||
<Setting Name="OTHER_LOTATC_USE2" Type="System.Boolean" Scope="User">
|
|
||||||
<Value Profile="(Default)">False</Value>
|
|
||||||
</Setting>
|
|
||||||
<Setting Name="OTHER_SRS_USE2" Type="System.Boolean" Scope="User">
|
|
||||||
<Value Profile="(Default)">False</Value>
|
|
||||||
</Setting>
|
</Setting>
|
||||||
</Settings>
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
||||||
BIN
02_Windows_App/Perun_v1/Resources/ico_db.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
02_Windows_App/Perun_v1/Resources/ico_error.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
02_Windows_App/Perun_v1/Resources/ico_game.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
02_Windows_App/Perun_v1/Resources/ico_lotatc.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
02_Windows_App/Perun_v1/Resources/ico_srs.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
02_Windows_App/Perun_v1/Resources/img_db.png
Normal file
|
After Width: | Height: | Size: 233 B |
BIN
02_Windows_App/Perun_v1/Resources/status-connected.png
Normal file
|
After Width: | Height: | Size: 1.0 KiB |
BIN
02_Windows_App/Perun_v1/Resources/status-connectedx.png
Normal file
|
After Width: | Height: | Size: 9.5 KiB |
BIN
02_Windows_App/Perun_v1/Resources/status-disconnected-error.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
02_Windows_App/Perun_v1/Resources/status-disconnected-game.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
02_Windows_App/Perun_v1/Resources/status-disconnected.png
Normal file
|
After Width: | Height: | Size: 909 B |
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
<configSections>
|
<configSections>
|
||||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<section name="Perun_v1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
<section name="Perun_v1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
|
||||||
</sectionGroup>
|
</sectionGroup>
|
||||||
</configSections>
|
</configSections>
|
||||||
<userSettings>
|
<userSettings>
|
||||||
@@ -34,18 +34,12 @@
|
|||||||
<setting name="MYSQL_Port" serializeAs="String">
|
<setting name="MYSQL_Port" serializeAs="String">
|
||||||
<value>3306</value>
|
<value>3306</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="OTHER_LOTATC_FILE2" serializeAs="String">
|
<setting name="DCS_Server_Port" serializeAs="String">
|
||||||
<value />
|
<value>48620</value>
|
||||||
</setting>
|
</setting>
|
||||||
<setting name="OTHER_SRS_FILE2" serializeAs="String">
|
<setting name="DCS_Instance" serializeAs="String">
|
||||||
<value />
|
<value>1</value>
|
||||||
</setting>
|
|
||||||
<setting name="OTHER_LOTATC_USE2" serializeAs="String">
|
|
||||||
<value>False</value>
|
|
||||||
</setting>
|
|
||||||
<setting name="OTHER_SRS_USE2" serializeAs="String">
|
|
||||||
<value>False</value>
|
|
||||||
</setting>
|
</setting>
|
||||||
</Perun_v1.Properties.Settings>
|
</Perun_v1.Properties.Settings>
|
||||||
</userSettings>
|
</userSettings>
|
||||||
</configuration>
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
|
||||||
|
|||||||
8
02_Windows_App/Perun_v1/packages.config
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="BouncyCastle" version="1.8.3.1" targetFramework="net48" />
|
||||||
|
<package id="Google.Protobuf" version="3.6.1" targetFramework="net48" />
|
||||||
|
<package id="MySql.Data" version="8.0.17" targetFramework="net48" />
|
||||||
|
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net48" />
|
||||||
|
<package id="SSH.NET" version="2016.1.0" targetFramework="net48" />
|
||||||
|
</packages>
|
||||||
@@ -1,26 +1,13 @@
|
|||||||
|
|
||||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||||
SET AUTOCOMMIT = 0;
|
SET AUTOCOMMIT = 0;
|
||||||
START TRANSACTION;
|
START TRANSACTION;
|
||||||
SET time_zone = "+00:00";
|
SET time_zone = "+00:00";
|
||||||
|
|
||||||
|
|
||||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||||
/*!40101 SET NAMES utf8mb4 */;
|
/*!40101 SET NAMES utf8mb4 */;
|
||||||
|
|
||||||
--
|
|
||||||
-- Baza danych: `m1081_perun`
|
|
||||||
--
|
|
||||||
CREATE DATABASE IF NOT EXISTS `m1081_perun` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
|
|
||||||
USE `m1081_perun`;
|
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_DataMissionHashes`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataMissionHashes`;
|
DROP TABLE IF EXISTS `pe_DataMissionHashes`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataMissionHashes` (
|
CREATE TABLE IF NOT EXISTS `pe_DataMissionHashes` (
|
||||||
@@ -33,12 +20,6 @@ CREATE TABLE IF NOT EXISTS `pe_DataMissionHashes` (
|
|||||||
KEY `pe_DataMissionHashes_instance` (`pe_DataMissionHashes_instance`)
|
KEY `pe_DataMissionHashes_instance` (`pe_DataMissionHashes_instance`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_DataPlayers`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataPlayers`;
|
DROP TABLE IF EXISTS `pe_DataPlayers`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataPlayers` (
|
CREATE TABLE IF NOT EXISTS `pe_DataPlayers` (
|
||||||
`pe_DataPlayers_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
`pe_DataPlayers_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -50,12 +31,6 @@ CREATE TABLE IF NOT EXISTS `pe_DataPlayers` (
|
|||||||
UNIQUE KEY `UNIQUE_UCID` (`pe_DataPlayers_ucid`)
|
UNIQUE KEY `UNIQUE_UCID` (`pe_DataPlayers_ucid`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_DataRaw`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataRaw`;
|
DROP TABLE IF EXISTS `pe_DataRaw`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataRaw` (
|
CREATE TABLE IF NOT EXISTS `pe_DataRaw` (
|
||||||
`pe_dataraw_type` tinyint(4) NOT NULL,
|
`pe_dataraw_type` tinyint(4) NOT NULL,
|
||||||
@@ -65,12 +40,6 @@ CREATE TABLE IF NOT EXISTS `pe_DataRaw` (
|
|||||||
PRIMARY KEY (`pe_dataraw_type`,`pe_dataraw_instance`)
|
PRIMARY KEY (`pe_dataraw_type`,`pe_dataraw_instance`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_DataTypes`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_DataTypes`;
|
DROP TABLE IF EXISTS `pe_DataTypes`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_DataTypes` (
|
CREATE TABLE IF NOT EXISTS `pe_DataTypes` (
|
||||||
`pe_DataTypes_id` int(11) NOT NULL AUTO_INCREMENT,
|
`pe_DataTypes_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -80,12 +49,6 @@ CREATE TABLE IF NOT EXISTS `pe_DataTypes` (
|
|||||||
UNIQUE KEY `UNIQUE_TYPE_NAME` (`pe_DataTypes_name`)
|
UNIQUE KEY `UNIQUE_TYPE_NAME` (`pe_DataTypes_name`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_LogChat`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_LogChat`;
|
DROP TABLE IF EXISTS `pe_LogChat`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_LogChat` (
|
CREATE TABLE IF NOT EXISTS `pe_LogChat` (
|
||||||
`pe_LogChat_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
`pe_LogChat_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -96,15 +59,10 @@ CREATE TABLE IF NOT EXISTS `pe_LogChat` (
|
|||||||
`pe_LogChat_all` varchar(10) NOT NULL,
|
`pe_LogChat_all` varchar(10) NOT NULL,
|
||||||
PRIMARY KEY (`pe_LogChat_id`),
|
PRIMARY KEY (`pe_LogChat_id`),
|
||||||
KEY `pe_LogChat_missionhash_id` (`pe_LogChat_missionhash_id`),
|
KEY `pe_LogChat_missionhash_id` (`pe_LogChat_missionhash_id`),
|
||||||
KEY `pe_LogChat_playerid` (`pe_LogChat_playerid`)
|
KEY `pe_LogChat_playerid` (`pe_LogChat_playerid`),
|
||||||
|
KEY `pe_LogChat_datetime` (`pe_LogChat_datetime`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_LogEvent`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_LogEvent`;
|
DROP TABLE IF EXISTS `pe_LogEvent`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_LogEvent` (
|
CREATE TABLE IF NOT EXISTS `pe_LogEvent` (
|
||||||
`pe_LogEvent_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
`pe_LogEvent_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -115,15 +73,10 @@ CREATE TABLE IF NOT EXISTS `pe_LogEvent` (
|
|||||||
`pe_LogEvent_arg1` varchar(150) DEFAULT NULL,
|
`pe_LogEvent_arg1` varchar(150) DEFAULT NULL,
|
||||||
`pe_LogEvent_arg2` varchar(150) DEFAULT NULL,
|
`pe_LogEvent_arg2` varchar(150) DEFAULT NULL,
|
||||||
PRIMARY KEY (`pe_LogEvent_id`),
|
PRIMARY KEY (`pe_LogEvent_id`),
|
||||||
KEY `pe_LogEvent_missionhash_id` (`pe_LogEvent_missionhash_id`)
|
KEY `pe_LogEvent_missionhash_id` (`pe_LogEvent_missionhash_id`),
|
||||||
|
KEY `pe_LogEvent_datetime` (`pe_LogEvent_datetime`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_LogLogins`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_LogLogins`;
|
DROP TABLE IF EXISTS `pe_LogLogins`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_LogLogins` (
|
CREATE TABLE IF NOT EXISTS `pe_LogLogins` (
|
||||||
`pe_LogLogins_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
`pe_LogLogins_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -133,15 +86,10 @@ CREATE TABLE IF NOT EXISTS `pe_LogLogins` (
|
|||||||
`pe_LogLogins_name` varchar(150) NOT NULL,
|
`pe_LogLogins_name` varchar(150) NOT NULL,
|
||||||
`pe_LogLogins_ip` varchar(100) NOT NULL,
|
`pe_LogLogins_ip` varchar(100) NOT NULL,
|
||||||
PRIMARY KEY (`pe_LogLogins_id`),
|
PRIMARY KEY (`pe_LogLogins_id`),
|
||||||
KEY `pe_LogLogins_playerid` (`pe_LogLogins_playerid`)
|
KEY `pe_LogLogins_playerid` (`pe_LogLogins_playerid`),
|
||||||
|
KEY `pe_LogLogins_datetime` (`pe_LogLogins_datetime`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
-- --------------------------------------------------------
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Struktura tabeli dla tabeli `pe_LogStats`
|
|
||||||
--
|
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `pe_LogStats`;
|
DROP TABLE IF EXISTS `pe_LogStats`;
|
||||||
CREATE TABLE IF NOT EXISTS `pe_LogStats` (
|
CREATE TABLE IF NOT EXISTS `pe_LogStats` (
|
||||||
`pe_LogStats_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
`pe_LogStats_id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
@@ -172,9 +120,51 @@ CREATE TABLE IF NOT EXISTS `pe_LogStats` (
|
|||||||
`ps_farp_landings` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_farp_landings` int(11) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_other_landings` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_other_landings` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
`ps_other_takeoffs` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
`ps_other_takeoffs` int(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||||
|
`pe_LogStats_mstatus` enum('?','RTB','MIA','KIA') DEFAULT NULL,
|
||||||
|
`ps_takeoffs` int(10) UNSIGNED DEFAULT '0',
|
||||||
|
`ps_landings` int(10) UNSIGNED DEFAULT '0',
|
||||||
|
`ps_kills_AA` int(10) UNSIGNED DEFAULT '0',
|
||||||
|
`ps_kills_AG` int(10) UNSIGNED DEFAULT '0',
|
||||||
|
`ps_kills_AS` int(10) UNSIGNED DEFAULT '0',
|
||||||
|
`ps_kills_AAA` int(10) UNSIGNED DEFAULT '0',
|
||||||
PRIMARY KEY (`pe_LogStats_id`),
|
PRIMARY KEY (`pe_LogStats_id`),
|
||||||
UNIQUE KEY `UNIQUE_STATS_PER_MISSION_AND_UCID_AND_TYPE` (`pe_LogStats_playerid`,`pe_LogStats_missionhash_id`,`pe_LogStats_typeid`) USING BTREE
|
UNIQUE KEY `UNIQUE_STATS_PER_MISSION_AND_UCID_AND_TYPE` (`pe_LogStats_playerid`,`pe_LogStats_missionhash_id`,`pe_LogStats_typeid`) USING BTREE,
|
||||||
|
KEY `pe_LogStats_missionhash_id` (`pe_LogStats_missionhash_id`),
|
||||||
|
KEY `pe_LogStats_playerid` (`pe_LogStats_playerid`),
|
||||||
|
KEY `pe_LogStats_typeid` (`pe_LogStats_typeid`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
DROP TRIGGER IF EXISTS `pe_LogStats_UPDATE`;
|
||||||
|
DELIMITER $$
|
||||||
|
CREATE TRIGGER `pe_LogStats_UPDATE` BEFORE UPDATE ON `pe_LogStats` FOR EACH ROW BEGIN
|
||||||
|
|
||||||
|
SET NEW.ps_takeoffs = NEW.ps_airfield_takeoffs + NEW.ps_farp_takeoffs + NEW.ps_other_takeoffs + NEW.ps_ship_takeoffs;
|
||||||
|
SET NEW.ps_landings = NEW.ps_airfield_landings + NEW.ps_farp_landings + NEW.ps_other_landings + NEW.ps_ship_landings;
|
||||||
|
SET NEW.ps_kills_AA = NEW.ps_kills_planes + NEW.ps_kills_helicopters;
|
||||||
|
SET NEW.ps_kills_AG = NEW.ps_kills_armor + NEW.ps_kills_unarmed + NEW.ps_kills_fortification;
|
||||||
|
SET NEW.ps_kills_AS = NEW.ps_kills_ships;
|
||||||
|
SET NEW.ps_kills_AAA = NEW.ps_kills_air_defense;
|
||||||
|
|
||||||
|
IF NEW.ps_ejections > 0 THEN
|
||||||
|
SET NEW.pe_LogStats_mstatus = "MIA";
|
||||||
|
ELSEIF NEW.ps_deaths > 0 THEN
|
||||||
|
SET NEW.pe_LogStats_mstatus = "KIA";
|
||||||
|
ELSEIF NEW.ps_landings >= NEW.ps_takeoffs THEN
|
||||||
|
IF NEW.ps_takeoffs > 0 or NEW.ps_landings > 0 THEN
|
||||||
|
SET NEW.pe_LogStats_mstatus = "RTB";
|
||||||
|
ELSE
|
||||||
|
SET NEW.pe_LogStats_mstatus = "?";
|
||||||
|
END IF;
|
||||||
|
ELSEIF NEW.ps_takeoffs > NEW.ps_landings and NEW.ps_ejections=0 and NEW.ps_deaths=0 THEN
|
||||||
|
SET NEW.pe_LogStats_mstatus = "MIA";
|
||||||
|
ELSE
|
||||||
|
SET NEW.pe_LogStats_mstatus = "?";
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
DELIMITER ;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE `pe_DataPlayers` ADD FULLTEXT KEY `pe_DataPlayers_ucid` (`pe_DataPlayers_ucid`);
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||||
|
|||||||
85
README.md
@@ -5,64 +5,103 @@
|
|||||||
|
|
||||||
# Perun for DCS World
|
# Perun for DCS World
|
||||||
|
|
||||||
This toolset extracts data from DCS World server and sends information to the local Json file and UDP port for further processing.
|
Included lua script extracts data from DCS World multiplayer server and sends information to TCP port and JSON file for further processing.
|
||||||
|
|
||||||
Provided windows app puts received UDP packets to MySQL database. Additionaly Perun windows application can be used to merge LotATC and DCS SRS data in one database making Perun for DCS World wannabe ultimate integration tool for the server admins.
|
Provided windows app puts received TCP packets to MySQL database; additionaly Perun windows application can be used to merge LotATC and DCS SRS data in one database making Perun for DCS World wannabe ultimate integration tool for the server admins.
|
||||||
|
|
||||||
However, this software is intended to be used by experienced users - the output is Json data and MySQL; you will need to process/display it yourself.
|
However, this software is intended to be used by experienced users - the output is MySQL data and/or JSON file; you will need to process/display it yourself.
|
||||||
|
|
||||||

|

|
||||||

|

|
||||||
|
|
||||||
### Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Core:
|
Core:
|
||||||
* For JSON Export:
|
* For JSON Export:
|
||||||
* DCS World stable or DCS World beta
|
* DCS World stable or DCS World beta
|
||||||
* **(Optional)** For MySQL Export:
|
* **(Optional)** For MySQL Export:
|
||||||
* MySQL server with read/write access (tested with v5.7.21)
|
* MySQL database with read/write access running at min. 5.7 server (tested with v5.7.21; native JSON support is required)
|
||||||
* .NET Framework 4.6.1
|
* .NET Framework 4.8.0
|
||||||
|
|
||||||
3rd party applications support:
|
3rd party applications support:
|
||||||
* for [DCS SRS](https://github.com/ciribob/DCS-SimpleRadioStandalone/releases) integration location of the clients-list.json file will be required (by default: SRS Server folder), "Auto Export List" option has to be enabled - see [SRS documentation](https://github.com/ciribob/DCS-SimpleRadioStandalone/wiki)
|
* for [DCS SRS](https://github.com/ciribob/DCS-SimpleRadioStandalone/releases) integration location of the clients-list.json file will be required (by default: SRS Server folder), "Auto Export List" option has to be enabled - see [SRS documentation](https://github.com/ciribob/DCS-SimpleRadioStandalone/wiki)
|
||||||
* for [LotATC](https://www.lotatc.com/) you will need location of stats.json file and proper LotATC configuration with JSON data export enabled - see [LotATC documentation](https://www.lotatc.com/documentation/server_configuration.html)
|
* for [LotATC](https://www.lotatc.com/) you will need location of stats.json file and proper LotATC configuration with JSON data export enabled - see [LotATC documentation](https://www.lotatc.com/documentation/server_configuration.html)
|
||||||
|
|
||||||
### Installing
|
## Installing
|
||||||
|
|
||||||
* Download latest [release](https://github.com/szporwolik/perun/releases), **optionaly** together with windows binary file for MySQL export - [DOWNLOAD](http://share.porwolik.com/ftp/perun/Perun.htm)
|
* Download latest [release](https://github.com/szporwolik/perun/releases)
|
||||||
* Copy contents of [01_DCS](https://github.com/szporwolik/perun/tree/master/01_DCS) to your \Scripts folder (located inside DCS folder in your Saved Games)
|
* Copy contents of [01_DCS](https://github.com/szporwolik/perun/tree/master/01_DCS) to your \Scripts folder (located inside DCS folder in your Saved Games)
|
||||||
* **optionaly** Create MySQL server using SQL script located in [03_MySQL](https://github.com/szporwolik/perun/tree/master/03_MySQL)
|
* **optionaly** create MySQL database using SQL script located in [03_MySQL](https://github.com/szporwolik/perun/tree/master/03_MySQL); note that you need just a one database per DCS server machine - multiple instances pushing data to the one database are supported
|
||||||
* **optionaly** Run the Win32 application
|
|
||||||
* set MySQL connection data
|
## Running
|
||||||
* point LotATC json file location
|
|
||||||
* point DCS SRS json file location
|
|
||||||
* click connect and leave the app running in the background
|
|
||||||
* Start DCS World and host multiplayer session
|
* Start DCS World and host multiplayer session
|
||||||
* by default the JSON is written into Scripts\Json folder located in your Saved Games DCS folder tree
|
* by default the JSON is written into Scripts\Json folder located in your Saved Games DCS folder tree
|
||||||
* by default the UDP port 48620 is in use as target port
|
* by default the TCP port 48620 is in use as target port
|
||||||
* Data shall be filling your MySQL database
|
* **optionaly** run the Win32 application
|
||||||
|
* set MySQL connection data
|
||||||
|
* **optionaly** point LotATC json file location
|
||||||
|
* **optionaly** point DCS SRS json file location
|
||||||
|
* click connect and leave the app running in the background
|
||||||
|
* **data shall now be filling your MySQL database**
|
||||||
|
|
||||||
## Data packets
|
### Windows APP - command line arguments (for expert users)
|
||||||
|
Windows app supports command line arguments, what may be handy in case of multiple instance of DCS servers running at the same machine.
|
||||||
|
|
||||||
|
The following arguments are accepted (keep the order!):
|
||||||
|
* server port (shall be the same as in the lua file!)
|
||||||
|
* instance ID (shall be the same as in the lua file!)
|
||||||
|
* path to SRS client-list.json
|
||||||
|
* path to LotATC stats.json
|
||||||
|
|
||||||
|
Example for windows shortcut:
|
||||||
|
```
|
||||||
|
C:\Perun_v1\Perun.exe 48621 1 "G:\DCS SRS\clients-list.json" "C:\Users\DCS\Saved Games\DCS\Mods\tech\LotAtc\stats.json"
|
||||||
|
```
|
||||||
|
|
||||||
|
# API documentation (for expert users)
|
||||||
|
## MySQL database structure
|
||||||
|
* table: pe_DataMissionHashes - holds mission hashes, unique hashes created per each mission start at server
|
||||||
|
* table: pe_DataPlayers - holds players UCIDs together with last login information
|
||||||
|
* table: pe_DataRaw - holds raw data received from perun windows app, containing debug/version information together with DCS SRS and LotATC data
|
||||||
|
* table: pe_DataTypes - names of all model depende class names detected in DCS
|
||||||
|
* table: pe_LogChat - holds chat history
|
||||||
|
* table: pe_LogEvent - holds event history
|
||||||
|
* table: pe_LogLogins - holds login to server event history
|
||||||
|
* table: pe_LogStats - holds static information
|
||||||
|
|
||||||
|
## Data packets - send from lua to TCP port
|
||||||
* ```ID: 1```, contains version/diagnostic information
|
* ```ID: 1```, contains version/diagnostic information
|
||||||
|
* perun version - for server administration usage
|
||||||
|
* player count - actual number of connected players
|
||||||
* ```ID: 2```, contains status data in the following sections
|
* ```ID: 2```, contains status data in the following sections
|
||||||
* mission - minimal information about mission
|
* mission name - name of the mission file
|
||||||
|
* model time - simulation time
|
||||||
|
* real time - real time
|
||||||
|
* pause - information if server is paused
|
||||||
|
* multiplayer - information if this is multiplayer game (always true for dedicated server usage)
|
||||||
|
* theather - information about area of operation
|
||||||
|
* weather - basic weather information
|
||||||
* players - connected players
|
* players - connected players
|
||||||
* ```ID: 3```, available slots list and coalitions
|
* ```ID: 3```, available slots list and coalitions
|
||||||
* coalitions - available coalitions
|
* coalitions - available coalitions
|
||||||
* slots - available slots
|
* slots - available slots
|
||||||
* ```ID: 4```, stores mission data **WIP: not yet implemented**
|
* ```ID: 4```, stores mission data ; idea is to have whole DCS.getCurrentMission() result - currenlty commented out due to performance issues
|
||||||
* ```ID: 50```, chat event
|
* ```ID: 50```, chat event
|
||||||
* ```ID: 51```, game event
|
* ```ID: 51```, game event
|
||||||
* ```ID: 52```, player stats **WIP: not yet implemented**
|
* ```ID: 52```, player stats ; note that as DSC native stats are not reliable, seperate stats couting methods are used
|
||||||
* ```ID: 53```, player login to DCS server
|
* ```ID: 53```, player login to DCS server
|
||||||
* ```ID: 100```, DCS SRS's client-list.json
|
* ```ID: 100```, DCS SRS's client-list.json
|
||||||
* ```ID: 101```, LotATC's stats.json
|
* ```ID: 101```, LotATC's stats.json
|
||||||
|
|
||||||
|
# Project information
|
||||||
## Built With
|
## Built With
|
||||||
|
|
||||||
* [VisualStudio 2017 Community](https://visualstudio.microsoft.com/vs/community/)
|
* [VisualStudio 2017 Community](https://visualstudio.microsoft.com/vs/community/)
|
||||||
* [Notepad++](https://notepad-plus-plus.org/)
|
* [Notepad++](https://notepad-plus-plus.org/)
|
||||||
* [TortoiseGit](https://tortoisegit.org/)
|
|
||||||
|
## used 3rd party resources
|
||||||
|
|
||||||
|
* [Tango Icon Library](http://tango.freedesktop.org/Tango_Icon_Library)
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|||||||