FIx: Fixed Coverage Screenshots And htmlRepot.

This commit is contained in:
GabrieleRadice
2026-06-19 22:57:43 +02:00
parent a4dc8b2540
commit 0129efe400
316 changed files with 4566 additions and 4497 deletions
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name sortedAsc
">
<a href="index_SORT_BY_NAME_DESC.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_BLOCK.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat sortedAsc
">
<a href="index_SORT_BY_BLOCK_DESC.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_BLOCK_DESC.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat sortedDesc
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_CLASS.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat sortedAsc
">
<a href="index_SORT_BY_CLASS_DESC.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_CLASS_DESC.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat sortedDesc
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_LINE.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat sortedAsc
">
<a href="index_SORT_BY_LINE_DESC.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_LINE_DESC.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat sortedDesc
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_METHOD.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat sortedAsc
">
<a href="index_SORT_BY_METHOD_DESC.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_METHOD_DESC.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat sortedDesc
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > it.polimi.ingsw.gc14.Network.TCP.Client</title>
<style type="text/css">
@import "../css/coverage.css";
@import "../css/idea.min.css";
</style>
<script type="text/javascript" src="../js/highlight.min.js"></script>
<script type="text/javascript" src="../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../index_SORT_BY_NAME_DESC.html">all classes</a>
<span class="separator">|</span>
it.polimi.ingsw.gc14.Network.TCP.Client</div>
<h1>Coverage Summary for Package: it.polimi.ingsw.gc14.Network.TCP.Client</h1>
<table class="coverageStats">
<tr>
<th class="name">Package</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">it.polimi.ingsw.gc14.Network.TCP.Client</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<table class="coverageStats">
<tr>
<th class="name sortedDesc
">
<a href="index.html">Class</a> </th>
<th class="coverageStat
">
<a href="index_SORT_BY_CLASS.html">Class, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_METHOD.html">Method, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_BLOCK.html">Branch, %</a>
</th>
<th class="coverageStat
">
<a href="index_SORT_BY_LINE.html">Line, %</a>
</th>
</tr>
<tr>
<td class="name"><a href="sources/source-1.html">TCPClient</a></td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>
@@ -0,0 +1,442 @@
<!DOCTYPE html>
<html id="htmlId">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Coverage Report > TCPClient</title>
<style type="text/css">
@import "../../css/coverage.css";
@import "../../css/idea.min.css";
</style>
<script type="text/javascript" src="../../js/highlight.min.js"></script>
<script type="text/javascript" src="../../js/highlightjs-line-numbers.min.js"></script>
</head>
<body>
<div class="content">
<div class="breadCrumbs">
Current scope: <a href="../../index.html">all classes</a>
<span class="separator">|</span>
<a href="../index.html">it.polimi.ingsw.gc14.Network.TCP.Client</a>
</div>
<h1>Coverage Summary for Class: TCPClient (it.polimi.ingsw.gc14.Network.TCP.Client)</h1>
<table class="coverageStats">
<tr>
<th class="name">Class</th>
<th class="coverageStat
">
Class, %
</th>
<th class="coverageStat
">
Method, %
</th>
<th class="coverageStat
">
Branch, %
</th>
<th class="coverageStat
">
Line, %
</th>
</tr>
<tr>
<td class="name">TCPClient</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/1)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/15)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/24)
</span>
</td>
<td class="coverageStat">
<span class="percent">
0%
</span>
<span class="absValue">
(0/83)
</span>
</td>
</tr>
</table>
<br/>
<br/>
<pre>
<code class="sourceCode" id="sourceCode">&nbsp;package it.polimi.ingsw.gc14.Network.TCP.Client;
&nbsp;
&nbsp;import it.polimi.ingsw.gc14.Controller.ClientController;
&nbsp;import it.polimi.ingsw.gc14.ErrorType;
&nbsp;import it.polimi.ingsw.gc14.Model.MiniModel;
&nbsp;import it.polimi.ingsw.gc14.Network.IClient;
&nbsp;import it.polimi.ingsw.gc14.Network.NetworkEvent;
&nbsp;import it.polimi.ingsw.gc14.Network.NetworkConfig;
&nbsp;import it.polimi.ingsw.gc14.Network.NetworkEvents.*;
&nbsp;
&nbsp;import java.io.*;
&nbsp;import java.net.*;
&nbsp;import java.util.concurrent.Executors;
&nbsp;import java.util.concurrent.ScheduledExecutorService;
&nbsp;import java.util.concurrent.TimeUnit;
&nbsp;
&nbsp;/**
&nbsp; * Client TCP. Sends and receives messages with the TCP server.
&nbsp; */
&nbsp;public class TCPClient implements IClient {
&nbsp; /** Byte value sent by the client to signal it is still alive. */
&nbsp; private static final int PING = 1;
&nbsp; /** Byte value expected from the server in response to a {@link #PING}. */
&nbsp; private static final int PONG = 2;
&nbsp;
&nbsp; /** Socket TCP */
&nbsp; private Socket communicationSocket;
&nbsp;
&nbsp; /** Input stream used receive objects from the server */
&nbsp; private ObjectInputStream socketReceive;
&nbsp;
&nbsp; /** Output stream used to send objects to the server */
&nbsp; private ObjectOutputStream socketSend;
&nbsp;
&nbsp; /** Client game&#39;s controller */
&nbsp; private final ClientController controller;
&nbsp;
&nbsp; /** IP address of the server to connect to */
&nbsp; private final String hostname;
&nbsp; /** {@code true} while the connection is active; set to {@code false} on disconnect. */
&nbsp; private boolean running;
&nbsp; /** TCP port */
&nbsp; private final int mainPort;
&nbsp; /** TCP port dedicated to heartbeat communication. */
&nbsp; private final int heartbeatPort;
&nbsp; /** Socket used exclusively for heartbeat ping/pong exchange. */
&nbsp; private Socket heartbeatSocket;
&nbsp; /** Output stream of {@link #heartbeatSocket}, used to write {@link #PING} bytes. */
&nbsp; private OutputStream heartbeatOut;
&nbsp; /** Input stream of {@link #heartbeatSocket}, used to read {@link #PONG} bytes. */
&nbsp; private InputStream heartbeatIn;
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Constructs a TCP client and initializes its connection parameters.
&nbsp; *
&nbsp; * @param controller the client controller.
&nbsp; * @param hostname the IP address or hostname of the server.
&nbsp; * @param mainPort the main TCP port of the server.
&nbsp; * @param heartbeatPort the TCP port used for heartbeat communication.
&nbsp; */
<b class="nc">&nbsp; public TCPClient(ClientController controller, String hostname, int mainPort,int heartbeatPort ) {</b>
<b class="nc">&nbsp; this.controller = controller;</b>
<b class="nc">&nbsp; this.hostname = hostname;</b>
<b class="nc">&nbsp; this.mainPort = mainPort;</b>
<b class="nc">&nbsp; this.heartbeatPort = heartbeatPort;</b>
&nbsp; }
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Starts the TCP connection with the server.
&nbsp; * Sends an {@link AddPlayer} event, if the server responds with {@code -1}, the connection is refused and the method returns {@code false}.
&nbsp; * Otherwise, a listener thread is started.
&nbsp; * @param user The username of the player
&nbsp; * @param proposedNPlayers The desired number of players for the game
&nbsp; * @return null if the connection is successful, GENERIC_ERROR otherwise.
&nbsp; */
&nbsp; public ErrorType connect(String user, int proposedNPlayers) {
&nbsp; try {
<b class="nc">&nbsp; communicationSocket = new Socket(hostname, mainPort);</b>
<b class="nc">&nbsp; socketSend = new ObjectOutputStream(communicationSocket.getOutputStream());</b>
<b class="nc">&nbsp; socketReceive = new ObjectInputStream(communicationSocket.getInputStream());</b>
<b class="nc">&nbsp; NetworkEvent event= new AddPlayer(user, proposedNPlayers);</b>
<b class="nc">&nbsp; socketSend.writeObject(event);</b>
&nbsp; try {
<b class="nc">&nbsp; if( socketReceive.readObject() instanceof AddPlayer x)</b>
&nbsp; {
<b class="nc">&nbsp; if(x.isError())</b>
<b class="nc">&nbsp; return x.getErrorType();</b>
&nbsp; }
&nbsp; } catch (ClassNotFoundException e) {
<b class="nc">&nbsp; return ErrorType.GENERIC_ERROR;</b>
&nbsp; }
&nbsp;
<b class="nc">&nbsp; running = true;</b>
&nbsp;
<b class="nc">&nbsp; new Thread(this::receiveMessage, &quot;tcp-reader&quot;).start();</b>
&nbsp;
&nbsp; // heartbeat socket
<b class="nc">&nbsp; this.heartbeatSocket = new Socket(hostname, heartbeatPort);</b>
<b class="nc">&nbsp; this.heartbeatOut = heartbeatSocket.getOutputStream();</b>
<b class="nc">&nbsp; this.heartbeatIn = heartbeatSocket.getInputStream();</b>
&nbsp;
&nbsp; // send username immediately so server can associate the two sockets
<b class="nc">&nbsp; new ObjectOutputStream(heartbeatSocket.getOutputStream()).writeObject(user);</b>
<b class="nc">&nbsp; heartbeatOut.flush();</b>
<b class="nc">&nbsp; new Thread(this::heartbeatLoop, &quot;heartbeat&quot;).start();</b>
&nbsp;
<b class="nc">&nbsp; return null;</b>
&nbsp;
&nbsp; } catch (IOException e) {
<b class="nc">&nbsp; e.printStackTrace();</b>
<b class="nc">&nbsp; return ErrorType.SERVER_UNREACHABLE;</b>
&nbsp; }
&nbsp; }
&nbsp; /**
&nbsp; * Sends a {@link #PING} byte to the server every 3 seconds and waits for a {@link #PONG} reply.
&nbsp; * If no reply arrives within {@value NetworkConfig#SILENCE_THRESHOLD_MS} ms, the server is
&nbsp; * considered unreachable and {@link #disconnect()} is called.
&nbsp; */
&nbsp; private void heartbeatLoop() {
<b class="nc">&nbsp; ScheduledExecutorService sender = Executors.newSingleThreadScheduledExecutor();</b>
<b class="nc">&nbsp; sender.scheduleAtFixedRate(() -&gt; {</b>
&nbsp; try {
<b class="nc">&nbsp; synchronized (heartbeatOut)</b>
&nbsp; {
<b class="nc">&nbsp; heartbeatOut.write(PING);</b>
<b class="nc">&nbsp; heartbeatOut.flush();</b>
<b class="nc">&nbsp; }</b>
&nbsp;
&nbsp; } catch (IOException e) {
<b class="nc">&nbsp; sender.shutdownNow();</b>
<b class="nc">&nbsp; if(running)</b>
&nbsp; {
<b class="nc">&nbsp; disconnect();</b>
<b class="nc">&nbsp; controller.getView().showError(ErrorType.SERVER_CRASHED,ErrorType.SERVER_CRASHED.toString());</b>
&nbsp; }
&nbsp;
&nbsp; }
&nbsp; }, 0, 3, TimeUnit.SECONDS);
&nbsp;
&nbsp; try {
<b class="nc">&nbsp; heartbeatSocket.setSoTimeout((int) NetworkConfig.SILENCE_THRESHOLD_MS);</b>
<b class="nc">&nbsp; while (running) {</b>
<b class="nc">&nbsp; int b = heartbeatIn.read();</b>
<b class="nc">&nbsp; if (b != PONG) {</b>
<b class="nc">&nbsp; disconnect();</b>
<b class="nc">&nbsp; controller.getView().showError(ErrorType.SERVER_CRASHED, ErrorType.SERVER_CRASHED.toString());</b>
&nbsp; break;
&nbsp; }
&nbsp; // pong received: server is alive
&nbsp; }
&nbsp; } catch (SocketTimeoutException e) {
<b class="nc">&nbsp; System.out.println(&quot;Server heartbeat timeout&quot;);</b>
<b class="nc">&nbsp; disconnect();</b>
<b class="nc">&nbsp; controller.getView().showError(ErrorType.SERVER_CRASHED, ErrorType.SERVER_CRASHED.toString());</b>
&nbsp; } catch (IOException e) {
<b class="nc">&nbsp; if (running) {</b>
<b class="nc">&nbsp; disconnect();</b>
<b class="nc">&nbsp; controller.getView().showError(ErrorType.SERVER_CRASHED, ErrorType.SERVER_CRASHED.toString());</b>
&nbsp; }
&nbsp; } finally {
<b class="nc">&nbsp; sender.shutdownNow();</b>
&nbsp; }
&nbsp; }
&nbsp;
&nbsp; /**
&nbsp; * Disconnects the player and cleans model and controller
&nbsp; */
&nbsp; private synchronized void disconnect() {
<b class="nc">&nbsp; if (!running) return;</b>
<b class="nc">&nbsp; running = false;</b>
<b class="nc">&nbsp; try { communicationSocket.close(); } catch (IOException ignored) {}</b>
<b class="nc">&nbsp; try { heartbeatSocket.close(); } catch (IOException ignored) {}</b>
<b class="nc">&nbsp; controller.setClient(null);</b>
<b class="nc">&nbsp; controller.setModel(null);</b>
&nbsp; }
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Listens continuously for incoming objects from the server.
&nbsp; * - If the received object is a {@link NetworkEvent} flagged as an error, it is printed.
&nbsp; * - If the received object is a valid {@link NetworkEvent}, it is applied to the game controller.
&nbsp; * - If the received object is a {@link MiniModel}, the controller&#39;s model is set.
&nbsp; */
&nbsp; private void receiveMessage() {
&nbsp; while (true) {
&nbsp; try {
&nbsp; Object read;
&nbsp; try {
<b class="nc">&nbsp; read = socketReceive.readObject();</b>
&nbsp; } catch (IOException e) {
<b class="nc">&nbsp; if (running) disconnect();</b>
&nbsp; break;
&nbsp; }
&nbsp;
<b class="nc">&nbsp; if (read instanceof NetworkEvent event) {</b>
<b class="nc">&nbsp; if (event.isError()) {</b>
<b class="nc">&nbsp; if(event.getErrorType() == ErrorType.WRONG_ACTION) {</b>
<b class="nc">&nbsp; controller.getView().showError(ErrorType.WRONG_ACTION,event.toString());</b>
&nbsp; }
&nbsp; else
<b class="nc">&nbsp; controller.getView().showError(event.getErrorType(),event.getErrorType().toString());</b>
&nbsp; } else {
<b class="nc">&nbsp; event.apply(controller.getMiniModel());</b>
<b class="nc">&nbsp; controller.getView().render();</b>
&nbsp; }
&nbsp;
<b class="nc">&nbsp; } else if (read instanceof MiniModel model) {</b>
<b class="nc">&nbsp; controller.setModel(model);</b>
<b class="nc">&nbsp; controller.getView().render();</b>
&nbsp; }
&nbsp;
&nbsp; } catch (ClassNotFoundException e) {
<b class="nc">&nbsp; e.printStackTrace();</b>
&nbsp; break;
&nbsp; }
&nbsp; }
&nbsp; }
&nbsp;
&nbsp; /**
&nbsp; * Requests to draw a tribe card from the upper list.
&nbsp; * Creates a NetworkEvent and sends it through the network client.
&nbsp; * @param playerUsername the name of the player performing the action
&nbsp; * @param pos the index of the card to draw
&nbsp; */
&nbsp; public void drawUpperTribeCard(String playerUsername, int pos) {
<b class="nc">&nbsp; doEvent(new DrawUpperTribeCard(playerUsername,pos));</b>
&nbsp;
&nbsp; }
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Requests to draw a tribe card from the lower list.
&nbsp; * Creates a NetworkEvent and sends it through the network client.
&nbsp; * @param playerUsername the name of the player performing the action
&nbsp; * @param pos the index of the card to draw
&nbsp; */
&nbsp; public void drawLowerTribeCard(String playerUsername,int pos) {
<b class="nc">&nbsp; doEvent(new DrawLowerTribeCard(playerUsername,pos));</b>
&nbsp; }
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Requests to draw a building card from the upper list.
&nbsp; * Creates a NetworkEvent and sends it through the network client.
&nbsp; * @param playerUsername the name of the player performing the action
&nbsp; * @param pos the index of the card to draw
&nbsp; */
&nbsp; public void drawUpperBuildingCard(String playerUsername,int pos) {
<b class="nc">&nbsp; doEvent(new DrawUpperBuildingCard(playerUsername,pos));</b>
&nbsp;
&nbsp; }
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Requests to draw a building card from the lower list.
&nbsp; * Creates a NetworkEvent and sends it through the network client.
&nbsp; * @param playerUsername the name of the player performing the action
&nbsp; * @param pos the index of the card to draw
&nbsp; */
&nbsp; public void drawLowerBuildingCard(String playerUsername,int pos) {
<b class="nc">&nbsp; doEvent(new DrawLowerBuildingCard(playerUsername,pos));</b>
&nbsp; }
&nbsp;
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Requests to skip drawing turn.
&nbsp; * This action is available only when the player cannot draw any tribe card, but still can buy some buildings.
&nbsp; * @param playerUsername the name of the player performing the action
&nbsp; */
&nbsp; public void skipTurn(String playerUsername) {
<b class="nc">&nbsp; doEvent(new SkipTurn(playerUsername));</b>
&nbsp; }
&nbsp;
&nbsp;
&nbsp; /**
&nbsp; * Used to perform the slot choice action for the specified player at the specified position.
&nbsp; * @param playerUsername the name of the player performing the action
&nbsp; * @param pos the index of the selected slot
&nbsp; */
&nbsp; public void slotChoice(String playerUsername,int pos) {
<b class="nc">&nbsp; doEvent(new SlotChoice(playerUsername,pos));</b>
&nbsp; }
&nbsp; /**
&nbsp; * Sends a {@link NetworkEvent} to the server.
&nbsp; * @param event The NetworkEvent to send.
&nbsp; */
&nbsp; private void doEvent(NetworkEvent event) {
&nbsp; try {
<b class="nc">&nbsp; synchronized (socketSend) {</b>
<b class="nc">&nbsp; socketSend.writeObject(event);</b>
<b class="nc">&nbsp; }</b>
&nbsp; } catch (IOException e) {
<b class="nc">&nbsp; e.printStackTrace();</b>
&nbsp; }
&nbsp; }
&nbsp;
&nbsp; /**
&nbsp; * Sends a totem choice event to the server for the specified player.
&nbsp; *
&nbsp; * @param playerUsername the username of the player choosing the totem.
&nbsp; * @param totems the name of the chosen totem.
&nbsp; */
&nbsp; public void totemChoice(String playerUsername,String totems) {
<b class="nc">&nbsp; doEvent(new TotemChoice(playerUsername,totems));</b>
&nbsp; }
&nbsp;
&nbsp; /**
&nbsp; * Notifies the server of a voluntary disconnection by sending a sentinel value
&nbsp; * on the heartbeat channel, then closes the connection.
&nbsp; */
&nbsp; public void notifyDisconnection()
&nbsp; {
<b class="nc">&nbsp; synchronized (heartbeatOut)</b>
&nbsp; {
&nbsp; try {
<b class="nc">&nbsp; heartbeatOut.write(-1);</b>
&nbsp; } catch (IOException e) {
<b class="nc">&nbsp; disconnect();</b>
&nbsp; }
<b class="nc">&nbsp; }</b>
<b class="nc">&nbsp; disconnect();</b>
&nbsp; }
&nbsp;}
</code>
</pre>
</div>
<script type="text/javascript">
(function() {
var msie = false, msie9 = false;
/*@cc_on
msie = true;
@if (@_jscript_version >= 9)
msie9 = true;
@end
@*/
if (!msie || msie && msie9) {
hljs.highlightAll()
hljs.initLineNumbersOnLoad();
}
})();
</script>
<div class="footer">
<div style="float:right;">generated on 2026-06-19 22:53</div>
</div>
</body>
</html>