实时砍树
<h1>WebSocket API 文档</h1>
<h2>概述</h2>
<p>本文档介绍了基于Socket.IO实现的WebSocket API,用于处理用户砍树、能量恢复的游戏逻辑。</p>
<h2>连接认证</h2>
<p>每次Socket连接时,API会检查认证令牌。</p>
<h3>认证过程</h3>
<ul>
<li>客户端连接时,必须在握手的请求头中提供JWT令牌。</li>
<li>若验证成功,将获取用户ID并继续连接,否则会返回认证错误。</li>
</ul>
<h2>API 接口</h2>
<h3>连接 (<code>connection</code>)</h3>
<p>建立连接后,服务器会执行如下逻辑:</p>
<ul>
<li><strong>检查现有连接</strong>:若用户已在其他设备上登录,之前的连接将被断开。</li>
<li><strong>初始化能量恢复</strong>:自动开始能量恢复,每秒恢复用户的能量。</li>
</ul>
<h3>用户信息 (<code>user_info</code>)</h3>
<ul>
<li><strong>事件名称</strong>:<code>user_info</code></li>
<li><strong>描述</strong>:当用户连接时,服务器会向客户端发送用户的当前状态信息,有数据更新时会实时更新</li>
<li><strong>返回参数</strong>:
<ul>
<li><code>energy</code>: 当前能量值</li>
<li><code>balance</code>: 当前余额</li>
<li><code>maxEnergy</code>: 最大能量上限</li>
<li><code>energyRecoveryRate</code>: 能量恢复速率</li>
<li><code>energyCostPerTree</code>: 每次砍树消耗的能量</li>
<li><code>treeCutReward</code>: 砍树奖励</li>
<li><code>isMiningPetActive</code>: 是否有挖矿宠物</li>
<li><code>lv</code>: 用户等级</li>
</ul></li>
</ul>
<h3>砍树 (<code>tree_cutting</code>)</h3>
<ul>
<li><strong>事件名称</strong>:<code>tree_cutting</code></li>
<li><strong>描述</strong>:请求砍树,服务器将根据用户能量计算奖励。</li>
<li><strong>请求参数</strong>:
<ul>
<li><code>count</code>: 砍树的次数(整数,必须大于0)。</li>
</ul></li>
<li><strong>返回参数</strong>:
<ul>
<li>若成功,服务器将更新用户信息并通过<code>user_info</code>事件返回最新状态。</li>
<li>若失败,服务器将通过<code>error</code>事件返回错误信息,例如"能量不足,无法砍树"。</li>
</ul></li>
</ul>
<h3>断开连接 (<code>disconnect</code>)</h3>
<ul>
<li><strong>事件名称</strong>:<code>disconnect</code></li>
<li><strong>描述</strong>:用户断开连接后,服务器将停止用户的能量恢复逻辑,并清除用户连接记录。</li>
</ul>
<h2>示例代码</h2>
<p>客户端可以通过以下方式连接Socket.IO服务器,并进行认证:</p>
<pre><code class="language-javascript">import io from &quot;socket.io-client&quot;;
const socket = io(&quot;https://chop-api.jpegonapechain.meme&quot;, {
auth: {
token: &quot;YOUR_JWT_TOKEN&quot;,
},
});
socket.on(&quot;connect&quot;, () =&gt; {
console.log(&quot;Successfully connected to the server&quot;);
});
socket.on(&quot;user_info&quot;, (info) =&gt; {
console.log(&quot;User Info:&quot;, info);
});
socket.emit(&quot;tree_cutting&quot;, { count: 5 });
socket.on(&quot;error&quot;, (errorMessage) =&gt; {
console.error(&quot;Error:&quot;, errorMessage);
});
socket.on(&quot;disconnect&quot;, (reason) =&gt; {
console.log(socket.id); // undefined
console.log(socket.connected); // false
console.log(&quot;reason&quot;, reason);
});
socket.on(&quot;connect_error&quot;, (error) =&gt; {
console.error(error);
// socket.auth.token = &quot;abcd&quot;;
// socket.connect();
});
</code></pre>