Skip to content

Commit

Permalink
Merge pull request #17 from alyssaruth/ktor-1
Browse files Browse the repository at this point in the history
Ktor 1
  • Loading branch information
alyssaruth authored Sep 15, 2024
2 parents 03bfde9 + 8de6cf7 commit 5526ffc
Show file tree
Hide file tree
Showing 40 changed files with 613 additions and 144 deletions.
2 changes: 2 additions & 0 deletions client/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ dependencies {
implementation("com.konghq:unirest-java:3.14.2")
implementation(project(":core"))
testImplementation(project(":test-core"))
testImplementation("com.konghq:unirest-mocks:3.14.2")
}

application {
Expand All @@ -24,6 +25,7 @@ task<JavaExec>("runDev") {
closureOf<JavaExec> {
group = "run"
classpath = project.the<SourceSetContainer>()["main"].runtimeClasspath
mainClass = "EntropyMain"
args = listOf("devMode")
}
)
Expand Down
226 changes: 111 additions & 115 deletions client/src/main/java/screen/MainScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,119 +60,112 @@ public MainScreen()
{
super();
setTitle("Entropy");

try
{
init();

setFocusable(true);
addWindowListener(this);
getContentPane().setLayout(new BorderLayout(0, 0));
achievementMessageBottom.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));
achievementMessageBottom.setBounds(13, 460, 395, 80);
sidePanel.add(achievementMessageBottom);
achievementMessageBottom.setLayout(null);
achievementIconBottom.setBounds(45, 11, 56, 56);
achievementMessageBottom.add(achievementIconBottom);
achievementEarnedBottom.setHorizontalAlignment(SwingConstants.CENTER);
achievementEarnedBottom.setFont(new Font("Tahoma", Font.BOLD, 15));
achievementEarnedBottom.setBounds(128, 11, 169, 25);
achievementMessageBottom.add(achievementEarnedBottom);
achievementTitleBottom.setFont(new Font("Tahoma", Font.BOLD, 12));
achievementTitleBottom.setHorizontalAlignment(SwingConstants.CENTER);
achievementTitleBottom.setBounds(128, 43, 169, 20);
achievementMessageBottom.add(achievementTitleBottom);
xButtonBottom.setVerticalAlignment(SwingConstants.TOP);
xButtonBottom.setHorizontalAlignment(SwingConstants.RIGHT);
xButtonBottom.setFont(new Font("Tahoma", Font.BOLD, 15));
xButtonBottom.setBounds(368, 5, 16, 18);
achievementMessageBottom.add(xButtonBottom);
achievementMessageTop.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));
achievementMessageTop.setBounds(13, 373, 395, 80);
sidePanel.add(achievementMessageTop);
achievementMessageTop.setLayout(null);
achievementIconTop.setBounds(45, 11, 56, 56);
achievementMessageTop.add(achievementIconTop);
achievementEarnedTop.setHorizontalAlignment(SwingConstants.CENTER);
achievementEarnedTop.setFont(new Font("Tahoma", Font.BOLD, 15));
achievementEarnedTop.setBounds(128, 11, 169, 25);
achievementMessageTop.add(achievementEarnedTop);
xButtonTop.setFont(new Font("Tahoma", Font.BOLD, 15));
xButtonTop.setVerticalAlignment(SwingConstants.TOP);
xButtonTop.setHorizontalAlignment(SwingConstants.RIGHT);
xButtonTop.setBounds(368, 5, 16, 18);
achievementMessageTop.add(xButtonTop);
achievementTitleTop.setHorizontalAlignment(SwingConstants.CENTER);
achievementTitleTop.setFont(new Font("Tahoma", Font.BOLD, 12));
achievementTitleTop.setBounds(128, 43, 169, 20);
achievementMessageTop.add(achievementTitleTop);
scrollPane.setBounds(115, 72, 194, 144);
scrollPane.setVisible(false);
lblBidHistory.setVisible(false);
btnReplay.setVisible(false);
getContentPane().add(menuBar, BorderLayout.NORTH);
menuBar.add(mnFile);
mntmNewGame.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK));
mnFile.add(mntmNewGame);
mnFile.add(mntmContinueGame);
mnFile.add(mntmPlayOnline);
mnFile.add(mntmStatistics);
mnFile.add(mntmClearData);
mntmContinueGame.setEnabled(isGameToContinue);
mnFile.add(mntmExit);
menuBar.add(mnOptions);
mnOptions.add(mntmPreferences);
mnOptions.add(mntmViewReplays);
mnOptions.add(mntmAchievements);
menuBar.add(mnHelp);
mnHelp.add(mntmViewHelp);
mntmViewHelp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
mnHelp.add(mntmAbout);
mnHelp.add(mntmReportBug);
history.setLocation(0, 119);
scrollPane.setViewportView(history);
history.setVisibleRowCount(4);
scrollPane.setBackground(new Color(0, 0, 0, 0));
scrollPane.setOpaque(false);
history.setBackground(new Color(0, 0, 0, 0));
history.setOpaque(false);
splitPane.setDividerLocation(622);
splitPane.setEnabled(false);
getContentPane().add(splitPane);
sidePanel.add(scrollPane);
splitPane.setRightComponent(sidePanel);
sidePanel.setLayout(null);
lblBidHistory.setBounds(172, 40, 80, 21);
sidePanel.add(lblBidHistory);
lblBidHistory.setHorizontalAlignment(SwingConstants.CENTER);
lblBidHistory.setFont(new Font("Tahoma", Font.PLAIN, 17));
btnNextRound.setBounds(155, 261, 115, 23);
sidePanel.add(btnNextRound);
lblResult.setContentType("text/html");
lblResult.setBounds(96, 296, 232, 56);
sidePanel.add(lblResult);
lblResult.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblResult.setVisible(false);
lblResult.setOpaque(false);
lblResult.setBorder(BorderFactory.createEmptyBorder());
lblResult.setBackground(new Color(0,0,0,0));
lblResult.setEditable(false);
lblResult.setFocusable(false);
btnNextRound.setVisible(false);
btnReplay.setBounds(116, 215, 192, 23);
sidePanel.add(btnReplay);
splitPane.setLeftComponent(leftPanel);
leftPanel.setLayout(new BorderLayout(0, 0));
leftPanel.add(commandBar, BorderLayout.SOUTH);
history.setCellRenderer(new BidListCellRenderer());

addKeyListener(this);
commandBar.setCheatListener(this);
}
catch (Throwable t)
{
Debug.stackTrace(t);
}

init();

setFocusable(true);
addWindowListener(this);
getContentPane().setLayout(new BorderLayout(0, 0));
achievementMessageBottom.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));
achievementMessageBottom.setBounds(13, 460, 395, 80);
sidePanel.add(achievementMessageBottom);
achievementMessageBottom.setLayout(null);
achievementIconBottom.setBounds(45, 11, 56, 56);
achievementMessageBottom.add(achievementIconBottom);
achievementEarnedBottom.setHorizontalAlignment(SwingConstants.CENTER);
achievementEarnedBottom.setFont(new Font("Tahoma", Font.BOLD, 15));
achievementEarnedBottom.setBounds(128, 11, 169, 25);
achievementMessageBottom.add(achievementEarnedBottom);
achievementTitleBottom.setFont(new Font("Tahoma", Font.BOLD, 12));
achievementTitleBottom.setHorizontalAlignment(SwingConstants.CENTER);
achievementTitleBottom.setBounds(128, 43, 169, 20);
achievementMessageBottom.add(achievementTitleBottom);
xButtonBottom.setVerticalAlignment(SwingConstants.TOP);
xButtonBottom.setHorizontalAlignment(SwingConstants.RIGHT);
xButtonBottom.setFont(new Font("Tahoma", Font.BOLD, 15));
xButtonBottom.setBounds(368, 5, 16, 18);
achievementMessageBottom.add(xButtonBottom);
achievementMessageTop.setBorder(new BevelBorder(BevelBorder.RAISED, null, null, null, null));
achievementMessageTop.setBounds(13, 373, 395, 80);
sidePanel.add(achievementMessageTop);
achievementMessageTop.setLayout(null);
achievementIconTop.setBounds(45, 11, 56, 56);
achievementMessageTop.add(achievementIconTop);
achievementEarnedTop.setHorizontalAlignment(SwingConstants.CENTER);
achievementEarnedTop.setFont(new Font("Tahoma", Font.BOLD, 15));
achievementEarnedTop.setBounds(128, 11, 169, 25);
achievementMessageTop.add(achievementEarnedTop);
xButtonTop.setFont(new Font("Tahoma", Font.BOLD, 15));
xButtonTop.setVerticalAlignment(SwingConstants.TOP);
xButtonTop.setHorizontalAlignment(SwingConstants.RIGHT);
xButtonTop.setBounds(368, 5, 16, 18);
achievementMessageTop.add(xButtonTop);
achievementTitleTop.setHorizontalAlignment(SwingConstants.CENTER);
achievementTitleTop.setFont(new Font("Tahoma", Font.BOLD, 12));
achievementTitleTop.setBounds(128, 43, 169, 20);
achievementMessageTop.add(achievementTitleTop);
scrollPane.setBounds(115, 72, 194, 144);
scrollPane.setVisible(false);
lblBidHistory.setVisible(false);
btnReplay.setVisible(false);
getContentPane().add(menuBar, BorderLayout.NORTH);
menuBar.add(mnFile);
mntmNewGame.setAccelerator(KeyStroke.getKeyStroke('N', InputEvent.CTRL_DOWN_MASK));
mnFile.add(mntmNewGame);
mnFile.add(mntmContinueGame);
mnFile.add(mntmPlayOnline);
mnFile.add(mntmStatistics);
mnFile.add(mntmClearData);
mntmContinueGame.setEnabled(isGameToContinue);
mnFile.add(mntmExit);
menuBar.add(mnOptions);
mnOptions.add(mntmPreferences);
mnOptions.add(mntmViewReplays);
mnOptions.add(mntmAchievements);
menuBar.add(mnHelp);
mnHelp.add(mntmViewHelp);
mntmViewHelp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
mnHelp.add(mntmAbout);
mnHelp.add(mntmReportBug);
history.setLocation(0, 119);
scrollPane.setViewportView(history);
history.setVisibleRowCount(4);
scrollPane.setBackground(new Color(0, 0, 0, 0));
scrollPane.setOpaque(false);
history.setBackground(new Color(0, 0, 0, 0));
history.setOpaque(false);
splitPane.setDividerLocation(622);
splitPane.setEnabled(false);
getContentPane().add(splitPane);
sidePanel.add(scrollPane);
splitPane.setRightComponent(sidePanel);
sidePanel.setLayout(null);
lblBidHistory.setBounds(172, 40, 80, 21);
sidePanel.add(lblBidHistory);
lblBidHistory.setHorizontalAlignment(SwingConstants.CENTER);
lblBidHistory.setFont(new Font("Tahoma", Font.PLAIN, 17));
btnNextRound.setBounds(155, 261, 115, 23);
sidePanel.add(btnNextRound);
lblResult.setContentType("text/html");
lblResult.setBounds(96, 296, 232, 56);
sidePanel.add(lblResult);
lblResult.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblResult.setVisible(false);
lblResult.setOpaque(false);
lblResult.setBorder(BorderFactory.createEmptyBorder());
lblResult.setBackground(new Color(0,0,0,0));
lblResult.setEditable(false);
lblResult.setFocusable(false);
btnNextRound.setVisible(false);
btnReplay.setBounds(116, 215, 192, 23);
sidePanel.add(btnReplay);
splitPane.setLeftComponent(leftPanel);
leftPanel.setLayout(new BorderLayout(0, 0));
leftPanel.add(commandBar, BorderLayout.SOUTH);
history.setCellRenderer(new BidListCellRenderer());

addKeyListener(this);
commandBar.setCheatListener(this);

//Listeners
setUpMenuListeners();
Expand Down Expand Up @@ -681,8 +674,11 @@ public String processCommand(String command)
return textToShow;
}
}

if (command.equals("simulator"))

if (command.equals("health")) {
Globals.INSTANCE.getHealthCheckApi().doHealthCheck();
}
else if (command.equals("simulator"))
{
SimulationDialog dialog = ScreenCache.getSimulationDialog();
dialog.initVariables();
Expand Down
13 changes: 13 additions & 0 deletions client/src/main/kotlin/http/ApiResponse.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package http

interface ApiResponse<T> {
val statusCode: Int
}

data class SuccessResponse<T>(override val statusCode: Int, val body: T) : ApiResponse<T>

data class FailureResponse<T>(
override val statusCode: Int,
val errorCode: String?,
val errorMessage: String?
) : ApiResponse<T>
10 changes: 10 additions & 0 deletions client/src/main/kotlin/http/HealthCheckApi.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package http

import dto.HealthCheckResponse
import kong.unirest.HttpMethod

class HealthCheckApi(private val httpClient: HttpClient) {
fun doHealthCheck() {
httpClient.doCall<HealthCheckResponse>(HttpMethod.GET, "/health-check")
}
}
89 changes: 89 additions & 0 deletions client/src/main/kotlin/http/HttpClient.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package http

import dto.ClientErrorResponse
import java.util.*
import kong.unirest.HttpMethod
import kong.unirest.HttpResponse
import kong.unirest.JsonObjectMapper
import kong.unirest.Unirest
import logging.Severity
import util.Globals.baseUrl
import utils.InjectedThings.logger

class HttpClient {
val jsonObjectMapper = JsonObjectMapper()

inline fun <reified T : Any?> doCall(
method: HttpMethod,
route: String,
payload: Any? = null,
): ApiResponse<T> {
val requestId = UUID.randomUUID()
val requestJson = payload?.let { jsonObjectMapper.writeValue(payload) }

logger.info(
"http.request",
"$method $route",
"requestId" to requestId,
"requestBody" to requestJson,
)

val request = Unirest.request(method.toString(), "${baseUrl}${route}")
payload?.let { request.body(requestJson) }
val response = request.asString()

if (response.isSuccess) {
logResponse(Severity.INFO, requestId, route, method, requestJson, response)
val body = jsonObjectMapper.readValue(response.body, T::class.java)
return SuccessResponse(response.status, body)
} else {
val errorResponse = tryParseErrorResponse(response)
logResponse(
Severity.ERROR,
requestId,
route,
method,
requestJson,
response,
errorResponse,
)
return FailureResponse(
response.status,
errorResponse?.errorCode,
errorResponse?.errorMessage,
)
}
}

fun tryParseErrorResponse(response: HttpResponse<String>) =
try {
jsonObjectMapper.readValue(response.body, ClientErrorResponse::class.java)
} catch (e: Exception) {
null
}

fun logResponse(
level: Severity,
requestId: UUID,
route: String,
method: HttpMethod,
requestJson: String?,
response: HttpResponse<String>,
errorResponse: ClientErrorResponse? = null,
) {
logger.log(
level,
"http.response",
"Received ${response.status} for $method $route",
null,
mapOf(
"requestId" to requestId,
"requestBody" to requestJson,
"responseCode" to response.status,
"responseBody" to response.body?.toString(),
"clientErrorCode" to errorResponse?.errorCode,
"clientErrorMessage" to errorResponse?.errorMessage,
),
)
}
}
10 changes: 10 additions & 0 deletions client/src/main/kotlin/util/Globals.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package util

import http.HealthCheckApi
import http.HttpClient

object Globals {
private val httpClient = HttpClient()
val baseUrl = "http://localhost:8080"
var healthCheckApi = HealthCheckApi(httpClient)
}
2 changes: 1 addition & 1 deletion client/src/test/kotlin/bean/HyperlinkAdaptorTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ import java.awt.Cursor
import java.awt.event.MouseEvent
import javax.swing.JButton
import javax.swing.JPanel
import main.kotlin.testCore.AbstractTest
import org.junit.jupiter.api.Test
import testCore.AbstractTest

private val mouseEventOverLink = makeMouseEvent(JButton())
private val mouseEventNotOverLink = makeMouseEvent(JButton())
Expand Down
Loading

0 comments on commit 5526ffc

Please sign in to comment.