Compare commits

...

2 Commits

Author SHA1 Message Date
杨号敬
5f580693b0 Merge branch 'main' of http://shu.sheziwanglo.cn:3000/shurongsen/Cute_demon_attacks 2025-01-08 11:20:33 +08:00
杨号敬
3e8afe4932 钓手PK 2025-01-08 11:19:45 +08:00
3 changed files with 328 additions and 1 deletions

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 29b5ece7ff1f9c946aee00668809f293
guid: 59ba626460106f54f9a130de3914d56a
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -0,0 +1,316 @@
using System;
using System.Collections.Generic;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
using Newtonsoft.Json;
using System.Drawing;
using UnityEngine.UI;
public class WebFishingPK : MonoBehaviour
{
private ClientWebSocket _webSocket;
private const string WebSocketUri = "ws://47.95.201.243:9527/api/ws";
private string AuthorizationValue;
/// <summary>
/// 倒计时
/// </summary>
private float lastCallTime = 0f;
float remainingTime = 0f;
public Text TimeText;
private float interval = 1f; // 每秒调用一次
private async void Start()
{
TimeText.gameObject.SetActive(false);
Debug.Log(PlayerPrefs.GetString("UserToken"));
AuthorizationValue = PlayerPrefs.GetString("UserToken");
await ConnectWebSocket();
// 调用发送方法
await SendJsonMessage("{ \"code\": \"FISHING_PK\", \"content\": \"{\\\"action\\\":\\\"INFO\\\"}\" }");
//await SendJsonMessage(30, 1);
}
private async Task ConnectWebSocket()
{
_webSocket = new ClientWebSocket();
// 添加 Authorization 头
_webSocket.Options.SetRequestHeader("Authorization", "Bearer " + AuthorizationValue);
try
{
Debug.Log("正在连接到 WebSocket...");
await _webSocket.ConnectAsync(new Uri(WebSocketUri), CancellationToken.None);
Debug.Log("WebSocket 连接成功!");
// 开始接收消息
_ = ReceiveMessages();
}
catch (Exception e)
{
Debug.LogError($"WebSocket 连接失败:{e.Message}");
}
}
private async Task ReceiveMessages()
{
var buffer = new byte[1024];
try
{
while (_webSocket.State == WebSocketState.Open)
{
var result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
{
Debug.Log("WebSocket 连接已被服务器关闭。");
await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "关闭连接", CancellationToken.None);
}
else
{
var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Debug.Log($"接收到消息:{message}");
var baseResponse = JsonConvert.DeserializeObject<BaseResponse>(message);
Promptmgr.Instance.PromptBubble(baseResponse.message);
if (baseResponse != null)
{
switch (baseResponse.code)
{
// 解析消息为 钓手PK信息
case "FISHING_PK_INFO":
// 解析为 FishJoinroomresponse 类型
FishPKInforResponse fishResponse = JsonConvert.DeserializeObject<FishPKInforResponse>(message);
//Promptmgr.Instance.PromptBubble(fishResponse.message);
if (fishResponse?.data != null)
{
Debug.Log(fishResponse.data.balance);
Debug.Log(fishResponse.data.intro_text);
Debug.Log(fishResponse.data.countdown);
TimeText.gameObject.SetActive(true);
remainingTime = (float)fishResponse.data.countdown;
Debug.Log(fishResponse.data.countdown_type);
Debug.Log(fishResponse.data.amount_left);
Debug.Log(fishResponse.data.amount_right);
}
break;
//解析为钓手PK投入
case "FISHING_PK_BETTING":
// 解析消息为 Fishresponse 对象
FishPKBetonResponse fishResponse1 = JsonConvert.DeserializeObject<FishPKBetonResponse>(message);
Promptmgr.Instance.PromptBubble(fishResponse1.message);
// 检查是否成功反序列化
if (fishResponse1 != null && fishResponse1.data != null)
{
Debug.Log(fishResponse1.data.balance);
}
else
{
Debug.LogWarning("收到的消息无法解析为 Fishresponse 对象。");
}
break;
//解析为钓手Pk 倒计时
case "FISHING_PK_COUNTDOWN":
// 解析消息为 Fishresponse 对象
FishPKCDResponse fishResponse2 = JsonConvert.DeserializeObject<FishPKCDResponse>(message);
//Promptmgr.Instance.PromptBubble(fishResponse2.message);
// 检查是否成功反序列化
if (fishResponse2 != null && fishResponse2.data != null)
{
Debug.Log(fishResponse2.data.countdown);
remainingTime = (float)fishResponse2.data.countdown;
Debug.Log(fishResponse2.data.countdown_type);
Debug.Log(fishResponse2.data.amount_left);
Debug.Log(fishResponse2.data.amount_right);
}
else
{
Debug.LogWarning("收到的消息无法解析为 Fishresponse 对象。");
}
break;
case "FISHING_PK_SETTLE":
FishPKSETResponse fishResponse3 = JsonConvert.DeserializeObject<FishPKSETResponse>(message);
//Promptmgr.Instance.PromptBubble(fishResponse2.message);
// 检查是否成功反序列化
if (fishResponse3 != null && fishResponse3.data != null)
{
Debug.Log(fishResponse3.data.balance);
Debug.Log(fishResponse3.data.status);
Debug.Log(fishResponse3.data.amount);
Debug.Log(fishResponse3.data.reward);
Debug.Log(fishResponse3.data.weight_left);
Debug.Log(fishResponse3.data.weight_right);
Promptmgr.Instance.PromptBubble(fishResponse3.data.status);
}
else
{
Debug.LogWarning("收到的消息无法解析为 Fishresponse 对象。");
}
break;
}
}
}
}
}
catch (Exception e)
{
Debug.LogError($"接收消息时出错:{e.Message}");
}
}
public async Task SendJsonMessage(int count, int postion)
{
if (_webSocket == null || _webSocket.State != WebSocketState.Open)
{
Debug.LogError("WebSocket 未连接,无法发送消息。");
return;
}
try
{
var message = new
{
code = "FISHING_PK",
content = $"{{\"action\":\"BETTING\",\"amount\":{count},\"position\":{postion}}}"
};
// 将对象序列化为 JSON 字符串
string jsonMessage = JsonConvert.SerializeObject(message);
var encodedMessage = Encoding.UTF8.GetBytes(jsonMessage);
var buffer = new ArraySegment<byte>(encodedMessage);
await _webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
Debug.Log($"已发送 JSON 消息:{jsonMessage}");
}
catch (Exception e)
{
Debug.LogError($"发送消息时出错:{e.Message}");
}
}
public async Task SendJsonMessage(string json)
{
if (_webSocket == null || _webSocket.State != WebSocketState.Open)
{
Debug.LogError("WebSocket 未连接,无法发送消息。");
return;
}
try
{
var encodedMessage = Encoding.UTF8.GetBytes(json);
var buffer = new ArraySegment<byte>(encodedMessage);
await _webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
Debug.Log($"已发送 JSON 消息:{json}");
}
catch (Exception e)
{
Debug.LogError($"发送消息时出错:{e.Message}");
}
}
private async void OnApplicationQuit()
{
if (_webSocket != null && _webSocket.State == WebSocketState.Open)
{
await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "应用程序退出", CancellationToken.None);
_webSocket.Dispose();
Debug.Log("WebSocket 连接已关闭。");
}
}
void UpdateCountdownText(float remainingTime)
{
// 将剩余时间转换为小时、分钟和秒
int hours = Mathf.FloorToInt(remainingTime / 3600);
int minutes = Mathf.FloorToInt((remainingTime % 3600) / 60);
int seconds = Mathf.FloorToInt(remainingTime % 60);
// 使用格式化字符串显示倒计时00:00:00
TimeText.text = "倒计时:"+string.Format("{0:D2}:{1:D2}:{2:D2}", hours, minutes, seconds);
}
private void Update()
{
if (Time.time - lastCallTime >= interval)
{
// 每秒调用一次的代码
if (remainingTime > 0)
{
remainingTime -= 1;
UpdateCountdownText(remainingTime);
Debug.Log("进入倒计时");
}
// 更新上次调用时间
lastCallTime = Time.time;
}
}
}
public class FishPKInforResponse
{
public string code { get; set; }
public string message { get; set; }
public FishPKInfor data { get; set; }
}
public class FishPKInfor
{
public float balance { get; set; }
public string intro_text { get; set; }
public int countdown { get; set; }
public int countdown_type { get; set; }
public float amount_left { get; set; }
public float amount_right { get; set; }
}
public class FishPKBetonResponse
{
public string code { get; set; }
public string message { get; set; }
public FishPKdata data { get; set; }
}
public class FishPKdata
{
public float balance { get; set; }
}
public class FishPKCDResponse
{
public string code { get; set; }
public string message { get; set; }
public FishPKCDdata data { get; set; }
}
public class FishPKCDdata
{
public int countdown { get; set; }
public int countdown_type { get; set; }
public float amount_left { get; set; }
public float amount_right { get; set; }
}
public class FishPKSETResponse
{
public string code { get; set; }
public string message { get; set; }
public FishPKSETdata data { get; set; }
}
public class FishPKSETdata
{
public float balance { get; set; }
public string status { get; set; }
public float amount { get; set; }
public float reward { get; set; }
public float weight_left { get; set; }
public float weight_right { get; set; }
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 29b5ece7ff1f9c946aee00668809f293
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: