钓手PK
This commit is contained in:
parent
d25ee64926
commit
3e8afe4932
@ -1,5 +1,5 @@
|
|||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 29b5ece7ff1f9c946aee00668809f293
|
guid: 59ba626460106f54f9a130de3914d56a
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
||||||
|
316
meng_yao/Assets/script/scene_Main/Thebestfishman/WebFishingPK.cs
Normal file
316
meng_yao/Assets/script/scene_Main/Thebestfishman/WebFishingPK.cs
Normal 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; }
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 29b5ece7ff1f9c946aee00668809f293
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user