|
|
@@ -29,7 +29,7 @@ namespace OHVConnector
|
|
|
TsQueue<QueueObject> qQ = new TsQueue<QueueObject>();
|
|
|
TsQueue<OCSMessage> qqW = new TsQueue<OCSMessage>();
|
|
|
|
|
|
- byte[] crcTable = ChksumUtils.Crc8GenTable( 0xD5 );
|
|
|
+ byte[] crcTable = ChksumUtils.Crc8GenTable(0xD5);
|
|
|
|
|
|
TimerTemplate<byte, OCSMessage> quzT3 = new TimerTemplate<byte, OCSMessage>();
|
|
|
TsMap<long, SyncObject> ddReq = new TsMap<long, SyncObject>(); //sync 통신을 위함.
|
|
|
@@ -75,61 +75,61 @@ namespace OHVConnector
|
|
|
#endregion
|
|
|
|
|
|
#region Connection Method
|
|
|
- public void Connect( bool active = false )
|
|
|
+ public void Connect(bool active = false)
|
|
|
{
|
|
|
ModeActive = active;
|
|
|
- if ( !inited.HasValue )//최초 한번 실행.
|
|
|
+ if (!inited.HasValue)//최초 한번 실행.
|
|
|
{
|
|
|
- _TQ = ThreadUtils.Invoke( _ThPullQueue );
|
|
|
+ _TQ = ThreadUtils.Invoke(_ThPullQueue);
|
|
|
inited = false;
|
|
|
}
|
|
|
- Assert.IsFalse( inited.Value, "Already connecting" );
|
|
|
+ Assert.IsFalse(inited.Value, "Already connecting");
|
|
|
|
|
|
inited = true;
|
|
|
|
|
|
- _TW = ThreadUtils.Invoke( _ThWriteTcp );
|
|
|
- _TR = ThreadUtils.Invoke( _ThReadTcp );
|
|
|
- _TLINK = ThreadUtils.Invoke( _ThLinkQuz );
|
|
|
+ _TW = ThreadUtils.Invoke(_ThWriteTcp);
|
|
|
+ _TR = ThreadUtils.Invoke(_ThReadTcp);
|
|
|
+ _TLINK = ThreadUtils.Invoke(_ThLinkQuz);
|
|
|
|
|
|
- _OnLog( "OHV CONNECT REQ " + Config );
|
|
|
+ _OnLog("OHV CONNECT REQ " + Config);
|
|
|
}
|
|
|
|
|
|
public void Disconnect()
|
|
|
{
|
|
|
//if (inited.HasValue && inited.Value)
|
|
|
- _OnLog( "OCS DISCONNECT REQ " + Config );
|
|
|
+ _OnLog("OCS DISCONNECT REQ " + Config);
|
|
|
|
|
|
inited = false;
|
|
|
quzT3.StopAll();
|
|
|
|
|
|
- ThreadUtils.Kill( _TLINK );
|
|
|
- ThreadUtils.Kill( _TW );
|
|
|
+ ThreadUtils.Kill(_TLINK);
|
|
|
+ ThreadUtils.Kill(_TW);
|
|
|
h.StopListen();
|
|
|
- ThreadUtils.Kill( _TR );
|
|
|
+ ThreadUtils.Kill(_TR);
|
|
|
|
|
|
h.CloseSocket();//Kill 을 사용할 경우 뒤에 존재해야 한다.
|
|
|
}
|
|
|
|
|
|
- void _OnDicontd( Exception e )
|
|
|
+ void _OnDicontd(Exception e)
|
|
|
{
|
|
|
- _OnLog( "OHV DISCONNECTED" );
|
|
|
+ _OnLog("OHV DISCONNECTED");
|
|
|
sysbyte = 0;
|
|
|
ctrl_sysbyte = INIT_CTRL_SYSBYTE;
|
|
|
//quzT3.StopAll(); //2020.08.261. Kang. 재연결 시 다시 Send 를 위해.
|
|
|
ddReq.Clear();
|
|
|
|
|
|
- qQ.Enqueue( new QoNotComm { Arg0 = e } );
|
|
|
+ qQ.Enqueue(new QoNotComm { Arg0 = e });
|
|
|
}
|
|
|
|
|
|
void _OnContd()
|
|
|
{
|
|
|
- _OnLog( "OHV CONNECTED" );
|
|
|
- qQ.Enqueue( new QoComm() );
|
|
|
+ _OnLog("OHV CONNECTED");
|
|
|
+ qQ.Enqueue(new QoComm());
|
|
|
}
|
|
|
|
|
|
void TcpConnect()
|
|
|
{
|
|
|
- h.Connect( new TcpComm
|
|
|
+ h.Connect(new TcpComm
|
|
|
{
|
|
|
Active = ModeActive,
|
|
|
RetryCnt = 1, //T5를 처리해야 함.
|
|
|
@@ -137,38 +137,38 @@ namespace OHVConnector
|
|
|
PortNo = Config.Port,
|
|
|
T5 = Config.T5,
|
|
|
T6 = Config.T6,//Config.TcpRecdTimeout,
|
|
|
- } );
|
|
|
+ });
|
|
|
|
|
|
- if ( !h.Connected )
|
|
|
+ if (!h.Connected)
|
|
|
{
|
|
|
- if ( ModeActive )
|
|
|
- _OnLog( "T5 TIMEOUT " + Config.ID );
|
|
|
+ if (ModeActive)
|
|
|
+ _OnLog("T5 TIMEOUT " + Config.ID);
|
|
|
return;
|
|
|
}
|
|
|
_OnContd();
|
|
|
|
|
|
- ChgTcpTimeout( true );
|
|
|
+ ChgTcpTimeout(true);
|
|
|
//if (ModeActive)
|
|
|
//SendCtrlMsg(1);//무조건 HSMS Active
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- private void _OnLog( string obj )
|
|
|
+ private void _OnLog(string obj)
|
|
|
{
|
|
|
- qQ.Enqueue( new QoLog { Arg0 = obj } );
|
|
|
+ qQ.Enqueue(new QoLog { Arg0 = obj });
|
|
|
}
|
|
|
|
|
|
- private void _OnTimeout( byte crc, OCSMessage msg )
|
|
|
+ private void _OnTimeout(byte crc, OCSMessage msg)
|
|
|
{
|
|
|
- if ( null == msg )
|
|
|
+ if (null == msg)
|
|
|
{
|
|
|
- logger.W( "T3 [{0}] attachment is null", crc );
|
|
|
+ logger.W("T3 [{0}] attachment is null", crc);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- qQ.Enqueue( new QoTimeout { Arg0 = msg } );
|
|
|
- _OnLog( $"T3 TIMEOUT {msg.LogFormat()}" );
|
|
|
+ qQ.Enqueue(new QoTimeout { Arg0 = msg });
|
|
|
+ _OnLog($"T3 TIMEOUT {msg.LogFormat()}");
|
|
|
}
|
|
|
|
|
|
#region Thread Method
|
|
|
@@ -181,40 +181,40 @@ namespace OHVConnector
|
|
|
{
|
|
|
bool waked;
|
|
|
|
|
|
- if ( Config.LinkOn )
|
|
|
- waked = LockUtils.Wait( Config.TLink, lockLink );
|
|
|
+ if (Config.LinkOn)
|
|
|
+ waked = LockUtils.Wait(Config.TLink, lockLink);
|
|
|
else
|
|
|
- waked = LockUtils.Wait( lockLink );
|
|
|
+ waked = LockUtils.Wait(lockLink);
|
|
|
|
|
|
- if ( waked )
|
|
|
+ if (waked)
|
|
|
continue;//notify: 패킷을 수신할때마다 reset 함.
|
|
|
|
|
|
- if ( Connected )//연결여부와 상관없이 thread 가 기동되므로 연결시에만.
|
|
|
+ if (Connected)//연결여부와 상관없이 thread 가 기동되므로 연결시에만.
|
|
|
{
|
|
|
//SendCtrlMsg(5);
|
|
|
}
|
|
|
}
|
|
|
- catch ( ThreadAbortException )
|
|
|
+ catch (ThreadAbortException)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
- catch ( Exception e )
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
- logger.E( e );
|
|
|
+ logger.E(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void _ThWriteTcp()
|
|
|
{
|
|
|
- logger.I( "Write {0}", ThreadUtils.GetCurrThreadID() );
|
|
|
+ logger.I("Write {0}", ThreadUtils.GetCurrThreadID());
|
|
|
for (; ; )
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
var v = qqW.Dequeue();
|
|
|
|
|
|
- this.TcpWriteMsg( v );
|
|
|
+ this.TcpWriteMsg(v);
|
|
|
//v.IsRecd = false;
|
|
|
|
|
|
//if (v.AfterMillis > 0)
|
|
|
@@ -225,13 +225,13 @@ namespace OHVConnector
|
|
|
//else
|
|
|
// TcpWriteNormalMsg(v);
|
|
|
}
|
|
|
- catch ( ThreadAbortException )
|
|
|
+ catch (ThreadAbortException)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
- catch ( Exception e )
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
- logger.E( e );
|
|
|
+ logger.E(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -242,31 +242,31 @@ namespace OHVConnector
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if ( !h.Connected )
|
|
|
+ if (!h.Connected)
|
|
|
{
|
|
|
TcpConnect();
|
|
|
continue;
|
|
|
}
|
|
|
ReadSocket();
|
|
|
}
|
|
|
- catch ( ObjectDisposedException e )
|
|
|
+ catch (ObjectDisposedException e)
|
|
|
{
|
|
|
- TcpError( e );
|
|
|
+ TcpError(e);
|
|
|
}
|
|
|
- catch ( IOException e )
|
|
|
+ catch (IOException e)
|
|
|
{
|
|
|
- TcpError( e );
|
|
|
+ TcpError(e);
|
|
|
}
|
|
|
- catch ( ThreadAbortException )
|
|
|
+ catch (ThreadAbortException)
|
|
|
{
|
|
|
- _OnLog( "DISCONNECT REQUEST APPLIED " + Config );
|
|
|
- TcpError( new IOException( "DISCONNECT REQUEST" ) );
|
|
|
+ _OnLog("DISCONNECT REQUEST APPLIED " + Config);
|
|
|
+ TcpError(new IOException("DISCONNECT REQUEST"));
|
|
|
break;
|
|
|
}
|
|
|
- catch ( Exception e )
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
- TcpError( e );
|
|
|
- logger.E( e );
|
|
|
+ TcpError(e);
|
|
|
+ logger.E(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -279,44 +279,44 @@ namespace OHVConnector
|
|
|
{
|
|
|
var qo = this.qQ.Dequeue();
|
|
|
|
|
|
- if ( qo is QoRecdUnk )
|
|
|
+ if (qo is QoRecdUnk)
|
|
|
{
|
|
|
- DelegateUtils.Invoke( OnRecdUnk, qo.Arg0, qo.Arg1 );
|
|
|
+ DelegateUtils.Invoke(OnRecdUnk, qo.Arg0, qo.Arg1);
|
|
|
//if (AutoS9Fy)
|
|
|
//{
|
|
|
// var v = qo.Arg0 as SFMessage;
|
|
|
// Send(v.S9Fy);
|
|
|
//}
|
|
|
}
|
|
|
- else if ( qo is QoComm )
|
|
|
- DelegateUtils.Invoke( OnContd, Config.ID );
|
|
|
- else if ( qo is QoNotComm )
|
|
|
- DelegateUtils.Invoke( OnDiscontd, Config.ID, qo.Arg0 );
|
|
|
- else if ( qo is QoLog )
|
|
|
- DelegateUtils.Invoke( OnLog, Config.ID, qo.Arg0 );
|
|
|
- else if ( qo is QoRecd )
|
|
|
- DelegateUtils.Invoke( OnRecd, qo.Arg0 );
|
|
|
- else if ( qo is QoTimeout )
|
|
|
+ else if (qo is QoComm)
|
|
|
+ DelegateUtils.Invoke(OnContd, Config.ID);
|
|
|
+ else if (qo is QoNotComm)
|
|
|
+ DelegateUtils.Invoke(OnDiscontd, Config.ID, qo.Arg0);
|
|
|
+ else if (qo is QoLog)
|
|
|
+ DelegateUtils.Invoke(OnLog, Config.ID, qo.Arg0);
|
|
|
+ else if (qo is QoRecd)
|
|
|
+ DelegateUtils.Invoke(OnRecd, qo.Arg0);
|
|
|
+ else if (qo is QoTimeout)
|
|
|
{
|
|
|
- DelegateUtils.Invoke( OnT3Timeout, qo.Arg0 );
|
|
|
+ DelegateUtils.Invoke(OnT3Timeout, qo.Arg0);
|
|
|
//if (AutoS9Fy)
|
|
|
//{
|
|
|
// var v = qo.Arg0 as SFMessage;
|
|
|
// Send(MessageSupport.MakeS9FX(9, v));
|
|
|
//}
|
|
|
}
|
|
|
- else if ( qo is QoSent )
|
|
|
- DelegateUtils.Invoke( OnSent, qo.Arg0 );
|
|
|
+ else if (qo is QoSent)
|
|
|
+ DelegateUtils.Invoke(OnSent, qo.Arg0);
|
|
|
else
|
|
|
- Assert.Fail( "Unk Object {0}", qo );
|
|
|
+ Assert.Fail("Unk Object {0}", qo);
|
|
|
}
|
|
|
- catch ( ThreadAbortException )
|
|
|
+ catch (ThreadAbortException)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
- catch ( Exception e )
|
|
|
+ catch (Exception e)
|
|
|
{
|
|
|
- logger.E( e );
|
|
|
+ logger.E(e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -332,54 +332,64 @@ namespace OHVConnector
|
|
|
stx = h.ReadByte(); //STX
|
|
|
//logger.D( $"[OCS] - {stx}" );
|
|
|
}
|
|
|
- while ( stx != STX );
|
|
|
+ while (stx != STX);
|
|
|
|
|
|
string revID = string.Empty;
|
|
|
string sendID = string.Empty;
|
|
|
|
|
|
- if ( ModeActive )
|
|
|
+ if (ModeActive)
|
|
|
{
|
|
|
- revID = h.ReadAscii( 2 );
|
|
|
- sendID = h.ReadAscii( 5 );
|
|
|
+ revID = h.ReadAscii(2);
|
|
|
+ sendID = h.ReadAscii(5);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- revID = h.ReadAscii( 5 );
|
|
|
- sendID = h.ReadAscii( 2 );
|
|
|
+ revID = h.ReadAscii(5);
|
|
|
+ sendID = h.ReadAscii(2);
|
|
|
}
|
|
|
|
|
|
- if ( !this.Config.ID.Equals( revID ) )
|
|
|
- OnLog( this.Config.ID, $"RevID Not Equals" );
|
|
|
+ if (!this.Config.ID.Equals(revID))
|
|
|
+ OnLog(this.Config.ID, $"RevID Not Equals");
|
|
|
|
|
|
var ocsMeg = new OCSMessage();
|
|
|
ocsMeg.RevID = revID;
|
|
|
ocsMeg.SendID = sendID;
|
|
|
- ocsMeg.Kind = h.ReadAscii( 1 ).ToEnum<eKind>( eKind.Unknown );
|
|
|
+ ocsMeg.Kind = h.ReadAscii(1).ToEnum<eKind>(eKind.Unknown);
|
|
|
|
|
|
- if ( ocsMeg.Kind == eKind.M ) //M Command 가변으로 들어 온다.
|
|
|
+ if (ocsMeg.Kind == eKind.M) //M Command 가변으로 들어 온다.
|
|
|
{
|
|
|
- ocsMeg.Tag = h.ReadAscii( 4 );
|
|
|
- ocsMeg.SubCode = h.ReadAscii( 3 );
|
|
|
- var viaCount = Convert.ToInt16( h.ReadAscii( 4 ) ); //4byte
|
|
|
- for ( int i = 0; i < viaCount; i++ )
|
|
|
+ ocsMeg.Tag = h.ReadAscii(4);
|
|
|
+ ocsMeg.SubCode = h.ReadAscii(3);
|
|
|
+ var viaCount = Convert.ToInt16(h.ReadAscii(4)); //4byte
|
|
|
+ for (int i = 0; i < viaCount; i++)
|
|
|
{
|
|
|
- ocsMeg.ViaRouteList.Add( h.ReadAscii( 4 ) );
|
|
|
+ ocsMeg.ViaRouteList.Add(h.ReadAscii(4));
|
|
|
}
|
|
|
- ocsMeg.CheckSum = h.ReadAscii( 1 );
|
|
|
- h.ReadUntil( ETX );
|
|
|
+ ocsMeg.CheckSum = h.ReadAscii(1);
|
|
|
+ h.ReadUntil(ETX);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ if (ocsMeg.Kind == eKind.D) //시간동기화 메시지
|
|
|
+ {
|
|
|
+ ocsMeg.Tag = h.ReadAscii(4);
|
|
|
+ ocsMeg.SubCode = h.ReadAscii(13);
|
|
|
+ ocsMeg.CheckSum = h.ReadAscii(1);
|
|
|
+ h.ReadUntil(ETX);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ocsMeg.Tag = h.ReadAscii(4);
|
|
|
+ ocsMeg.SubCode = h.ReadAscii(3);
|
|
|
|
|
|
- ocsMeg.Tag = h.ReadAscii( 4 );
|
|
|
- ocsMeg.SubCode = h.ReadAscii( 3 );
|
|
|
+ if (ocsMeg.Kind == eKind.B)
|
|
|
+ ocsMeg.BatterySOH = h.ReadAscii(3);
|
|
|
|
|
|
- if ( ocsMeg.Kind == eKind.B )
|
|
|
- ocsMeg.BatterySOH = h.ReadAscii( 3 );
|
|
|
+ //CheckSum 을 해야 하나??
|
|
|
+ ocsMeg.CheckSum = h.ReadAscii(1);
|
|
|
+ h.ReadUntil(ETX);
|
|
|
+ }
|
|
|
|
|
|
- //CheckSum 을 해야 하나??
|
|
|
- ocsMeg.CheckSum = h.ReadAscii( 1 );
|
|
|
- h.ReadUntil( ETX );
|
|
|
}
|
|
|
|
|
|
//Todo: 응답으로 온건지 그냥 보낸건지 분류가 필요. = CheckSum 을 저장 했다가 이용하자.
|
|
|
@@ -390,20 +400,20 @@ namespace OHVConnector
|
|
|
//var head = h.ReadBytes(10);
|
|
|
//var body = h.ReadBytes(len - 10);
|
|
|
|
|
|
- ChgTcpTimeout( true );//무언가 받으면
|
|
|
+ ChgTcpTimeout(true);//무언가 받으면
|
|
|
|
|
|
- LockUtils.NotifyAll( lockLink );//Linktest thread 변환의 notify
|
|
|
+ LockUtils.NotifyAll(lockLink);//Linktest thread 변환의 notify
|
|
|
|
|
|
//var v = new OCSMessage { Header = head, Body = body, IsRecd = true };
|
|
|
//v.Decoding();
|
|
|
|
|
|
- _OnRecd( ocsMeg );
|
|
|
+ _OnRecd(ocsMeg);
|
|
|
}
|
|
|
|
|
|
- void _OnRecd( OCSMessage recd )
|
|
|
- {
|
|
|
+ void _OnRecd(OCSMessage recd)
|
|
|
+ {
|
|
|
//Alive Check Reply
|
|
|
- if ( recd.Kind == eKind.A && !ModeActive ) //자동으로 응답을 보낸다. OCS 가 Active 상태
|
|
|
+ if (recd.Kind == eKind.A && !ModeActive) //자동으로 응답을 보낸다. OCS 가 Active 상태
|
|
|
{
|
|
|
var reply = new OCSMessage()
|
|
|
{
|
|
|
@@ -414,50 +424,50 @@ namespace OHVConnector
|
|
|
Tag = recd.Tag,
|
|
|
SubCode = recd.SubCode,
|
|
|
};
|
|
|
- Reply( reply );
|
|
|
+ Reply(reply);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if ( recd.Kind == eKind.M && !ModeActive ) //M Code 응답은 없음
|
|
|
+ if (recd.Kind == eKind.M && !ModeActive) //M Code 응답은 없음
|
|
|
{
|
|
|
- this.qQ.Enqueue( new QoRecd { Arg0 = recd } );
|
|
|
+ this.qQ.Enqueue(new QoRecd { Arg0 = recd });
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- //Send 한 Message 의 Reply 로 판단.
|
|
|
- var crc = MakeCRC8CheckSum( recd, false );
|
|
|
- if ( this.quzT3.HasId( crc ) )
|
|
|
+ //Send 한 Message 의 Reply 로 판단.
|
|
|
+ var crc = MakeCRC8CheckSum(recd, false);
|
|
|
+ if (this.quzT3.HasId(crc))
|
|
|
{
|
|
|
- //Send 목록에서 삭제한다.
|
|
|
- this.quzT3.Stop( crc );
|
|
|
- this._OnLog( $"[Reply] - {recd.LogFormat()}" );
|
|
|
+ //Send 목록에서 삭제한다.
|
|
|
+ this.quzT3.Stop(crc);
|
|
|
+ this._OnLog($"[Reply] - {recd.LogFormat()}");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- this.qQ.Enqueue( new QoRecd { Arg0 = recd } );
|
|
|
+ this.qQ.Enqueue(new QoRecd { Arg0 = recd });
|
|
|
}
|
|
|
|
|
|
- void TcpError( Exception e )
|
|
|
+ void TcpError(Exception e)
|
|
|
{
|
|
|
- _OnLog( TcpUtils.GetTcpErrMsg( h.IPClient, e ) );
|
|
|
+ _OnLog(TcpUtils.GetTcpErrMsg(h.IPClient, e));
|
|
|
|
|
|
h.CloseSocket();
|
|
|
- _OnDicontd( e );
|
|
|
+ _OnDicontd(e);
|
|
|
|
|
|
- var waitTime = ( this.Config.T3 + 2 ) * ConstUtils.ONE_SECOND;
|
|
|
- LockUtils.Wait( waitTime );//잠시대기.
|
|
|
+ var waitTime = (this.Config.T3 + 2) * ConstUtils.ONE_SECOND;
|
|
|
+ LockUtils.Wait(waitTime);//잠시대기.
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region Write Method
|
|
|
- void TcpWriteMsg( OCSMessage msg )
|
|
|
+ void TcpWriteMsg(OCSMessage msg)
|
|
|
{
|
|
|
- this.h.WriteFlush( msg.ToMemoryBuffer().ToBytes );
|
|
|
- qQ.Enqueue( new QoSent { Arg0 = msg } );
|
|
|
+ this.h.WriteFlush(msg.ToMemoryBuffer().ToBytes);
|
|
|
+ qQ.Enqueue(new QoSent { Arg0 = msg });
|
|
|
}
|
|
|
|
|
|
- void TcpWriteNormalMsg( OCSMessage nm )
|
|
|
+ void TcpWriteNormalMsg(OCSMessage nm)
|
|
|
{
|
|
|
//nm.Encoding();
|
|
|
|
|
|
@@ -475,7 +485,7 @@ namespace OHVConnector
|
|
|
//h.WriteFlush(mb.ToBytes);
|
|
|
}
|
|
|
|
|
|
- void TcpWriteCtrlMsg( OCSMessage ctrl )
|
|
|
+ void TcpWriteCtrlMsg(OCSMessage ctrl)
|
|
|
{
|
|
|
//var mb = new MemoryBuffer(16);
|
|
|
//mb.AppendBeInt(10);
|
|
|
@@ -488,40 +498,40 @@ namespace OHVConnector
|
|
|
//h.WriteFlush(mb.ToBytes);
|
|
|
}
|
|
|
|
|
|
- void SendCtrlMsg( int stype )
|
|
|
+ void SendCtrlMsg(int stype)
|
|
|
{
|
|
|
//Send(new OCSMessage { SType = stype });
|
|
|
}
|
|
|
|
|
|
- public void Send( OCSMessage msg, int after )
|
|
|
+ public void Send(OCSMessage msg, int after)
|
|
|
{
|
|
|
- if ( after > 0 )
|
|
|
- TimerUtils.Once( after, Send, msg );
|
|
|
+ if (after > 0)
|
|
|
+ TimerUtils.Once(after, Send, msg);
|
|
|
else
|
|
|
- Send( msg );
|
|
|
+ Send(msg);
|
|
|
}
|
|
|
|
|
|
- public void Send( OCSMessage msg )
|
|
|
+ public void Send(OCSMessage msg)
|
|
|
{
|
|
|
//msg.Id = Config.ID;
|
|
|
|
|
|
msg.RevID = Config.HostID;
|
|
|
msg.SendID = Config.ID;
|
|
|
|
|
|
- if ( !Connected )
|
|
|
+ if (!Connected)
|
|
|
{
|
|
|
- _OnLog( "Send fail not connected" + msg.LogFormat() );
|
|
|
+ _OnLog("Send fail not connected" + msg.LogFormat());
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- if ( msg.Kind == eKind.C ) // Control Message 는 페어로 응답이 오지 않는다.
|
|
|
+ if (msg.Kind == eKind.C) // Control Message 는 페어로 응답이 오지 않는다.
|
|
|
{
|
|
|
- qqW.Enqueue( msg );
|
|
|
+ qqW.Enqueue(msg);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
#region 2020.08.25. Kang. OCS에서 응답 안하는 것에 대해 Retry 를 위해 추가.
|
|
|
- if ( msg.Kind == eKind.L || msg.Kind == eKind.U )
|
|
|
+ if (msg.Kind == eKind.L || msg.Kind == eKind.U)
|
|
|
{
|
|
|
var crc = MakeCRC8CheckSum(msg, true);
|
|
|
if (this.quzT3.HasId(crc))
|
|
|
@@ -550,50 +560,50 @@ namespace OHVConnector
|
|
|
// msg.Systembyte = Interlocked.Increment(ref sysbyte);
|
|
|
//}
|
|
|
|
|
|
- qqW.Enqueue( msg );
|
|
|
+ qqW.Enqueue(msg);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 응답을 보낼 때 사용.
|
|
|
/// </summary>
|
|
|
/// <param name="msg"></param>
|
|
|
- public void Reply( OCSMessage msg )
|
|
|
+ public void Reply(OCSMessage msg)
|
|
|
{
|
|
|
msg.RevID = Config.HostID;
|
|
|
msg.SendID = Config.ID;
|
|
|
|
|
|
- if ( !Connected )
|
|
|
+ if (!Connected)
|
|
|
{
|
|
|
- _OnLog( "Reply fail not connected" + msg.LogFormat() );
|
|
|
+ _OnLog("Reply fail not connected" + msg.LogFormat());
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- qqW.Enqueue( msg );
|
|
|
+ qqW.Enqueue(msg);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
#region HelpMothed
|
|
|
- byte MakeCRC8CheckSum( OCSMessage msg, bool isSend )
|
|
|
+ byte MakeCRC8CheckSum(OCSMessage msg, bool isSend)
|
|
|
{
|
|
|
- if ( isSend )
|
|
|
- return ChksumUtils.Crc8( this.crcTable, msg.ToCRC8Byte4Send() );
|
|
|
+ if (isSend)
|
|
|
+ return ChksumUtils.Crc8(this.crcTable, msg.ToCRC8Byte4Send());
|
|
|
else
|
|
|
- return ChksumUtils.Crc8( this.crcTable, msg.ToCRC8Byte4Received() );
|
|
|
+ return ChksumUtils.Crc8(this.crcTable, msg.ToCRC8Byte4Received());
|
|
|
}
|
|
|
- void ChgTcpTimeout( bool infinite )
|
|
|
+ void ChgTcpTimeout(bool infinite)
|
|
|
{
|
|
|
- if ( h.Connected )
|
|
|
+ if (h.Connected)
|
|
|
{
|
|
|
- if ( infinite )
|
|
|
+ if (infinite)
|
|
|
{
|
|
|
- if ( h.Socket.ReceiveTimeout != Timeout.Infinite )
|
|
|
- h.ChangeRecvTimeout( Timeout.Infinite );
|
|
|
+ if (h.Socket.ReceiveTimeout != Timeout.Infinite)
|
|
|
+ h.ChangeRecvTimeout(Timeout.Infinite);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if ( Config.LinkOn )
|
|
|
- h.ChangeRecvTimeout( Config.T6 * ConstUtils.ONE_SECOND );
|
|
|
+ if (Config.LinkOn)
|
|
|
+ h.ChangeRecvTimeout(Config.T6 * ConstUtils.ONE_SECOND);
|
|
|
}
|
|
|
}
|
|
|
}
|