mirror of
https://github.com/DaKerboul/perun.git
synced 2026-08-09 14:45:39 +02:00
luas modified to support perun.dll
This commit is contained in:
@@ -2,16 +2,22 @@
|
||||
local PerunConfig = {}
|
||||
|
||||
-- ###################### SETTINGS - DO NOT MODIFY OUTSIDE THIS SECTION #############################
|
||||
|
||||
-- Connection
|
||||
PerunConfig.TCPPerunHost = "localhost" -- (string) [default: "localhost"] IP adress of the Perun instance or "localhost"
|
||||
PerunConfig.TCPTargetPort = 48623 -- (int) [default: 48621] TCP port to send data to
|
||||
PerunConfig.Instance = 3 -- (int) [default: 1] Id number of instance (if multiple DCS instances are to run at the same PC)
|
||||
PerunConfig.RefreshStatus = 15 -- (int) [default: 60] Base refresh rate in seconds to send status update
|
||||
PerunConfig.TCPTargetPort = 48621 -- (int) [default: 48621] TCP port to send data to
|
||||
PerunConfig.Instance = 1 -- (int) [default: 1] Id number of instance (if multiple DCS instances are to run at the same PC)
|
||||
PerunConfig.RefreshStatus = 60 -- (int) [default: 60] Base refresh rate in seconds to send status update
|
||||
|
||||
-- Mission Configuration
|
||||
PerunConfig.MissionStartNoDeathWindow = 300 -- (int) [default: 300] Number of secounds after mission start when death of the pilot will not go to statistics, shall avoid death penalty during spawning DCS bugs
|
||||
PerunConfig.DebugMode = 2 -- (int) [0 (default),1,2] Value greater than 0 will display Perun information in DCS log file, values: 1 - minimal verbose, 2 - all log information will be logged
|
||||
PerunConfig.MOTD_L1 = "[Perun] Witamy na serwerze #3 Gildia.org !" -- (string) Message send to players connecting the server - Line 1
|
||||
PerunConfig.MOTD_L2 = "[Perun] Wymagamy obecnosci DCS SRS (UNICOM 242.00MHz) - szczegoly na forum" -- (string) Message send to players connecting the server - Line 2
|
||||
PerunConfig.ConnectionError_L1 = "[Perun] ERROR: Connection broken - contact server admin!" -- (string) Information to send to players when Perun connection is broken
|
||||
|
||||
-- Localisation
|
||||
PerunConfig.MOTD_L1 = "[Perun] Welcome to our server !" -- (string) Message send to players connecting the server - Line 1
|
||||
PerunConfig.MOTD_L2 = "[Perun] Stats and event data integrated with Perun for DCS World" -- (string) Message send to players connecting the server - Line 2
|
||||
PerunConfig.ConnectionError_L1 = "[Perun] ERROR: Connection broken - contact server admin!" -- (string) Information to send to players when Perun connection is broken
|
||||
|
||||
-- Debug
|
||||
PerunConfig.DebugMode = 1 -- (int) [0 (default),1,2] Value greater than 0 will display Perun information in DCS log file, values: 1 - minimal verbose, 2 - all log information will be logged
|
||||
|
||||
-- ###################### END OF SETTINGS - DO NOT MODIFY OUTSIDE THIS SECTION ######################
|
||||
return PerunConfig
|
||||
|
||||
@@ -4,10 +4,15 @@ net.log("Loading - Perun") -- Display perun information in log
|
||||
-- Initial init
|
||||
local Perun = {}
|
||||
|
||||
-- Load Lua Socket
|
||||
-- Load Luas
|
||||
package.path = package.path..";"..lfs.currentdir().."/LuaSocket/?.lua"..";"..lfs.writedir() .. "/Mods/services/Perun/lua/?.lua"
|
||||
package.cpath = package.cpath..";"..lfs.currentdir().."/LuaSocket/?.dll"
|
||||
|
||||
-- Load Dlls
|
||||
package.cpath = package.cpath..';'.. lfs.writedir()..'/Mods/services/Perun/bin/' ..'?.dll;'
|
||||
Perun.dll_main = require('main')
|
||||
Perun.dll_main.StartOfApp()
|
||||
|
||||
-- Load config file
|
||||
local PerunConfig = require "perun_config"
|
||||
Perun.RefreshStatus = PerunConfig.RefreshStatus
|
||||
@@ -22,6 +27,7 @@ Perun.ConnectionError = PerunConfig.ConnectionError_L1
|
||||
|
||||
-- Variable init
|
||||
Perun.Version = "v0.12.0"
|
||||
|
||||
Perun.StatusData = {}
|
||||
Perun.SlotsData = {}
|
||||
Perun.MissionData = {}
|
||||
@@ -29,20 +35,17 @@ Perun.StatData = {}
|
||||
Perun.StatDataLastType = {}
|
||||
Perun.PlayersTableCache = {}
|
||||
Perun.MissionHash=""
|
||||
Perun.ReconnectTimeout = 30
|
||||
|
||||
Perun.lastSentStatus = 0
|
||||
Perun.lastSentMission = 0
|
||||
Perun.lastSentKeepAlive = 0
|
||||
Perun.lastConnectionError = 0
|
||||
Perun.lastFrameStart = 0;
|
||||
Perun.lastTimer = 0
|
||||
Perun.lastReconnect = (-1) * Perun.ReconnectTimeout
|
||||
Perun.SendRetries = 2
|
||||
Perun.RefreshKeepAlive = 3
|
||||
Perun.FrameTime = 0;
|
||||
Perun.lastFrameTime = 0;
|
||||
|
||||
Perun.socket = require("socket")
|
||||
Perun.IsServer = DCS.isServer( )
|
||||
Perun.ReconnectTimeout = 30;
|
||||
Perun.RefreshKeepAlive = 3
|
||||
|
||||
-- ################################ Helper function definitions ################################
|
||||
Perun.GetCategory = function(id)
|
||||
@@ -233,22 +236,9 @@ end
|
||||
|
||||
Perun.ConnectToPerun = function ()
|
||||
-- Connects to Perun server
|
||||
Perun.AddLog("Connecting to TCP server",2)
|
||||
Perun.TCP = assert(Perun.socket.tcp())
|
||||
Perun.TCP:settimeout(5000)
|
||||
Perun.TCP:setoption('tcp-nodelay' , true)
|
||||
|
||||
_, _err = Perun.TCP:connect(Perun.TCPPerunHost, Perun.TCPTargetPort)
|
||||
if _err then
|
||||
-- Could not connect
|
||||
Perun.AddLog("ERROR - TCP connection error : " .. _err , 1)
|
||||
else
|
||||
-- Connected
|
||||
Perun.AddLog("Success - connected to TCP server",2)
|
||||
Perun.dll_main.connect(Perun.TCPPerunHost, Perun.TCPTargetPort)
|
||||
|
||||
Perun.lastSentMission = 0 -- TBD - reset so mission information will be send after connection is back
|
||||
end
|
||||
Perun.lastReconnect = DCS.getRealTime()
|
||||
Perun.AddLog(string.format("Connecting to TCP server %s:%i", Perun.TCPPerunHost, Perun.TCPTargetPort), 2)
|
||||
end
|
||||
|
||||
Perun.SendToPerun = function(data_id, data_package)
|
||||
@@ -258,7 +248,7 @@ Perun.SendToPerun = function(data_id, data_package)
|
||||
_TempData["payload"]=data_package
|
||||
_TempData["timestamp"]=os.date('%Y-%m-%d %H:%M:%S')
|
||||
_TempData["instance"]=Perun.Instance
|
||||
_TempData['dcs_frame_time']=Perun.FrameTime * 1000000
|
||||
_TempData['dcs_frame_time']=Perun.lastFrameTime * 1000000
|
||||
_TempData['dcs_current_frame_delay']=(DCS.getRealTime() - Perun.lastFrameStart) * 1000000
|
||||
|
||||
-- Build TCP frame
|
||||
@@ -276,41 +266,30 @@ Perun.SendToPerun = function(data_id, data_package)
|
||||
local _delay = 0
|
||||
|
||||
-- Try to send a few times (defind in settings section)
|
||||
_now = DCS.getRealTime()
|
||||
while _intStatus == nil and _intTries < Perun.SendRetries do
|
||||
_intStatus, _err = Perun.TCP:send(_TCPFrame)
|
||||
if _err then
|
||||
-- Failure, packet was not send
|
||||
_delay = (DCS.getRealTime() - _now) * 1000000
|
||||
Perun.AddLog("Packed not send : " .. data_id .. " , error: " .. _err .. ", tries: " .. _intTries .. ", tcp delay: " .. _delay .. "us" .. ", lua2json delay: " .. _delay_lua2json .. "us",2)
|
||||
if _now > Perun.lastReconnect + Perun.ReconnectTimeout then
|
||||
Perun.ConnectToPerun()
|
||||
end
|
||||
else
|
||||
-- Succes, packet was send
|
||||
_delay = (DCS.getRealTime() - _now) * 1000000
|
||||
Perun.AddLog("Packet send : " .. data_id .. " , tries:" .. _intTries .. ", tcp delay: " .. _delay .. "us" .. ", lua2json delay: " .. _delay_lua2json .. "us",2)
|
||||
Perun.lastSentKeepAlive = _now -- reset keep alive counter, reduce traffic
|
||||
_dropped = false
|
||||
end
|
||||
_intTries=_intTries+1
|
||||
end
|
||||
|
||||
if _dropped == true then
|
||||
-- Add information to log file and send chat message to all that Perun connection is broken
|
||||
_delay = (DCS.getRealTime() - _now) * 1000000
|
||||
_flagConnected, _flagReconnected = Perun.dll_main.tcpSendFrame(_TCPFrame)
|
||||
|
||||
if (_flagConnected < 1) and (_now > Perun.lastConnectionError + Perun.ReconnectTimeout) then
|
||||
-- Add information to log file and send chat message to all that Perun connection is broken
|
||||
-- Add information to log file
|
||||
Perun.AddLog("ERROR - TCP connection is not available",1)
|
||||
|
||||
Perun.AddLog("ERROR - packed dropped : " .. data_id .. ", tcp delay: " .. _delay .. "us" .. ", lua2json delay: " .. _delay_lua2json .. "us",1)
|
||||
if _now > Perun.lastConnectionError + Perun.ReconnectTimeout then
|
||||
-- Informs all players that there is Peron error; below hack for DCS net.send_chat not working
|
||||
local _all_players = net.get_player_list()
|
||||
for PlayerIDIndex, _playerID in ipairs(_all_players) do
|
||||
net.send_chat_to(Perun.ConnectionError , _playerID)
|
||||
end
|
||||
-- Reset last error send counter
|
||||
Perun.lastConnectionError = _now
|
||||
-- Informs all players that there is Peron error; below hack for DCS net.send_chat not working
|
||||
local _all_players = net.get_player_list()
|
||||
for PlayerIDIndex, _playerID in ipairs(_all_players) do
|
||||
net.send_chat_to(Perun.ConnectionError , _playerID)
|
||||
end
|
||||
-- Reset last error send counter
|
||||
Perun.lastConnectionError = _now
|
||||
end
|
||||
|
||||
-- Handle reconnection to the server
|
||||
if _flagReconnected > 0 then
|
||||
Perun.AddLog("Success - (re)connected to TCP server",2)
|
||||
Perun.lastSentMission = 0
|
||||
end
|
||||
|
||||
_delay = (DCS.getRealTime() - _now) * 1000000
|
||||
Perun.AddLog("TCP frame added to buffer : " .. data_id .. ", tcp delay: " .. _delay .. "us" .. ", lua2json delay: " .. _delay_lua2json .. "us" .. ", connection: " .. _flagConnected,2)
|
||||
end
|
||||
|
||||
-- ################################ Log functions ################################
|
||||
@@ -723,7 +702,7 @@ Perun.onSimulationFrame = function()
|
||||
end
|
||||
|
||||
-- Calculate approx. frame time
|
||||
Perun.FrameTime = DCS.getRealTime() - _now
|
||||
Perun.lastFrameTime = DCS.getRealTime() - _now
|
||||
end
|
||||
|
||||
Perun.onPlayerStart = function (id)
|
||||
@@ -865,7 +844,7 @@ Perun.onGameEvent = function (eventName,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
||||
elseif eventName == "takeoff" then
|
||||
--"takeoff", playerID, unit_missionID, airdromeName
|
||||
if arg3 ~= "" then
|
||||
_temp_airfield = " from " .. arg3;
|
||||
_temp_airfield = " from " .. arg3;
|
||||
else
|
||||
_temp_airfield = "";
|
||||
end
|
||||
@@ -898,10 +877,12 @@ Perun.onGameEvent = function (eventName,arg1,arg2,arg3,arg4,arg5,arg6,arg7)
|
||||
end
|
||||
|
||||
-- ########### Finalize and set callbacks ###########
|
||||
if Perun.IsServer then
|
||||
if DCS.isServer() then
|
||||
-- If this game instance is hosting multiplayer game, start Perun
|
||||
Perun.MissionHash=Perun.GenerateMissionHash() -- Generate initial missionhash
|
||||
DCS.setUserCallbacks(Perun) -- Set user callbacs, map DCS event handlers with functions defined above
|
||||
net.log("Loaded - Perun - VladMordock: " .. Perun.Version ) -- Display perun information in log
|
||||
Perun.ConnectToPerun() -- Connect to Perun server
|
||||
end
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user