초기커밋
This commit is contained in:
243
ServerCore/Timer/SimpleTimer.cs
Normal file
243
ServerCore/Timer/SimpleTimer.cs
Normal file
@@ -0,0 +1,243 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
|
||||
namespace ServerCore;
|
||||
|
||||
//=============================================================================================
|
||||
// 간단한 로직을 위한 타이머 클래스 이다.
|
||||
//
|
||||
// author : kangms
|
||||
//
|
||||
//=============================================================================================
|
||||
|
||||
public class SimpleTimer
|
||||
{
|
||||
private DateTime m_begin_timestamp = DateTime.MinValue;
|
||||
private DateTime m_end_timestamp = DateTime.MinValue;
|
||||
|
||||
private Int64 m_time_limit_msec = 0;
|
||||
|
||||
private bool m_is_paused = false;
|
||||
private DateTime m_pause_timestamp = new DateTime();
|
||||
private Int64 m_pause_total_msec = 0;
|
||||
|
||||
private bool m_active = false;
|
||||
|
||||
public SimpleTimer()
|
||||
{
|
||||
}
|
||||
|
||||
public SimpleTimer(Int64 timeLimitMSec)
|
||||
{
|
||||
setTimeLimitMSec(timeLimitMSec);
|
||||
}
|
||||
|
||||
public void setTimer(Int64 timeLimitMSec)
|
||||
{
|
||||
setTimer(0, timeLimitMSec);
|
||||
}
|
||||
|
||||
public void setTimer(Int64 beginUtcTick, Int64 timeLimitMSec)
|
||||
{
|
||||
m_begin_timestamp = beginUtcTick > 0 ? new DateTime(beginUtcTick) : DateTime.UtcNow;
|
||||
m_time_limit_msec = timeLimitMSec;
|
||||
|
||||
m_is_paused = false;
|
||||
m_pause_total_msec = 0;
|
||||
|
||||
m_end_timestamp = DateTime.MinValue;
|
||||
}
|
||||
|
||||
public void activate(Int64 timeLimitMSec = 0)
|
||||
{
|
||||
m_active = true;
|
||||
if (timeLimitMSec != 0)
|
||||
{
|
||||
setTimer(0, timeLimitMSec);
|
||||
}
|
||||
else
|
||||
{
|
||||
reset(0);
|
||||
}
|
||||
}
|
||||
|
||||
public void activate(Int64 beginUtcTick, Int64 timeLimitMSec = 0)
|
||||
{
|
||||
m_active = true;
|
||||
if (timeLimitMSec != 0)
|
||||
{
|
||||
setTimer(beginUtcTick, timeLimitMSec);
|
||||
}
|
||||
else
|
||||
{
|
||||
reset(beginUtcTick);
|
||||
}
|
||||
}
|
||||
|
||||
public bool isActive()
|
||||
{
|
||||
return m_active;
|
||||
}
|
||||
|
||||
public void deactivate()
|
||||
{
|
||||
m_active = false;
|
||||
m_end_timestamp = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public void setTimeLimitMSec(Int64 limitMSec)
|
||||
{
|
||||
m_time_limit_msec = limitMSec;
|
||||
|
||||
m_time_limit_msec = Math.Max(m_time_limit_msec, 0);
|
||||
}
|
||||
|
||||
public void incTimeLimitMSec(Int64 incMSec)
|
||||
{
|
||||
m_time_limit_msec += incMSec;
|
||||
|
||||
m_time_limit_msec = Math.Max(m_time_limit_msec, 0);
|
||||
}
|
||||
|
||||
public Int64 getTimeLimitMSec()
|
||||
{
|
||||
return m_time_limit_msec;
|
||||
}
|
||||
|
||||
public void reset()
|
||||
{
|
||||
setTimer(m_time_limit_msec);
|
||||
}
|
||||
|
||||
public void reset(Int64 beginUtcTick)
|
||||
{
|
||||
setTimer(beginUtcTick, m_time_limit_msec);
|
||||
}
|
||||
|
||||
public bool expired()
|
||||
{
|
||||
if (false == isActive())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (true == isPause())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return (DateTime.UtcNow - m_begin_timestamp).TotalMilliseconds > (m_pause_total_msec + m_time_limit_msec);
|
||||
}
|
||||
|
||||
public void pause()
|
||||
{
|
||||
if (isPause())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
m_is_paused = true;
|
||||
m_pause_timestamp = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public bool isPause()
|
||||
{
|
||||
return m_is_paused;
|
||||
}
|
||||
|
||||
public void unpause()
|
||||
{
|
||||
if (false == isPause())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var pause_time = (DateTime.UtcNow - m_pause_timestamp).TotalMilliseconds;
|
||||
m_pause_total_msec += (Int64)pause_time;
|
||||
|
||||
m_is_paused = false;
|
||||
}
|
||||
|
||||
public Int64 getTotalTimeMSec()
|
||||
{
|
||||
if (!isActive())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var end_time = m_begin_timestamp.AddMilliseconds(m_time_limit_msec);
|
||||
|
||||
var total_time = (end_time - m_begin_timestamp).TotalMilliseconds;
|
||||
|
||||
total_time = Math.Max(total_time, 0);
|
||||
|
||||
return (Int64)total_time;
|
||||
}
|
||||
|
||||
public Int64 getElapsedPauseTimeMSec()
|
||||
{
|
||||
if (false == isActive())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var pause_time = m_pause_total_msec;
|
||||
|
||||
if (true == isPause())
|
||||
{
|
||||
pause_time += (Int64)((DateTime.UtcNow - m_pause_timestamp).TotalMilliseconds);
|
||||
}
|
||||
|
||||
pause_time = Math.Max(pause_time, 0);
|
||||
|
||||
return (Int64)pause_time;
|
||||
}
|
||||
|
||||
public bool isOn()
|
||||
{
|
||||
if (false == expired())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
reset();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public DateTime getStartedTime() => m_begin_timestamp;
|
||||
public DateTime getEndTime() => m_end_timestamp;
|
||||
|
||||
public Int64 getRemainTimeMSec()
|
||||
{
|
||||
if (false == isActive())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var pause_time = getElapsedPauseTimeMSec();
|
||||
|
||||
TimeSpan time_span = DateTime.UtcNow - m_begin_timestamp;
|
||||
var remain_time = m_time_limit_msec + pause_time - (Int64)time_span.TotalMilliseconds;
|
||||
remain_time = Math.Max(remain_time, 0);
|
||||
|
||||
return remain_time;
|
||||
}
|
||||
|
||||
public Int64 getElapsedTimeMSec()
|
||||
{
|
||||
if (false == isActive())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
TimeSpan time_span = DateTime.UtcNow - m_begin_timestamp;
|
||||
return (Int64)time_span.TotalMilliseconds;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user