노승철
2 years ago
commit
098bd6a5ea
32 changed files with 4236 additions and 0 deletions
@ -0,0 +1,33 @@
|
||||
HELP.md |
||||
target/ |
||||
!.mvn/wrapper/maven-wrapper.jar |
||||
!**/src/main/**/target/ |
||||
!**/src/test/**/target/ |
||||
|
||||
### STS ### |
||||
.apt_generated |
||||
.classpath |
||||
.factorypath |
||||
.project |
||||
.settings |
||||
.springBeans |
||||
.sts4-cache |
||||
|
||||
### IntelliJ IDEA ### |
||||
.idea |
||||
*.iws |
||||
*.iml |
||||
*.ipr |
||||
|
||||
### NetBeans ### |
||||
/nbproject/private/ |
||||
/nbbuild/ |
||||
/dist/ |
||||
/nbdist/ |
||||
/.nb-gradle/ |
||||
build/ |
||||
!**/src/main/**/build/ |
||||
!**/src/test/**/build/ |
||||
|
||||
### VS Code ### |
||||
.vscode/ |
Binary file not shown.
@ -0,0 +1,2 @@
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.5/apache-maven-3.8.5-bin.zip |
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar |
@ -0,0 +1,316 @@
|
||||
#!/bin/sh |
||||
# ---------------------------------------------------------------------------- |
||||
# Licensed to the Apache Software Foundation (ASF) under one |
||||
# or more contributor license agreements. See the NOTICE file |
||||
# distributed with this work for additional information |
||||
# regarding copyright ownership. The ASF licenses this file |
||||
# to you under the Apache License, Version 2.0 (the |
||||
# "License"); you may not use this file except in compliance |
||||
# with the License. You may obtain a copy of the License at |
||||
# |
||||
# https://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, |
||||
# software distributed under the License is distributed on an |
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||
# KIND, either express or implied. See the License for the |
||||
# specific language governing permissions and limitations |
||||
# under the License. |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
# ---------------------------------------------------------------------------- |
||||
# Maven Start Up Batch script |
||||
# |
||||
# Required ENV vars: |
||||
# ------------------ |
||||
# JAVA_HOME - location of a JDK home dir |
||||
# |
||||
# Optional ENV vars |
||||
# ----------------- |
||||
# M2_HOME - location of maven2's installed home dir |
||||
# MAVEN_OPTS - parameters passed to the Java VM when running Maven |
||||
# e.g. to debug Maven itself, use |
||||
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 |
||||
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files |
||||
# ---------------------------------------------------------------------------- |
||||
|
||||
if [ -z "$MAVEN_SKIP_RC" ] ; then |
||||
|
||||
if [ -f /usr/local/etc/mavenrc ] ; then |
||||
. /usr/local/etc/mavenrc |
||||
fi |
||||
|
||||
if [ -f /etc/mavenrc ] ; then |
||||
. /etc/mavenrc |
||||
fi |
||||
|
||||
if [ -f "$HOME/.mavenrc" ] ; then |
||||
. "$HOME/.mavenrc" |
||||
fi |
||||
|
||||
fi |
||||
|
||||
# OS specific support. $var _must_ be set to either true or false. |
||||
cygwin=false; |
||||
darwin=false; |
||||
mingw=false |
||||
case "`uname`" in |
||||
CYGWIN*) cygwin=true ;; |
||||
MINGW*) mingw=true;; |
||||
Darwin*) darwin=true |
||||
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home |
||||
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html |
||||
if [ -z "$JAVA_HOME" ]; then |
||||
if [ -x "/usr/libexec/java_home" ]; then |
||||
export JAVA_HOME="`/usr/libexec/java_home`" |
||||
else |
||||
export JAVA_HOME="/Library/Java/Home" |
||||
fi |
||||
fi |
||||
;; |
||||
esac |
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then |
||||
if [ -r /etc/gentoo-release ] ; then |
||||
JAVA_HOME=`java-config --jre-home` |
||||
fi |
||||
fi |
||||
|
||||
if [ -z "$M2_HOME" ] ; then |
||||
## resolve links - $0 may be a link to maven's home |
||||
PRG="$0" |
||||
|
||||
# need this for relative symlinks |
||||
while [ -h "$PRG" ] ; do |
||||
ls=`ls -ld "$PRG"` |
||||
link=`expr "$ls" : '.*-> \(.*\)$'` |
||||
if expr "$link" : '/.*' > /dev/null; then |
||||
PRG="$link" |
||||
else |
||||
PRG="`dirname "$PRG"`/$link" |
||||
fi |
||||
done |
||||
|
||||
saveddir=`pwd` |
||||
|
||||
M2_HOME=`dirname "$PRG"`/.. |
||||
|
||||
# make it fully qualified |
||||
M2_HOME=`cd "$M2_HOME" && pwd` |
||||
|
||||
cd "$saveddir" |
||||
# echo Using m2 at $M2_HOME |
||||
fi |
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched |
||||
if $cygwin ; then |
||||
[ -n "$M2_HOME" ] && |
||||
M2_HOME=`cygpath --unix "$M2_HOME"` |
||||
[ -n "$JAVA_HOME" ] && |
||||
JAVA_HOME=`cygpath --unix "$JAVA_HOME"` |
||||
[ -n "$CLASSPATH" ] && |
||||
CLASSPATH=`cygpath --path --unix "$CLASSPATH"` |
||||
fi |
||||
|
||||
# For Mingw, ensure paths are in UNIX format before anything is touched |
||||
if $mingw ; then |
||||
[ -n "$M2_HOME" ] && |
||||
M2_HOME="`(cd "$M2_HOME"; pwd)`" |
||||
[ -n "$JAVA_HOME" ] && |
||||
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" |
||||
fi |
||||
|
||||
if [ -z "$JAVA_HOME" ]; then |
||||
javaExecutable="`which javac`" |
||||
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then |
||||
# readlink(1) is not available as standard on Solaris 10. |
||||
readLink=`which readlink` |
||||
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then |
||||
if $darwin ; then |
||||
javaHome="`dirname \"$javaExecutable\"`" |
||||
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" |
||||
else |
||||
javaExecutable="`readlink -f \"$javaExecutable\"`" |
||||
fi |
||||
javaHome="`dirname \"$javaExecutable\"`" |
||||
javaHome=`expr "$javaHome" : '\(.*\)/bin'` |
||||
JAVA_HOME="$javaHome" |
||||
export JAVA_HOME |
||||
fi |
||||
fi |
||||
fi |
||||
|
||||
if [ -z "$JAVACMD" ] ; then |
||||
if [ -n "$JAVA_HOME" ] ; then |
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |
||||
# IBM's JDK on AIX uses strange locations for the executables |
||||
JAVACMD="$JAVA_HOME/jre/sh/java" |
||||
else |
||||
JAVACMD="$JAVA_HOME/bin/java" |
||||
fi |
||||
else |
||||
JAVACMD="`\\unset -f command; \\command -v java`" |
||||
fi |
||||
fi |
||||
|
||||
if [ ! -x "$JAVACMD" ] ; then |
||||
echo "Error: JAVA_HOME is not defined correctly." >&2 |
||||
echo " We cannot execute $JAVACMD" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then |
||||
echo "Warning: JAVA_HOME environment variable is not set." |
||||
fi |
||||
|
||||
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher |
||||
|
||||
# traverses directory structure from process work directory to filesystem root |
||||
# first directory with .mvn subdirectory is considered project base directory |
||||
find_maven_basedir() { |
||||
|
||||
if [ -z "$1" ] |
||||
then |
||||
echo "Path not specified to find_maven_basedir" |
||||
return 1 |
||||
fi |
||||
|
||||
basedir="$1" |
||||
wdir="$1" |
||||
while [ "$wdir" != '/' ] ; do |
||||
if [ -d "$wdir"/.mvn ] ; then |
||||
basedir=$wdir |
||||
break |
||||
fi |
||||
# workaround for JBEAP-8937 (on Solaris 10/Sparc) |
||||
if [ -d "${wdir}" ]; then |
||||
wdir=`cd "$wdir/.."; pwd` |
||||
fi |
||||
# end of workaround |
||||
done |
||||
echo "${basedir}" |
||||
} |
||||
|
||||
# concatenates all lines of a file |
||||
concat_lines() { |
||||
if [ -f "$1" ]; then |
||||
echo "$(tr -s '\n' ' ' < "$1")" |
||||
fi |
||||
} |
||||
|
||||
BASE_DIR=`find_maven_basedir "$(pwd)"` |
||||
if [ -z "$BASE_DIR" ]; then |
||||
exit 1; |
||||
fi |
||||
|
||||
########################################################################################## |
||||
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central |
||||
# This allows using the maven wrapper in projects that prohibit checking in binary data. |
||||
########################################################################################## |
||||
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo "Found .mvn/wrapper/maven-wrapper.jar" |
||||
fi |
||||
else |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." |
||||
fi |
||||
if [ -n "$MVNW_REPOURL" ]; then |
||||
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
else |
||||
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
fi |
||||
while IFS="=" read key value; do |
||||
case "$key" in (wrapperUrl) jarUrl="$value"; break ;; |
||||
esac |
||||
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo "Downloading from: $jarUrl" |
||||
fi |
||||
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" |
||||
if $cygwin; then |
||||
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` |
||||
fi |
||||
|
||||
if command -v wget > /dev/null; then |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo "Found wget ... using wget" |
||||
fi |
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then |
||||
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" |
||||
else |
||||
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" |
||||
fi |
||||
elif command -v curl > /dev/null; then |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo "Found curl ... using curl" |
||||
fi |
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then |
||||
curl -o "$wrapperJarPath" "$jarUrl" -f |
||||
else |
||||
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f |
||||
fi |
||||
|
||||
else |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo "Falling back to using Java to download" |
||||
fi |
||||
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" |
||||
# For Cygwin, switch paths to Windows format before running javac |
||||
if $cygwin; then |
||||
javaClass=`cygpath --path --windows "$javaClass"` |
||||
fi |
||||
if [ -e "$javaClass" ]; then |
||||
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo " - Compiling MavenWrapperDownloader.java ..." |
||||
fi |
||||
# Compiling the Java class |
||||
("$JAVA_HOME/bin/javac" "$javaClass") |
||||
fi |
||||
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then |
||||
# Running the downloader |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo " - Running MavenWrapperDownloader.java ..." |
||||
fi |
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") |
||||
fi |
||||
fi |
||||
fi |
||||
fi |
||||
########################################################################################## |
||||
# End of extension |
||||
########################################################################################## |
||||
|
||||
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} |
||||
if [ "$MVNW_VERBOSE" = true ]; then |
||||
echo $MAVEN_PROJECTBASEDIR |
||||
fi |
||||
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" |
||||
|
||||
# For Cygwin, switch paths to Windows format before running java |
||||
if $cygwin; then |
||||
[ -n "$M2_HOME" ] && |
||||
M2_HOME=`cygpath --path --windows "$M2_HOME"` |
||||
[ -n "$JAVA_HOME" ] && |
||||
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` |
||||
[ -n "$CLASSPATH" ] && |
||||
CLASSPATH=`cygpath --path --windows "$CLASSPATH"` |
||||
[ -n "$MAVEN_PROJECTBASEDIR" ] && |
||||
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` |
||||
fi |
||||
|
||||
# Provide a "standardized" way to retrieve the CLI args that will |
||||
# work with both Windows and non-Windows executions. |
||||
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" |
||||
export MAVEN_CMD_LINE_ARGS |
||||
|
||||
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain |
||||
|
||||
exec "$JAVACMD" \ |
||||
$MAVEN_OPTS \ |
||||
$MAVEN_DEBUG_OPTS \ |
||||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ |
||||
"-Dmaven.home=${M2_HOME}" \ |
||||
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ |
||||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" |
@ -0,0 +1,188 @@
|
||||
@REM ---------------------------------------------------------------------------- |
||||
@REM Licensed to the Apache Software Foundation (ASF) under one |
||||
@REM or more contributor license agreements. See the NOTICE file |
||||
@REM distributed with this work for additional information |
||||
@REM regarding copyright ownership. The ASF licenses this file |
||||
@REM to you under the Apache License, Version 2.0 (the |
||||
@REM "License"); you may not use this file except in compliance |
||||
@REM with the License. You may obtain a copy of the License at |
||||
@REM |
||||
@REM https://www.apache.org/licenses/LICENSE-2.0 |
||||
@REM |
||||
@REM Unless required by applicable law or agreed to in writing, |
||||
@REM software distributed under the License is distributed on an |
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
||||
@REM KIND, either express or implied. See the License for the |
||||
@REM specific language governing permissions and limitations |
||||
@REM under the License. |
||||
@REM ---------------------------------------------------------------------------- |
||||
|
||||
@REM ---------------------------------------------------------------------------- |
||||
@REM Maven Start Up Batch script |
||||
@REM |
||||
@REM Required ENV vars: |
||||
@REM JAVA_HOME - location of a JDK home dir |
||||
@REM |
||||
@REM Optional ENV vars |
||||
@REM M2_HOME - location of maven2's installed home dir |
||||
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands |
||||
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending |
||||
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven |
||||
@REM e.g. to debug Maven itself, use |
||||
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 |
||||
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files |
||||
@REM ---------------------------------------------------------------------------- |
||||
|
||||
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' |
||||
@echo off |
||||
@REM set title of command window |
||||
title %0 |
||||
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' |
||||
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% |
||||
|
||||
@REM set %HOME% to equivalent of $HOME |
||||
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") |
||||
|
||||
@REM Execute a user defined script before this one |
||||
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre |
||||
@REM check for pre script, once with legacy .bat ending and once with .cmd ending |
||||
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* |
||||
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* |
||||
:skipRcPre |
||||
|
||||
@setlocal |
||||
|
||||
set ERROR_CODE=0 |
||||
|
||||
@REM To isolate internal variables from possible post scripts, we use another setlocal |
||||
@setlocal |
||||
|
||||
@REM ==== START VALIDATION ==== |
||||
if not "%JAVA_HOME%" == "" goto OkJHome |
||||
|
||||
echo. |
||||
echo Error: JAVA_HOME not found in your environment. >&2 |
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2 |
||||
echo location of your Java installation. >&2 |
||||
echo. |
||||
goto error |
||||
|
||||
:OkJHome |
||||
if exist "%JAVA_HOME%\bin\java.exe" goto init |
||||
|
||||
echo. |
||||
echo Error: JAVA_HOME is set to an invalid directory. >&2 |
||||
echo JAVA_HOME = "%JAVA_HOME%" >&2 |
||||
echo Please set the JAVA_HOME variable in your environment to match the >&2 |
||||
echo location of your Java installation. >&2 |
||||
echo. |
||||
goto error |
||||
|
||||
@REM ==== END VALIDATION ==== |
||||
|
||||
:init |
||||
|
||||
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". |
||||
@REM Fallback to current working directory if not found. |
||||
|
||||
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% |
||||
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir |
||||
|
||||
set EXEC_DIR=%CD% |
||||
set WDIR=%EXEC_DIR% |
||||
:findBaseDir |
||||
IF EXIST "%WDIR%"\.mvn goto baseDirFound |
||||
cd .. |
||||
IF "%WDIR%"=="%CD%" goto baseDirNotFound |
||||
set WDIR=%CD% |
||||
goto findBaseDir |
||||
|
||||
:baseDirFound |
||||
set MAVEN_PROJECTBASEDIR=%WDIR% |
||||
cd "%EXEC_DIR%" |
||||
goto endDetectBaseDir |
||||
|
||||
:baseDirNotFound |
||||
set MAVEN_PROJECTBASEDIR=%EXEC_DIR% |
||||
cd "%EXEC_DIR%" |
||||
|
||||
:endDetectBaseDir |
||||
|
||||
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig |
||||
|
||||
@setlocal EnableExtensions EnableDelayedExpansion |
||||
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a |
||||
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% |
||||
|
||||
:endReadAdditionalConfig |
||||
|
||||
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" |
||||
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" |
||||
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain |
||||
|
||||
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
|
||||
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( |
||||
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B |
||||
) |
||||
|
||||
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central |
||||
@REM This allows using the maven wrapper in projects that prohibit checking in binary data. |
||||
if exist %WRAPPER_JAR% ( |
||||
if "%MVNW_VERBOSE%" == "true" ( |
||||
echo Found %WRAPPER_JAR% |
||||
) |
||||
) else ( |
||||
if not "%MVNW_REPOURL%" == "" ( |
||||
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" |
||||
) |
||||
if "%MVNW_VERBOSE%" == "true" ( |
||||
echo Couldn't find %WRAPPER_JAR%, downloading it ... |
||||
echo Downloading from: %DOWNLOAD_URL% |
||||
) |
||||
|
||||
powershell -Command "&{"^ |
||||
"$webclient = new-object System.Net.WebClient;"^ |
||||
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ |
||||
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ |
||||
"}"^ |
||||
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ |
||||
"}" |
||||
if "%MVNW_VERBOSE%" == "true" ( |
||||
echo Finished downloading %WRAPPER_JAR% |
||||
) |
||||
) |
||||
@REM End of extension |
||||
|
||||
@REM Provide a "standardized" way to retrieve the CLI args that will |
||||
@REM work with both Windows and non-Windows executions. |
||||
set MAVEN_CMD_LINE_ARGS=%* |
||||
|
||||
%MAVEN_JAVA_EXE% ^ |
||||
%JVM_CONFIG_MAVEN_PROPS% ^ |
||||
%MAVEN_OPTS% ^ |
||||
%MAVEN_DEBUG_OPTS% ^ |
||||
-classpath %WRAPPER_JAR% ^ |
||||
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ |
||||
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* |
||||
if ERRORLEVEL 1 goto error |
||||
goto end |
||||
|
||||
:error |
||||
set ERROR_CODE=1 |
||||
|
||||
:end |
||||
@endlocal & set ERROR_CODE=%ERROR_CODE% |
||||
|
||||
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost |
||||
@REM check for post script, once with legacy .bat ending and once with .cmd ending |
||||
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" |
||||
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" |
||||
:skipRcPost |
||||
|
||||
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' |
||||
if "%MAVEN_BATCH_PAUSE%"=="on" pause |
||||
|
||||
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% |
||||
|
||||
cmd /C exit /B %ERROR_CODE% |
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<parent> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-parent</artifactId> |
||||
<version>2.7.1</version> |
||||
<relativePath/> <!-- lookup parent from repository --> |
||||
</parent> |
||||
<groupId>com.palnet</groupId> |
||||
<artifactId>pav-socket</artifactId> |
||||
<version>0.0.1-SNAPSHOT</version> |
||||
<name>pav-socket</name> |
||||
<description>pav-socket</description> |
||||
<properties> |
||||
<java.version>11</java.version> |
||||
</properties> |
||||
<dependencies> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-amqp</artifactId> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-web</artifactId> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
<optional>true</optional> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-starter-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.springframework.amqp</groupId> |
||||
<artifactId>spring-rabbit-test</artifactId> |
||||
<scope>test</scope> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>io.netty</groupId> |
||||
<artifactId>netty-all</artifactId> |
||||
<version>4.1.77.Final</version> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.springframework.boot</groupId> |
||||
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
<configuration> |
||||
<excludes> |
||||
<exclude> |
||||
<groupId>org.projectlombok</groupId> |
||||
<artifactId>lombok</artifactId> |
||||
</exclude> |
||||
</excludes> |
||||
</configuration> |
||||
</plugin> |
||||
</plugins> |
||||
</build> |
||||
|
||||
</project> |
@ -0,0 +1,13 @@
|
||||
package com.palnet; |
||||
|
||||
import org.springframework.boot.SpringApplication; |
||||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
||||
@SpringBootApplication |
||||
public class Application { |
||||
|
||||
public static void main(String[] args) { |
||||
SpringApplication.run(Application.class, args); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,45 @@
|
||||
package com.palnet.comn.collection; |
||||
|
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class AuthCollection { |
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
|
||||
private static List<String> authkeyList = new ArrayList<String>(); |
||||
|
||||
public void reloadAuthkey() { |
||||
// 인증키 하드코딩 처리
|
||||
authkeyList.add("1cc2e08e-0c5c-43b2-8d4d-cddd3de558e3");// 지텔인증키
|
||||
authkeyList.add("35ea4080-a3f2-4e34-8361-78db06bac6fc");// PAL 인증키
|
||||
|
||||
// authkeyList.add(null)
|
||||
} |
||||
|
||||
public boolean checkAuthkey(String authKey) { |
||||
boolean result = false; |
||||
// logger.debug("authKey ::: " + authKey);
|
||||
|
||||
for(String key : authkeyList) { |
||||
// logger.debug("key ::: " + key);
|
||||
if(authKey.equals(key)) { |
||||
result = true; |
||||
} |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
|
||||
public static void main(String [] agrs) { |
||||
AuthCollection auth = new AuthCollection(); |
||||
auth.reloadAuthkey(); |
||||
|
||||
System.out.println("1>>>>> " + auth.checkAuthkey("!234")); |
||||
System.out.println("2>>>>> " + auth.checkAuthkey("1cc2e08e-0c5c-43b2-8d4d-cddd3de558e3")); |
||||
} |
||||
} |
@ -0,0 +1,70 @@
|
||||
package com.palnet.comn.collection; |
||||
|
||||
import com.palnet.comn.utils.ContextUtils; |
||||
import com.palnet.comn.utils.DateUtils; |
||||
import com.palnet.process.message.producer.MessageProducer; |
||||
import com.palnet.process.model.GPDatabaseModel; |
||||
import com.palnet.process.model.GPHistoryModel; |
||||
import com.palnet.process.model.GPModel; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.springframework.beans.BeanUtils; |
||||
|
||||
import java.util.*; |
||||
|
||||
/** |
||||
* 현재 움직이는 물체/비행체에 대한 정보를 전송하기 위해 저장하는 Collection |
||||
* @author kang |
||||
* |
||||
*/ |
||||
|
||||
@Slf4j |
||||
public class GPCollection { |
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
|
||||
private static Map<String , String> identKeys = Collections.synchronizedMap(new HashMap<String, String>()); // 기체의 식별 번호
|
||||
|
||||
private MessageProducer messageProducer; |
||||
|
||||
public GPCollection() { |
||||
this.messageProducer = (MessageProducer) ContextUtils.getBean("messageProducer"); |
||||
} |
||||
|
||||
// 받은 데이터 정보를 데이터구조에 맞게 저장 한다.
|
||||
// 최초에 데이터를 수신한 경우 관제 ID , 관제시작 시간을 셋팅한다.
|
||||
public void putData(List<GPModel> paramData) { |
||||
|
||||
List<GPHistoryModel> historyList; |
||||
GPModel model = new GPModel(); |
||||
|
||||
for(GPModel data : paramData) { |
||||
data.setServerRcvDt(DateUtils.getCurrentTime()); //서버에서 받은 시간 넣기
|
||||
|
||||
// History Coordinates Settings
|
||||
GPHistoryModel historyModel = new GPHistoryModel(); |
||||
historyModel.setObjectId(data.getObjectId()); |
||||
historyModel.setLat(data.getLat()); |
||||
historyModel.setLng(data.getLng()); |
||||
|
||||
if (data.getPostionHistory() != null) { |
||||
historyList = data.getPostionHistory(); |
||||
} else { |
||||
historyList = new ArrayList<>(); |
||||
} |
||||
|
||||
historyList.add(historyModel); |
||||
data.setPostionHistory(historyList); |
||||
|
||||
/* Message Queue Server 전달 */ |
||||
convertModel(model); |
||||
} |
||||
} |
||||
|
||||
public void convertModel(GPModel model) { |
||||
GPDatabaseModel databaseModel = new GPDatabaseModel(); |
||||
|
||||
BeanUtils.copyProperties(model, databaseModel); |
||||
messageProducer.sendSocketData(databaseModel); |
||||
} |
||||
} |
@ -0,0 +1,47 @@
|
||||
//package com.palnet.comn.collection;
|
||||
//
|
||||
//import com.palnet.comn.model.GPDatabaseModel;
|
||||
//import com.palnet.comn.utils.BeanUtils;
|
||||
//import com.palnet.server.message.producer.MessageProducer;
|
||||
//import org.slf4j.Logger;
|
||||
//import org.slf4j.LoggerFactory;
|
||||
//
|
||||
//import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
//
|
||||
///**
|
||||
// * 전송된 원시데이터를 Database 에 넣기 위해 임시 저장해두는 Collection
|
||||
// * @author kang
|
||||
// *
|
||||
// */
|
||||
//public class GPDatabaseCollection {
|
||||
//
|
||||
// private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
//
|
||||
// private static ConcurrentLinkedQueue<GPDatabaseModel> dataList = new ConcurrentLinkedQueue<GPDatabaseModel>();
|
||||
// private MessageProducer messageProducer;
|
||||
//
|
||||
// public void putData(GPDatabaseModel paramData) {
|
||||
// dataList.add(paramData);
|
||||
//
|
||||
// }
|
||||
//
|
||||
//// public void putListData(List<GPDatabaseModel> paramDataList) {
|
||||
//// dataList.addAll(paramDataList);
|
||||
//// }
|
||||
//
|
||||
// public ConcurrentLinkedQueue<GPDatabaseModel> getData(){
|
||||
//
|
||||
// return dataList;
|
||||
// }
|
||||
//
|
||||
//// public static void main(String[] args) {
|
||||
//// ConcurrentLinkedQueue<String> qe = new ConcurrentLinkedQueue<String>();
|
||||
////
|
||||
//// }
|
||||
////
|
||||
// public void messageSend(GPDatabaseModel model) {
|
||||
// messageProducer = (MessageProducer) BeanUtils.getBean("kafkaProducer");
|
||||
// messageProducer.send("sample-topic", model);
|
||||
// }
|
||||
//
|
||||
//}
|
@ -0,0 +1,25 @@
|
||||
package com.palnet.comn.utils; |
||||
|
||||
import org.springframework.beans.BeansException; |
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.context.ApplicationContextAware; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
@Component |
||||
public class ContextUtils implements ApplicationContextAware { |
||||
|
||||
private static ApplicationContext applicationContext; |
||||
|
||||
@Override |
||||
public void setApplicationContext(ApplicationContext ctx) throws BeansException { |
||||
applicationContext = ctx; |
||||
} |
||||
|
||||
public static ApplicationContext getApplicationContext() { |
||||
return applicationContext; |
||||
} |
||||
|
||||
public static Object getBean(String beanName) { |
||||
return getApplicationContext().getBean(beanName); |
||||
} |
||||
} |
@ -0,0 +1,153 @@
|
||||
package com.palnet.comn.utils; |
||||
|
||||
import java.text.SimpleDateFormat; |
||||
import java.time.LocalDateTime; |
||||
import java.time.format.DateTimeFormatter; |
||||
import java.time.format.DateTimeFormatterBuilder; |
||||
import java.time.temporal.ChronoField; |
||||
import java.util.Date; |
||||
|
||||
public class DateUtils { |
||||
|
||||
public static String getCurrentTime(){ |
||||
return new SimpleDateFormat("yyyyMMddHHmmss").format(System.currentTimeMillis()); |
||||
} |
||||
|
||||
public static String stringToFormat(String str) { |
||||
Date date = stringToDatetime(str); |
||||
|
||||
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); |
||||
} |
||||
|
||||
|
||||
public static Date stringToDatetime(String date) { |
||||
|
||||
SimpleDateFormat transFormat = new SimpleDateFormat("yyyyMMddHHmmss"); |
||||
Date result = null; |
||||
try { |
||||
if(date.length() == 14) { |
||||
result = transFormat.parse(date); |
||||
} |
||||
}catch(Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
public static Date stringToDate(String date) { |
||||
SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); |
||||
SimpleDateFormat transFormat2 = new SimpleDateFormat("yyyyMMdd"); |
||||
Date result = null; |
||||
try { |
||||
if(date.length() == 10) { |
||||
result = transFormat.parse(date); |
||||
}else if(date.length() == 8) { |
||||
result = transFormat2.parse(date); |
||||
} |
||||
}catch(Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
return result; |
||||
} |
||||
|
||||
public static LocalDateTime stringToLocalDateTime(String date) { |
||||
|
||||
DateTimeFormatter transFormat = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); |
||||
LocalDateTime localDateTime = LocalDateTime.parse(date , transFormat); |
||||
|
||||
return localDateTime; |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
public static LocalDateTime stringToLocalDate(String date) { |
||||
DateTimeFormatter transFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd"); |
||||
|
||||
DateTimeFormatter DATEFORMATTER = new DateTimeFormatterBuilder().append(transFormat) |
||||
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0) |
||||
.parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0) |
||||
.parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0) |
||||
.toFormatter(); |
||||
|
||||
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(date , DATEFORMATTER); |
||||
|
||||
return localDateTime; |
||||
} |
||||
|
||||
|
||||
public static Date nowDate() { |
||||
return new Date(System.currentTimeMillis()); |
||||
} |
||||
|
||||
public static long diffSecond(Date firstDate , Date secondDate) { |
||||
|
||||
long diffDate = secondDate.getTime() - firstDate.getTime(); |
||||
long diffTime = diffDate / (1000); |
||||
|
||||
return diffTime; |
||||
|
||||
} |
||||
|
||||
public static long diffMinute(Date firstDate , Date secondDate) { |
||||
|
||||
long diffDate = secondDate.getTime() - firstDate.getTime(); |
||||
long diffTime = diffDate / (1000 * 60); |
||||
|
||||
return diffTime; |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
// public static void main(String[] args) {
|
||||
//
|
||||
// Date firstDate = stringToDate("20210630142014");
|
||||
//
|
||||
// Date secondDate = stringToDate("20210630142914");
|
||||
//
|
||||
// LocalDateTime dateTime = stringToLocalDate("2021-07-20");
|
||||
//
|
||||
// System.out.println(">>>>" + dateTime);
|
||||
//
|
||||
//
|
||||
// System.out.println("두 날짜의 차이 분: "+diffMinute(firstDate , secondDate));
|
||||
//
|
||||
// System.out.println(">>>" + stringToFormat("20210630142014"));
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//// List<Map<String, Double>> list = new ArrayList<Map<String, Double>>();
|
||||
////
|
||||
////
|
||||
//// for( double i= 0 ; i < 1000 ; i ++) {
|
||||
//// Map<String, Double> position = new HashMap<String, Double>();
|
||||
//// position.put("lat", 11111.0);
|
||||
//// position.put("lng", 11111.0);
|
||||
//// position.put("date", i);
|
||||
//// list.add(position);
|
||||
//// }
|
||||
////
|
||||
//// int limitSize = 1000;
|
||||
//// if(list.size() < 1000) {
|
||||
//// limitSize = list.size();
|
||||
//// }
|
||||
////
|
||||
//// List<Map<String, Double>> lastThreeThings = list.subList(list.size() - limitSize, list.size());
|
||||
////
|
||||
//// //뒤집기
|
||||
//// Collections.reverse(lastThreeThings);
|
||||
////
|
||||
//// for(Map<String , Double> data : lastThreeThings) {
|
||||
////
|
||||
////
|
||||
//// System.out.println(data);
|
||||
//// }
|
||||
//
|
||||
// }
|
||||
} |
@ -0,0 +1,80 @@
|
||||
package com.palnet.comn.utils; |
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException; |
||||
import com.fasterxml.jackson.core.type.TypeReference; |
||||
import com.fasterxml.jackson.databind.DeserializationFeature; |
||||
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
@Slf4j |
||||
public class JsonUtils { |
||||
|
||||
private static ObjectMapper getObjectMapper() { |
||||
ObjectMapper mapper = new ObjectMapper(); |
||||
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); |
||||
return mapper; |
||||
} |
||||
|
||||
public static String toJson(Object object) { |
||||
String json = null; |
||||
|
||||
try { |
||||
json = getObjectMapper().writeValueAsString(object); |
||||
} catch (JsonProcessingException e) { |
||||
log.error("", e); |
||||
} |
||||
|
||||
return json; |
||||
} |
||||
|
||||
public static <T> T fromJson(String val, Class<T> clazz){ |
||||
T object = null; |
||||
|
||||
try { |
||||
object = getObjectMapper().readValue(val, clazz); |
||||
} catch (IOException e) { |
||||
log.error("", e); |
||||
} |
||||
|
||||
return object; |
||||
} |
||||
|
||||
public static <T> T fromJson(byte[] bytes, Class<T> clazz){ |
||||
T object = null; |
||||
|
||||
try { |
||||
object = getObjectMapper().readValue(bytes, clazz); |
||||
} catch (IOException e) { |
||||
log.error("", e); |
||||
} |
||||
|
||||
return object; |
||||
} |
||||
|
||||
public static <T> T fromJson(String val, TypeReference<T> type){ |
||||
T object = null; |
||||
|
||||
try { |
||||
object = getObjectMapper().readValue(val, type); |
||||
} catch (IOException e) { |
||||
log.error("", e); |
||||
} |
||||
|
||||
return object; |
||||
} |
||||
|
||||
public static <T> T bytesToJson(byte[] bytes, TypeReference<T> type){ |
||||
T object = null; |
||||
|
||||
try { |
||||
object = getObjectMapper().readValue(bytes, type); |
||||
} catch (IOException e) { |
||||
log.error("", e); |
||||
} |
||||
|
||||
return object; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,61 @@
|
||||
package com.palnet.process.message.config; |
||||
|
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.core.Binding; |
||||
import org.springframework.amqp.core.BindingBuilder; |
||||
import org.springframework.amqp.core.Queue; |
||||
import org.springframework.amqp.core.TopicExchange; |
||||
|
||||
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; |
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
||||
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; |
||||
import org.springframework.context.annotation.Bean; |
||||
import org.springframework.context.annotation.Configuration; |
||||
import org.springframework.core.env.Environment; |
||||
|
||||
@Configuration |
||||
@Slf4j |
||||
public class MessageConfig { |
||||
|
||||
private final Environment env; |
||||
|
||||
public MessageConfig(Environment env) { |
||||
this.env = env; |
||||
} |
||||
|
||||
@Bean |
||||
public CachingConnectionFactory cachingConnectionFactory() { |
||||
return new CachingConnectionFactory(); |
||||
} |
||||
|
||||
@Bean |
||||
public Jackson2JsonMessageConverter converter() { |
||||
return new Jackson2JsonMessageConverter(); |
||||
} |
||||
|
||||
@Bean |
||||
public TopicExchange droneExchange() { |
||||
return new TopicExchange(env.getProperty("message.dron.exchange-name")); |
||||
} |
||||
|
||||
@Bean |
||||
public Queue droneQueue() { |
||||
return new Queue(env.getProperty("message.dron.queue-name")); |
||||
} |
||||
|
||||
@Bean |
||||
public Binding droneBinding(Queue queue, TopicExchange exchange) { |
||||
return BindingBuilder.bind(queue).to(exchange).with(env.getProperty("message.dron.routing-key")); |
||||
} |
||||
|
||||
@Bean |
||||
public RabbitTemplate rabbitTemplate(CachingConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) { |
||||
RabbitTemplate rabbitTemplate = new RabbitTemplate(); |
||||
|
||||
rabbitTemplate.setConnectionFactory(connectionFactory); |
||||
rabbitTemplate.setMessageConverter(converter); |
||||
|
||||
return rabbitTemplate; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,31 @@
|
||||
package com.palnet.process.message.producer; |
||||
|
||||
|
||||
import com.palnet.process.model.GPDatabaseModel; |
||||
import com.palnet.process.model.GPModel; |
||||
import lombok.extern.slf4j.Slf4j; |
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate; |
||||
import org.springframework.core.env.Environment; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import java.util.Objects; |
||||
|
||||
@Component |
||||
@Slf4j |
||||
public class MessageProducer { |
||||
|
||||
private final RabbitTemplate rabbitTemplate; |
||||
private final Environment env; |
||||
|
||||
public MessageProducer(RabbitTemplate rabbitTemplate, Environment env) { |
||||
this.rabbitTemplate = rabbitTemplate; |
||||
this.env = env; |
||||
} |
||||
|
||||
public void sendSocketData(GPDatabaseModel model) { |
||||
rabbitTemplate.convertAndSend( |
||||
Objects.requireNonNull(env.getProperty("message.drone.exchange-name")), |
||||
Objects.requireNonNull(env.getProperty("message.drone.routing-key")), |
||||
model); |
||||
} |
||||
} |
@ -0,0 +1,65 @@
|
||||
package com.palnet.process.model; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class GPDatabaseModel { |
||||
|
||||
private String typeCd; // 01 : 최초 들어온 데이터 , 99 : 종료 시킬 데이터
|
||||
|
||||
private String messageType; |
||||
|
||||
private String terminalId; |
||||
|
||||
private Double moveDistance = 0.0; |
||||
|
||||
private String moveDistanceType; |
||||
|
||||
private String prodNumber; |
||||
|
||||
private String controlId; |
||||
|
||||
private String objectType; |
||||
|
||||
private String objectId; |
||||
|
||||
private Double lat = 0.0; |
||||
|
||||
private Double lng = 0.0; |
||||
|
||||
private String elevType; |
||||
|
||||
private Double elev = 0.0; |
||||
|
||||
private String speedType; |
||||
|
||||
private Double speed = 0.0; |
||||
|
||||
private Double betteryLevel = 0.0; |
||||
|
||||
private Double betteryVoltage = 0.0; |
||||
|
||||
private String dronStatus; |
||||
|
||||
private Double heading = 0.0; |
||||
|
||||
private String terminalRcvDt; |
||||
|
||||
private String serverRcvDt; |
||||
|
||||
private String controlStartDt; |
||||
|
||||
private String controlEndDt; |
||||
|
||||
private String areaTrnsYn; |
||||
|
||||
private String endTypeCd; // 01: 일정시간 위치 정보가 들어오지 않는 경우 , 02 : 데이터 베이스에 종료 시점이 명시 되지 않은 경우
|
||||
|
||||
// 환경센서 필드
|
||||
private Double sensorCo = 0.0; |
||||
private Double sensorSo2 = 0.0; |
||||
private Double sensorNo2 = 0.0; |
||||
private Double sensorO3 = 0.0; |
||||
private Double sensorDust = 0.0; |
||||
|
||||
} |
@ -0,0 +1,15 @@
|
||||
package com.palnet.process.model; |
||||
|
||||
import lombok.Data; |
||||
|
||||
@Data |
||||
public class GPHistoryModel { |
||||
|
||||
private String objectId; |
||||
|
||||
private Double lat = 0.0; |
||||
|
||||
private Double lng = 0.0; |
||||
|
||||
|
||||
} |
@ -0,0 +1,70 @@
|
||||
package com.palnet.process.model; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Data |
||||
public class GPModel { |
||||
|
||||
private String typeCd; // 01 : 최초 들어온 데이터 , 99 : 종료 시킬 데이터
|
||||
|
||||
private String messageType; |
||||
|
||||
private String terminalId; |
||||
|
||||
private Double moveDistance = 0.0; |
||||
|
||||
private String moveDistanceType; |
||||
|
||||
private String controlId; // 처음 위치 데이터가 들어 왔을때 생성 함
|
||||
|
||||
private String objectType; |
||||
|
||||
private String objectId; |
||||
|
||||
private Double lat = 0.0; |
||||
|
||||
private Double lng = 0.0; |
||||
|
||||
private String elevType; |
||||
|
||||
private Double elev = 0.0; |
||||
|
||||
private String speedType; |
||||
|
||||
private Double speed = 0.0; |
||||
|
||||
private Double betteryLevel = 0.0; |
||||
|
||||
private Double betteryVoltage = 0.0; |
||||
|
||||
private String dronStatus; |
||||
|
||||
private Double heading = 0.0; |
||||
|
||||
private String terminalRcvDt; |
||||
|
||||
private String serverRcvDt; |
||||
|
||||
private String controlStartDt; |
||||
|
||||
private String controlEndDt; |
||||
|
||||
private String areaTrnsYn; |
||||
|
||||
// 환경센서 필드
|
||||
private Double sensorCo = 0.0; |
||||
private Double sensorSo2 = 0.0; |
||||
private Double sensorNo2 = 0.0; |
||||
private Double sensorO3 = 0.0; |
||||
private Double sensorDust = 0.0; |
||||
|
||||
//최근 5건만 저장
|
||||
private List<GPHistoryModel> recentPositionHistory; |
||||
|
||||
// 전체 히스토리 저장
|
||||
private List<GPHistoryModel> postionHistory; |
||||
|
||||
|
||||
} |
@ -0,0 +1,112 @@
|
||||
package com.palnet.server; |
||||
|
||||
import com.palnet.server.initializer.SocketInitializer; |
||||
import io.netty.bootstrap.ServerBootstrap; |
||||
import io.netty.channel.Channel; |
||||
import io.netty.channel.ChannelFuture; |
||||
import io.netty.channel.ChannelOption; |
||||
import io.netty.channel.EventLoopGroup; |
||||
import io.netty.channel.nio.NioEventLoopGroup; |
||||
import io.netty.channel.socket.nio.NioServerSocketChannel; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.stereotype.Component; |
||||
|
||||
import javax.annotation.PostConstruct; |
||||
import javax.annotation.PreDestroy; |
||||
|
||||
@Component |
||||
public class SocketServer { |
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
|
||||
@Value("${netty.socket.port}") |
||||
private int port; |
||||
|
||||
@Value("${netty.socket.thread.boss}") |
||||
private int threadBoss; |
||||
|
||||
@Value("${netty.socket.thread.worker}") |
||||
private int threadWorker; |
||||
|
||||
|
||||
private Channel ch; |
||||
|
||||
private EventLoopGroup bossGroup ; |
||||
private EventLoopGroup workerGroup ; |
||||
private ServerBootstrap b = new ServerBootstrap(); |
||||
|
||||
// @Autowired
|
||||
// private AdsbClient client;
|
||||
//
|
||||
|
||||
@PostConstruct |
||||
public void postConstruct(){ |
||||
start(); |
||||
} |
||||
|
||||
|
||||
@PreDestroy |
||||
public void preDestroy(){ |
||||
|
||||
stop(); |
||||
} |
||||
|
||||
public void start(){ |
||||
try { |
||||
bossGroup = new NioEventLoopGroup(10); |
||||
workerGroup =new NioEventLoopGroup(); |
||||
|
||||
b.group(bossGroup , workerGroup) // bossGroup과 workerGroup은 NioEventLoopGroup의 인스턴스입니다.이 때 스레드 개수를 설정할 수 있음 각각 1, Runtime.getRuntime().availableProcessors() * 2로 설정했습니다.
|
||||
.channel(NioServerSocketChannel.class) |
||||
// .handler(new LoggingHandler(LogLevel.valueOf(logBootstrap)))
|
||||
// .handler(bootstrapHandler) // 채널이 활성화되면 소켓 서버와 소켓 클라이언트를 구동하게 되는 핸들러를 등록합니다.
|
||||
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000) |
||||
.option(ChannelOption.SO_BACKLOG, 1000) // 동시에 수용할 수 있는 소켓 연결 요청 수입니다.
|
||||
|
||||
// .option(ChannelOption.RCVBUF_ALLOCATOR, new AdaptiveRecvByteBufAllocator(1024 , 1024 * 16 , 1024 * 1024))
|
||||
.childOption(ChannelOption.TCP_NODELAY, false) // 반응속도를 높이기 위해 Nagle 알고리즘을 비활성화 합니다
|
||||
|
||||
.childOption(ChannelOption.SO_LINGER, 0) // 소켓이 close될 때 신뢰성있는 종료를 위해 4way-handshake가 발생하고 이때 TIME_WAIT로 리소스가 낭비됩니다. 이를 방지하기 위해 0으로 설정합니다.
|
||||
.childOption(ChannelOption.SO_KEEPALIVE, false) // Keep-alive를 켭니다.
|
||||
.childOption(ChannelOption.SO_REUSEADDR, false) // SO_LINGER설정이 있으면 안해도 되나 혹시나병(!)으로 TIME_WAIT걸린 포트를 재사용할 수 있도록 설정합니다.
|
||||
.childHandler(new SocketInitializer()); |
||||
|
||||
connection(); |
||||
// taskProcess();
|
||||
// client.start();
|
||||
|
||||
logger.warn("====== [SOCKET SERVER] Start ====== "); |
||||
}catch (Exception e) { |
||||
logger.warn("====== [SOCKET SERVER] Fail ====== "); |
||||
logger.error(e.getMessage()); |
||||
} |
||||
|
||||
} |
||||
|
||||
private void connection() { |
||||
//서버는 Listen상태로 기다려야하는데, 톰캣이 Timeout이 발생함
|
||||
//이를 방지하기 위해 Thread로 처리한다.
|
||||
new Thread(new Runnable() { |
||||
@Override |
||||
public void run() { |
||||
try { |
||||
ChannelFuture future = b.bind(port).sync(); |
||||
future.channel().closeFuture().sync(); |
||||
|
||||
} catch (InterruptedException e) { |
||||
logger.error("InterruptedException", e); |
||||
} |
||||
} |
||||
}).start(); |
||||
} |
||||
|
||||
|
||||
public void stop(){ |
||||
bossGroup.shutdownGracefully(); |
||||
workerGroup.shutdownGracefully(); |
||||
logger.warn("====== [SOCKET SERVER] STOP ====== "); |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,52 @@
|
||||
/* |
||||
* Copyright 2012 The Netty Project |
||||
* |
||||
* The Netty Project licenses this file to you under the Apache License, |
||||
* version 2.0 (the "License"); you may not use this file except in compliance |
||||
* with the License. You may obtain a copy of the License at: |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
||||
* License for the specific language governing permissions and limitations |
||||
* under the License. |
||||
*/ |
||||
package com.palnet.server.codec; |
||||
|
||||
import io.netty.buffer.ByteBuf; |
||||
import io.netty.channel.ChannelHandlerContext; |
||||
import io.netty.handler.codec.ByteToMessageDecoder; |
||||
|
||||
import java.math.BigInteger; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* Decodes the binary representation of a {@link BigInteger} prepended |
||||
* with a magic number ('F' or 0x46) and a 32-bit integer length prefix into a |
||||
* {@link BigInteger} instance. For example, { 'F', 0, 0, 0, 1, 42 } will be |
||||
* decoded into new BigInteger("42"). |
||||
*/ |
||||
public class BigIntegerDecoder extends ByteToMessageDecoder { |
||||
|
||||
@Override |
||||
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) { |
||||
|
||||
|
||||
|
||||
System.out.println(">>>>>>>>>>>>>>>>>>>>>" + in.readableBytes()); |
||||
|
||||
if (in.isReadable()) { |
||||
byte[] bytes = new byte[in.readableBytes()]; |
||||
|
||||
int readerIndex = in.readerIndex(); |
||||
in.getBytes(readerIndex, bytes); |
||||
|
||||
System.out.println(">>>" + new String(bytes)); |
||||
|
||||
} |
||||
// Wait until the length prefix is available.
|
||||
|
||||
} |
||||
} |
@ -0,0 +1,39 @@
|
||||
package com.palnet.server.codec; |
||||
|
||||
import com.palnet.comn.utils.JsonUtils; |
||||
import io.netty.channel.ChannelHandler.Sharable; |
||||
import io.netty.channel.ChannelHandlerContext; |
||||
import io.netty.handler.codec.MessageToMessageDecoder; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Sharable |
||||
public class SocketPayLoadDecoder extends MessageToMessageDecoder<Object> { |
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
|
||||
@Override |
||||
protected void decode(ChannelHandlerContext ctx, Object msg, List<Object> out){ |
||||
// logger.info("[SocketPayLoadDecoder] Init 2 " );
|
||||
SocketPayload payload = null; |
||||
|
||||
try { |
||||
payload = JsonUtils.fromJson((String) msg, SocketPayload.class); |
||||
if(payload != null) { |
||||
out.add(payload); |
||||
|
||||
} |
||||
}catch(Exception e) { |
||||
logger.info("MSG => " + msg ); |
||||
logger.error(e.getMessage()); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,36 @@
|
||||
package com.palnet.server.codec; |
||||
|
||||
import com.palnet.comn.utils.JsonUtils; |
||||
import io.netty.channel.ChannelHandler.Sharable; |
||||
import io.netty.channel.ChannelHandlerContext; |
||||
import io.netty.handler.codec.MessageToMessageEncoder; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import java.util.List; |
||||
|
||||
@Sharable |
||||
public class SocketPayLoadEncorder extends MessageToMessageEncoder<SocketPayloadResponse> { |
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
|
||||
|
||||
@Override |
||||
protected void encode(ChannelHandlerContext ctx, SocketPayloadResponse msg, List<Object> out){ |
||||
try { |
||||
out.add(JsonUtils.toJson(msg)); |
||||
// logger.debug("[SocketPayLoadEncorder] Init 11111" );
|
||||
logger.info("=== >>>>>>>>>>>>>>" , JsonUtils.toJson(msg)); |
||||
}catch(Exception e) { |
||||
logger.info("MSG => " + msg ); |
||||
logger.error(e.getMessage()); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,22 @@
|
||||
package com.palnet.server.codec; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
@Data |
||||
public class SocketPayload implements Serializable{ |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
private String authKey; |
||||
|
||||
private String terminalId; |
||||
|
||||
private String command; |
||||
|
||||
private Object body; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,18 @@
|
||||
package com.palnet.server.codec; |
||||
|
||||
import lombok.Data; |
||||
|
||||
import java.io.Serializable; |
||||
|
||||
@Data |
||||
public class SocketPayloadResponse implements Serializable{ |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
private String rspCode; |
||||
|
||||
private String rspMessage; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,26 @@
|
||||
package com.palnet.server.collection; |
||||
|
||||
import io.netty.channel.Channel; |
||||
import io.netty.channel.group.ChannelGroup; |
||||
import io.netty.channel.group.DefaultChannelGroup; |
||||
import io.netty.util.concurrent.GlobalEventExecutor; |
||||
|
||||
|
||||
public class ChannelCollection { |
||||
|
||||
private static final long serialVersionUID = 1L; |
||||
|
||||
//접속 되어있는 모든 Channel
|
||||
private static final ChannelGroup allChannels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); |
||||
|
||||
|
||||
public void setAllChannels(Channel ch) { |
||||
allChannels.add(ch); |
||||
} |
||||
|
||||
public ChannelGroup getAllChannels() { |
||||
return allChannels; |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,137 @@
|
||||
package com.palnet.server.command; |
||||
|
||||
import com.palnet.comn.collection.GPCollection; |
||||
import com.palnet.process.model.GPModel; |
||||
import com.palnet.server.codec.SocketPayload; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.LinkedHashMap; |
||||
import java.util.List; |
||||
|
||||
public class SocketCommand { |
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
GPCollection collection = new GPCollection(); |
||||
|
||||
|
||||
public void openSkyCollectionPut(SocketPayload payload) { |
||||
|
||||
/** 전문 설정 ***/ |
||||
String messageType = "OPENSKY"; |
||||
String objectType = "FLIGHT"; |
||||
|
||||
List<LinkedHashMap<?,?>> resultList = new ArrayList<LinkedHashMap<?,?>>(); |
||||
|
||||
List<GPModel> dataList = new ArrayList<GPModel>(); |
||||
|
||||
logger.debug("BODY TYPE :: " + payload.getBody().getClass()); |
||||
|
||||
resultList = (ArrayList)payload.getBody(); |
||||
|
||||
GPModel model; |
||||
|
||||
for(LinkedHashMap<?,?> obj : resultList) { |
||||
model = new GPModel(); |
||||
|
||||
model.setObjectType(objectType); |
||||
model.setMessageType(messageType); |
||||
model.setObjectId(obj.get("objectId").toString().trim()); |
||||
model.setTerminalId(obj.get("terminalId").toString().trim()); |
||||
model.setLat((Double)obj.get("lat")); |
||||
model.setLng((Double)obj.get("lng")); |
||||
model.setElev((Double)obj.get("elev")); |
||||
model.setTerminalRcvDt(obj.get("terminalRcvDt").toString().trim()); |
||||
model.setSpeed((Double)obj.get("speed")); |
||||
model.setHeading((Double)obj.get("heading")); |
||||
model.setSpeedType((String)obj.get("speedType")); |
||||
model.setElevType((String)obj.get("elevType")); |
||||
model.setMoveDistanceType((String)obj.get("moveDistanceType")); |
||||
model.setMoveDistance((Double)obj.get("moveDistance")); |
||||
|
||||
model.setBetteryLevel((Double)obj.get("betteryLevel")); |
||||
model.setBetteryVoltage((Double)obj.get("betteryVoltage")); |
||||
model.setDronStatus((String)obj.get("dronStatus")); |
||||
|
||||
dataList.add(model); |
||||
} |
||||
|
||||
collection.putData(dataList); |
||||
// logger.debug("SIZE :: " +collection.getData().size() );
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 들어온 데이터를 collection넣는 작업을 한다. |
||||
* @param payload |
||||
*/ |
||||
public void sandboxCollectionPut(SocketPayload payload) { |
||||
|
||||
/** 전문 설정 ***/ |
||||
String messageType = "LTEM"; |
||||
String objectType = "DRON"; |
||||
|
||||
List<LinkedHashMap<?,?>> resultList = new ArrayList<LinkedHashMap<?,?>>(); |
||||
|
||||
List<GPModel> dataList = new ArrayList<GPModel>(); |
||||
|
||||
logger.debug("BODY TYPE :: " + payload.getBody().getClass()); |
||||
|
||||
resultList = (ArrayList)payload.getBody(); |
||||
|
||||
GPModel model; |
||||
|
||||
for(LinkedHashMap<?,?> obj : resultList) { |
||||
|
||||
//위,경도 좌표가 0으로 들어오는 것은 무시 처리
|
||||
if((Double)obj.get("lat") > 0 && (Double)obj.get("lon") > 0) { |
||||
model = new GPModel(); |
||||
// logger.debug(">>>>" + obj.toString());
|
||||
model.setObjectType(objectType); |
||||
model.setMessageType(messageType); |
||||
model.setObjectId(obj.get("objectId").toString().trim()); |
||||
model.setTerminalId(payload.getTerminalId()); |
||||
if(obj.get("lat") != null) model.setLat(Double.valueOf(obj.get("lat").toString())); |
||||
if(obj.get("lon") != null) model.setLng(Double.valueOf(obj.get("lon").toString())); |
||||
if(obj.get("elev") != null) model.setElev(Double.valueOf(obj.get("elev").toString())); |
||||
model.setTerminalRcvDt(obj.get("terminalRcvDt").toString().trim()); |
||||
if(obj.get("speed") != null) model.setSpeed(Double.valueOf(obj.get("speed").toString())); |
||||
if(obj.get("heading") != null) model.setHeading(Double.valueOf(obj.get("heading").toString())); |
||||
model.setSpeedType((String)obj.get("speedType")); |
||||
model.setElevType((String)obj.get("elevType")); |
||||
model.setMoveDistanceType((String)obj.get("moveDistanceType")); |
||||
if(obj.get("moveDistance") != null) model.setMoveDistance(Double.valueOf(obj.get("moveDistance").toString())); |
||||
|
||||
if(obj.get("betteryLevel") != null) model.setBetteryLevel(Double.valueOf(obj.get("betteryLevel").toString())); |
||||
if(obj.get("betteryVoltage") != null) model.setBetteryVoltage(Double.valueOf(obj.get("betteryVoltage").toString())); |
||||
model.setDronStatus((String)obj.get("dronStatus")); |
||||
|
||||
// 환경 데이터 필드 추가
|
||||
if(obj.get("sensorCo") != null) model.setSensorCo(Double.valueOf(obj.get("sensorCo").toString())); |
||||
if(obj.get("sensorSo2") != null) model.setSensorSo2(Double.valueOf(obj.get("sensorSo2").toString())); |
||||
if(obj.get("sensorNo2") != null) model.setSensorNo2(Double.valueOf(obj.get("sensorNo2").toString())); |
||||
if(obj.get("sensorO3") != null) model.setSensorO3(Double.valueOf(obj.get("sensorO3").toString())); |
||||
if(obj.get("sensorDust") != null) model.setSensorDust(Double.valueOf(obj.get("sensorDust").toString())); |
||||
|
||||
// TODO 환경 데이터 임의의 데이터로 수정 - 추후 제거(임시코드)
|
||||
// if(model.getSensorCo() != null){
|
||||
// model.setSensorCo(TempUtils.gradualData("co"));
|
||||
// model.setSensorSo2(TempUtils.gradualData("so2"));
|
||||
// model.setSensorNo2(TempUtils.gradualData("no2"));
|
||||
// model.setSensorO3(TempUtils.gradualData("o3"));
|
||||
// model.setSensorDust(TempUtils.gradualData("dust"));
|
||||
// }
|
||||
dataList.add(model); |
||||
}else { |
||||
logger.info("lat , lon No data "); |
||||
} |
||||
} |
||||
|
||||
// collection.putData(dataList);
|
||||
// logger.debug("SIZE :: " +collection.getData().size() );
|
||||
|
||||
} |
||||
|
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,100 @@
|
||||
package com.palnet.server.handler; |
||||
|
||||
import com.palnet.comn.collection.AuthCollection; |
||||
import com.palnet.comn.utils.JsonUtils; |
||||
import com.palnet.server.codec.SocketPayload; |
||||
import com.palnet.server.codec.SocketPayloadResponse; |
||||
import com.palnet.server.command.SocketCommand; |
||||
import io.netty.channel.ChannelHandlerContext; |
||||
import io.netty.channel.SimpleChannelInboundHandler; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import org.springframework.util.StringUtils; |
||||
|
||||
public class SocketHandler extends SimpleChannelInboundHandler<SocketPayload> { |
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass()); |
||||
private SocketCommand command = new SocketCommand(); |
||||
|
||||
private AuthCollection auth = new AuthCollection(); |
||||
private SocketPayloadResponse res = new SocketPayloadResponse(); |
||||
|
||||
|
||||
@Override |
||||
public void channelActive(ChannelHandlerContext ctx) { |
||||
auth.reloadAuthkey(); // 채널 활성화 되면 인증키 정보를 다시 불러옴
|
||||
|
||||
logger.debug("==================== [SocketHandler channelActive ] ==================== "); |
||||
ctx.writeAndFlush("Server Connection"); |
||||
} |
||||
|
||||
@Override |
||||
protected void channelRead0(ChannelHandlerContext ctx, SocketPayload payload){ |
||||
|
||||
try { |
||||
|
||||
logger.debug("==================== [SocketHandler channelRead0 ] ==================== "); |
||||
logger.debug("AUTH KEY :: ==== > " +payload.getAuthKey()); |
||||
// logger.info(auth.checkAuthkey(payload.getAuthKey().toString().trim()));
|
||||
|
||||
if(StringUtils.isEmpty(payload.getAuthKey())) { |
||||
// 인증키가 없을 경우
|
||||
logger.debug("AUTH : no key " ); |
||||
res.setRspCode("-2000"); |
||||
res.setRspMessage("inValidate AuthKey"); |
||||
}else if(!auth.checkAuthkey(payload.getAuthKey().toString().trim())) { |
||||
// 인증키가 틀린 경우
|
||||
logger.debug("AUTH : error key " ); |
||||
logger.debug(payload.getAuthKey() ); |
||||
// logger.info(auth.checkAuthkey(payload.getAuthKey().toString().trim()));
|
||||
res.setRspCode("-2000"); |
||||
res.setRspMessage("inValidate AuthKey"); |
||||
}else{ |
||||
logger.warn("MSG :: ==== > " + JsonUtils.toJson(payload)); |
||||
|
||||
switch(payload.getCommand().trim()) { |
||||
case "OPENSKY" : |
||||
command.openSkyCollectionPut(payload); |
||||
break; |
||||
case "SANDBOX": |
||||
command.sandboxCollectionPut(payload); |
||||
break; |
||||
default: |
||||
break; |
||||
} |
||||
|
||||
res.setRspCode("0"); |
||||
res.setRspMessage("SUCCESS"); |
||||
|
||||
} |
||||
|
||||
|
||||
}catch(Exception e) { |
||||
res.setRspCode("-9999"); |
||||
res.setRspMessage("Etc error"); |
||||
|
||||
e.printStackTrace(); |
||||
}finally { |
||||
logger.debug("res >>>" + JsonUtils.toJson(res)); |
||||
ctx.writeAndFlush(res); |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
@Override |
||||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { |
||||
logger.info("=========== [exceptionCaught ] ===================="); |
||||
res.setRspCode("-9999"); |
||||
res.setRspMessage("Etc error"); |
||||
ctx.writeAndFlush(res); |
||||
|
||||
cause.printStackTrace(); |
||||
ctx.close(); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,25 @@
|
||||
package com.palnet.server.initializer; |
||||
|
||||
import com.palnet.server.codec.SocketPayLoadDecoder; |
||||
import com.palnet.server.codec.SocketPayLoadEncorder; |
||||
import com.palnet.server.handler.SocketHandler; |
||||
import io.netty.channel.ChannelInitializer; |
||||
import io.netty.channel.ChannelPipeline; |
||||
import io.netty.channel.socket.SocketChannel; |
||||
import io.netty.handler.codec.json.JsonObjectDecoder; |
||||
import io.netty.handler.codec.string.StringDecoder; |
||||
import io.netty.handler.codec.string.StringEncoder; |
||||
import io.netty.util.CharsetUtil; |
||||
|
||||
public class SocketInitializer extends ChannelInitializer<SocketChannel>{ |
||||
|
||||
@Override |
||||
protected void initChannel(SocketChannel ch) throws Exception { |
||||
ChannelPipeline pipeline = ch.pipeline() |
||||
.addLast(new JsonObjectDecoder(655360)) |
||||
.addLast(new StringDecoder(CharsetUtil.UTF_8), new StringEncoder(CharsetUtil.UTF_8)) |
||||
.addLast(new SocketPayLoadDecoder() , new SocketPayLoadEncorder()) |
||||
.addLast(new SocketHandler()); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,27 @@
|
||||
spring: |
||||
rabbitmq: |
||||
host: localhost |
||||
port: 5672 |
||||
username: guest |
||||
password: guest |
||||
|
||||
|
||||
netty: |
||||
task: |
||||
controlinfoTime: 2000 |
||||
socket: |
||||
port: 8082 |
||||
thread: |
||||
boss: 1 |
||||
worker: 1 |
||||
|
||||
server: |
||||
port: 8182 |
||||
|
||||
message: |
||||
drone: |
||||
queue-name: drone.queue |
||||
exchange-name: drone.exchange |
||||
routing-key: drone.routing.# |
||||
|
||||
|
Loading…
Reference in new issue