using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net.WebResponses;
using Assets.MyGame.Scripts.Net.WebResponses.ChineseChess;
using Newtonsoft.Json;
using System;
using System.Text;
using Unity.VisualScripting;
using UnityEngine;
public partial class WebSocketSendList
{
public static string MakeKillFishSign(
string roomId,
string userId,
string fishNumber,
string fishId,
long gold,
long timespan,
string bulletId,
long timestamp,
string signKey
)
{
string rawStr = $"{roomId}|{userId}|{fishNumber}|{fishId}|{gold}|{timespan}|{bulletId}|{timestamp}";
return Sign(rawStr, signKey);
}
public static string MakeFireCannonSign(string roomId, string userId, long gold, int count, long timestamp, string signKey)
{
string rawStr = $"{roomId}|{userId}|{gold}|{count}|{timestamp}";
Debug.Log($"生成签名的原始字符串:{rawStr}");
return Sign(rawStr, signKey);
}
public static string Sign(string rawStr, string signKey)
{
string input = rawStr + "|" + signKey;
using (var md5 = System.Security.Cryptography.MD5.Create())
{
byte[] bytes = Encoding.UTF8.GetBytes(input);
byte[] hash = md5.ComputeHash(bytes);
// 转成 hex 字符串(前 8 位)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("x2"));
}
return sb.ToString().Substring(0, 8);
}
}
///
/// 获取房间信息
///
public static void GetRoomListFish(int leave,int district)
{
WebSocketManager.Instance.Send(SocketType.room, "{\"type\":1,\"target\":\"GetRoomList\",\"invocationId\":\"1\",\"arguments\":[\"" + GameManager.Instance.user.id + "\"," + (int)GameManager.Instance.gameData.currGameType + "," + leave + ","+ district + "]}");
}
///
/// 打中鱼
///
///
///
/// 配置id
/// 唯一id
public static void KillFish(
string roomId,
string userId,
string fishNumber,
string fishId,
int paoBei,
string bulletId,
string signKey
)
{
long timespan = BeijingTimeManager.Instance.CurrentTimestampMs; // 毫秒
long timestamp = timespan / 1000; // 秒级
// count 固定为 1
string sign = MakeKillFishSign(roomId, userId, fishNumber, fishId, paoBei, timespan, bulletId, timestamp, signKey);
var sendObj = new WebSocketSendList(
"KillFish",
roomId,
userId,
fishNumber,
fishId,
paoBei,
timespan,
bulletId,
timestamp,
sign
);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 发射子弹
///
///
///
/// 单价
/// 数量
///
/// 发射子弹(与 KillFish 同结构版本)
///
public static void FireCannon(
string roomId,
string userId,
long gold,
int count,
object extra,
string signKey
)
{
long timespan = BeijingTimeManager.Instance.CurrentTimestampMs; // 毫秒
long timestamp = timespan / 1000; // 秒级
// FireCannon 的签名规则与 KillFish 一样:roomId|userId|gold|count|timestamp
string sign = MakeFireCannonSign(roomId, userId, gold, count, timestamp, signKey);
var sendObj = new WebSocketSendList(
"FireCannon",
roomId,
userId,
gold,
count,
timestamp,
sign,
extra
);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 发射子弹
///
///
///
/// 单价
/// 数量
public static void ShootBullet(string roomId, string userId, int gold, int count)
{
var sendObj = new WebSocketSendList("ShootBullet", roomId, userId, gold, count);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 链接登录界面ws
///
///
public static void Bind(string userId)
{
var sendObj = new WebSocketSendList("Bind", userId);
WebSocketManager.Instance.Send(SocketType.login, JsonConvert.SerializeObject(sendObj));
}
///
/// 加入房间
///
///
///
/// 房间等级
public static void JoinRoom(string roomId, string userId, int sitID)
{
var sendObj = new WebSocketSendList("JoinRoom", roomId, userId, sitID);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 获取房间信息
///
/// 房间id
public static void GetRoomInfo(string roomId)
{
var sendObj = new WebSocketSendList("GetRoomInfo", roomId);
WebSocketManager.Instance.Send(SocketType.room, JsonConvert.SerializeObject(sendObj));
}
///
/// 使用道具
///
///
///
/// 道具id
/// 道具消耗
public static void UseProp(string roomId, string userId, string propNumber, int diamond)
{
var sendObj = new WebSocketSendList("UseProp", roomId, userId, propNumber, diamond);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 离开房间
///
///
///
public static void LeaveRoom(string roomId, string userId)
{
WebSocketManager.Instance.isGame=false;
var sendObj = new WebSocketSendList("LeaveRoom", roomId, userId);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 更改炮倍
///
///
///
///
public static void ChangeGunMultiple(string roomId, string userId,int multiple)
{
var sendObj = new WebSocketSendList("ChangeGunMultiple", roomId, userId, multiple);
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
}
///
/// 数据同步
///
public static void SyncGameData(object obj)
{
WebSocketSendList sendObj = new WebSocketSendList
{
type = 1,
invocationId = "1",
target = "SyncGameData",
arguments = new System.Collections.Generic.List