/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

	縲先ゥ溯�讎りヲ√€�	: Java險€隱槭い繝励Μ逕ィ繝サ蜈ア譛峨Γ繝「繝ェ繧「繧ッ繧サ繧ケSR��JNI繝ゥ繝�ヱ繝シ��
					  螳滄圀縺ョ蜈ア譛峨Γ繝「繝ェ繧「繧ッ繧サ繧ケ縺ョ螳溯」�� GG_SHM0011 縺ァ縺ゅj縲∵悽繧「繝励Μ縺ッ
					  Java險€隱槭→C++險€隱槭�繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ驛ィ蛻�r螳溯」�@縺ヲ縺�k

	縲蝉ス懈�譌・縲�		: 2021.04.23

	縲仙他蜃コ蠖「蠑�1縲�	: ShmStaticTable.SHM0001 (
						  byte[] in							# 蜷�ヱ繝ゥ繝。繝シ繧ソ繧貞�蜉幢シ医ヱ繝ゥ繝。繝シ繧ソ萓九�莉・荳九€―n繧ウ繝シ繝牙玄蛻�j��
															# 繝��繝悶ΝID / 讀懃エ「ID / key1 / value1 / key2 / value2 �・�・�・
					  )
	縲先綾繧雁€、1縲�		: int									# 繝��繧ソ蜿門セ嶺サカ謨ー縲ゆス�@縲√�繧、繝翫せ蛟、縺ッ繧ィ繝ゥ繝シ繧ウ繝シ繝�

	縲仙他蜃コ蠖「蠑�2縲�	: ShmStaticTable.SHM0001getData (
						  byte[] out						# 霑泌唆繝��繧ソ譬シ邏埼�伜沺繧呈欠螳夲シ亥推陦後�\n蛹コ蛻�j��
															# �題。檎岼:鬆�岼蜷搾シ�\t蛹コ蛻�j�峨€�シ定。檎岼莉・髯�:繝��繧ソ蛟、��\t蛹コ蛻�j��
					  )
	縲先綾繧雁€、2縲�		: void									# 縺ェ縺�

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#include <string.h>
#include <stdio.h>
#include <sys/syscall.h>

#include "GG_SHMCOM.h"

#include "com_galaxygoby_ShmStaticTable.h"

int  GG_SHM0011_logic( int prmNum, char Prm[][ GG_SHM0001_MaxPrmLen ] ) ;
void GG_SHM0011_getData ( char *arrOut ) ;

/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	蜈ア譛峨Γ繝「繝ェ繝��繧ソ讀懃エ「蜃ヲ逅�
	GG_SHM0011_logic��C++險€隱橸シ峨r蜻シ縺ウ蜃コ縺励※縲∝�譛峨Γ繝「繝ェ繝��繧ソ縺ョ讀懃エ「繧定。後≧縲�
	Java縺九i蜿嶺ソ。縺励◆byte繝��繧ソ繧団har驟榊�縺ォ蛻�屬縺励※蜻シ縺ウ蜃コ縺励r螳溯。後€�
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

JNIEXPORT jint JNICALL Java_com_galaxygoby_ShmStaticTable_SHM0001
(JNIEnv *env, jobject obj, jbyteArray in ) {

	int		prmNum ;								// 繝代Λ繝。繝シ繧ソ謨ー
	char	Prm [ GG_SHM0001_MaxPrmNum ][ GG_SHM0001_MaxPrmLen ] ;	// 繝代Λ繝。繝シ繧ソ
	char	*savepoint ;							// strtok_r逕ィsavepoint
	char    szLogFileTmpPath [ MAX_PATH ] ;			// XML繝輔ぃ繧、繝ォ蜷�
	char    g_szLogFilePath  [ MAX_PATH ] ;			// 繝ュ繧ー繝輔ぃ繧、繝ォ蜷�
	char    szAccessDate [ 30 ] ;					// YYYY-MM-DD HH:MM:SS.mmmmmm

	int		ThreadId = (int)syscall(SYS_gettid) ;	// 繧ケ繝ャ繝�ラID縺ョ蜿門セ�

	// 繝ュ繧ー蜃コ蜉帛�エ謇€縺ョ豎コ螳�
	getEnvString ( szLogFileTmpPath , "GG_LogFileName"
		, GG_SHM0011_LOGPATH , sizeof(szLogFileTmpPath) );
	getLocalTimeString ( g_szLogFilePath , sizeof(g_szLogFilePath) , szLogFileTmpPath ) ;

	jbyte* arrIn  = env->GetByteArrayElements(in,NULL);		// jbyteArray蝙銀�jbyte蝙九↓螟画鋤
	int nSize = env->GetArrayLength(in);					// 繝��繧ソ髟キ蜿門セ�
	arrIn[nSize-1] = '\0' ;									// 繧ケ繝医ャ繝代�險ュ螳�

	/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		strtok_r繧剃スソ逕ィ縺励※縲゛ava縺ョ蜈・蜉帙ヱ繝ゥ繝。繝シ繧ソ��\n蛹コ蛻�j�峨rGG_SHM0011_logic逕ィ縺ョ
		繝代Λ繝。繝シ繧ソ蠖「蠑擾シ�int prmNum, char Prm[]�峨↓螟画鋤
	_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

	char *tp ;
	for ( prmNum = 1 ;; prmNum++ ) {
		if ( prmNum == 1 ) {
			tp = strtok_r ( (char *)arrIn , "\n" , &savepoint ) ;
		} else {
			tp = strtok_r ( NULL , "\n" , &savepoint ) ;
		}
		if ( tp != NULL ) {
			strcpy ( Prm[prmNum] , tp ) ;
			getLocalTimeString ( szAccessDate , sizeof(szAccessDate), "%Y/%m/%d %H:%M:%S.%U" ) ;
			GG_MsgOut ( g_szLogFilePath , 9
				, "(%05d) **** ( %s ) **** 蜈・蜉帙ヱ繝ゥ繝。繝シ繧ソ Prm[%d] = [%s] ****"
				, ThreadId , szAccessDate , prmNum , Prm[prmNum] ) ;
		} else {
			prmNum -- ;
			break ;
		}
	}

	// 繝ュ繧ー蜃コ蜉�
	getLocalTimeString ( szAccessDate , sizeof(szAccessDate), "%Y/%m/%d %H:%M:%S.%U" ) ;
	GG_MsgOut ( g_szLogFilePath , 9
		, "(%05d) **** ( %s ) **** 蜈・蜉帙ヱ繝ゥ繝。繝シ繧ソ謨ー prmNum = [ %d ]"
		, ThreadId , szAccessDate , prmNum ) ;
	
	int ret = GG_SHM0011_logic( prmNum, Prm ) ;			// 蜈ア譛峨Γ繝「繝ェ讀懃エ「蜃ヲ逅�r螳溯。�

	env->ReleaseByteArrayElements(in,  arrIn,  0);		// arrIn 繧定ァ」謾セ

	return ( ret ) ;									// 蜿門セ励ョ繝シ繧ソ髟キ繧定ソ泌唆
}

/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
	蜈ア譛峨Γ繝「繝ェ繝��繧ソ蜿門セ怜�逅�
	GG_SHM0011_getData��C++險€隱橸シ峨r蜻シ縺ウ蜃コ縺励※縲∝�譛峨Γ繝「繝ェ繝��繧ソ縺ョ蜿門セ励r陦後≧縲�
	GG_SHM0011_logic��C++險€隱橸シ峨〒讀懃エ「繝��繧ソ髟キ縺梧アコ螳壹@縺ヲ縺�k縺ョ縺ァ縲∽ク贋ス阪�Java繧「繝励Μ
	縺檎畑諢上@縺滄�伜沺��out�峨↓蜿門セ励ョ繝シ繧ソ繧定ソ泌唆縺吶k
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

JNIEXPORT void JNICALL Java_com_galaxygoby_ShmStaticTable_SHM0001getData
(JNIEnv *env, jobject obj, jbyteArray out ) {

	jbyte* arrOut = env->GetByteArrayElements(out,NULL);

	GG_SHM0011_getData ( (char *)arrOut ) ;
/*
	getEnvString ( szLogFileTmpPath , "GG_LogFileName"
		, GG_SHM0011_LOGPATH , sizeof(szLogFileTmpPath) );
	getLocalTimeString ( g_szLogFilePath , sizeof(g_szLogFilePath) , szLogFileTmpPath ) ;
	getLocalTimeString ( szAccessDate , sizeof(szAccessDate), "%Y/%m/%d %H:%M:%S.%U" ) ;
	GG_MsgOut ( g_szLogFilePath , 9
		, "(%05d) **** ( %s ) **** 蜃コ蜉帙ヱ繝ゥ繝。繝シ繧ソ out=[%s] ****"
		, ThreadId , szAccessDate , (char *)arrOut ) ;
*/
	env->ReleaseByteArrayElements(out, arrOut, 0);			// arrOut縺ョ隗」謾セ
}