using System.Collections; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; using System.Net.Sockets; using UnityWebSocket; using System.Text; using Google.Protobuf; using System.Net.WebSockets; using System; using System.Threading.Tasks; public class test : MonoBehaviour { public string token; public WEBScriptListener wEBScriptListener; public class auth_login { public string clientId = "e5cd7e4891bf95d1d19206ce24a7b32e"; public string grantType = "password"; public string userType = "company_user"; public string username = "13006065371"; public string password = "YYL5371!"; } //public async void loging() //{ // auth_login auth_Login = new auth_login(); // string response = await web.SendRequest(web.URL + "/auth/login", "POST", JsonUtility.ToJson(auth_Login)); // // 解析服务器返回的数据 // server serverData = JsonConvert.DeserializeObject(response); // token = serverData.data.access_token; // //Debug.Log(setverData.msg); //} //登录 void lodingWebSocket() { LoginRequest data = new LoginRequest(); data.UserId = "1845037177556934657"; data.Account = "17311259169"; WSMessage msg = new WSMessage(); msg.Module = "hall"; msg.ServiceName = "Login"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); LoginRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("登录"); wEBScriptListener.SendMessageByte(sendData); } //加入房间 public void JoinRoom() { JoinRoomRequest data = new JoinRoomRequest(); data.RoomId = "168888"; WSMessage msg = new WSMessage(); msg.Module = "hall"; msg.ServiceName = "JoinRoom"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); JoinRoomRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("加入房间"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } //void BroadcastMessage() //{ // WSMessage msg = new WSMessage(); // msg.Module = "hall"; // msg.ServiceName = "BroadcastMessage"; // //msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); // byte[] sendData = ProtoBufffer.Serialize(msg); // WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); // JoinRoomRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); // Debug.Log("加入房间"); // //BroadcastFrameMsg.FramesFieldNumber // wEBScriptListener.SendMessageByte(sendData); //} //心跳 async void Heartbeat() { //WSMessage msg = new WSMessage(); //msg.Data = ByteString.CopyFrom(new byte[] { 1 }); //byte[] sendData = ProtoBufffer.Serialize(msg); //Debug.Log(""); while (true) { WSMessage msg = new WSMessage(); msg.Module = "ping"; //msg.Data = ByteString.CopyFrom(new byte[] { 1 }); byte[] sendData = ProtoBufffer.Serialize(msg); // 每秒执行的任务 Debug.Log("每秒执行一次"); wEBScriptListener.SendMessageByte(sendData); // 等待一秒 await Task.Delay(1000); } } //帧存储操作输入 //void UpFps() //{ // InputData data = new InputData(); // data.RoomId = "168888"; // data.Id = "778899"; // data.SId = "7"; // data.X = 7f; // data.Y = 5f; // data.Z = 4f; // data.RoomSeatId = 5; // WSMessage msg = new WSMessage(); // msg.Module = "fps"; // msg.ServiceName = "UpFps"; // msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); // byte[] sendData = ProtoBufffer.Serialize(msg); // WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); // InputData login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); // Debug.Log("帧存储操作输入"); // //BroadcastFrameMsg.FramesFieldNumber // wEBScriptListener.SendMessageByte(sendData); //} //拾取道具 void PickUpProp() { PropRequest data = new PropRequest(); data.PropId = 1001; data.RoomId = "168888"; WSMessage msg = new WSMessage(); msg.Module = "prop"; msg.ServiceName = "PickUpProp"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); PropRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("拾取道具"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } //使用道具 void StartUseProp() { PropRequest data = new PropRequest(); data.RoomId = "168888"; data.PropId = 1001; data.Action = 1; data.PropServerId = "MTg1OTc5MDMwOTIyODc4OTc2MA=="; WSMessage msg = new WSMessage(); msg.Module = "prop"; msg.ServiceName = "StartUseProp"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); PropRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("使用道具"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } //停止使用道具 void StopUseProp() { PropRequest data = new PropRequest(); data.RoomId = "168888"; data.PropId = 1001; data.PropServerId = "MTg1OTc5MDMwOTIyODc4OTc2MA=="; WSMessage msg = new WSMessage(); msg.Module = "prop"; msg.ServiceName = "StopUseProp"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); PropRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("停止使用道具"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } //创建NPC ========================暂时不需要 //void CreateNpc() //{ // PropRequest data = new PropRequest(); // data.RoomId = "168888"; // WSMessage msg = new WSMessage(); // msg.Module = "move"; // msg.ServiceName = "CreateNpc"; // msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); // byte[] sendData = ProtoBufffer.Serialize(msg); // WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); // PropRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); // Debug.Log("创建NPC"); // //BroadcastFrameMsg.FramesFieldNumber // wEBScriptListener.SendMessageByte(sendData); //} //推送npc和玩家的信息 ===============只需要收消息 //void Location() //{ // PropRequest data = new PropRequest(); // data.RoomId = "168888"; // WSMessage msg = new WSMessage(); // msg.Module = "prop"; // msg.ServiceName = "CreateNpc"; // msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); // byte[] sendData = ProtoBufffer.Serialize(msg); // WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); // PropRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); // Debug.Log("推送npc和玩家的信息"); // //BroadcastFrameMsg.FramesFieldNumber // wEBScriptListener.SendMessageByte(sendData); //} //11.开始计时 void RoomStartTime() { JoinRoomRequest data = new JoinRoomRequest(); data.RoomId = "168888"; WSMessage msg = new WSMessage(); msg.Module = "hall"; msg.ServiceName = "RoomStartTime"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); JoinRoomRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("推送npc和玩家的信息"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } void Location() { MoveResponse data = new MoveResponse(); data.RoomId = "168888"; WSMessage msg = new WSMessage(); msg.Module = "move"; msg.ServiceName = "Location"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); MoveResponse login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("推送npc和玩家的信息"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } void TaskTrigger() { TaskTrigger data = new TaskTrigger(); data.RoomId = "168888"; data.TriggerId = "10006"; data.UserId = "1845037177556934659"; data.TypeStr = "selector"; WSMessage msg = new WSMessage(); msg.Module = "task"; msg.ServiceName = "TaskTrigger"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); TaskTrigger login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("==========任务触发"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } void TaskUpdateRequest() { TaskUpdateRequest data = new TaskUpdateRequest(); data.RoomId = "168888"; data.TaskId = "d9608224-18b4-4d68-af45-82b3c843e3c3"; data.UserId = "1845037177556934659"; data.PropId = "3005"; WSMessage msg = new WSMessage(); msg.Module = "task"; msg.ServiceName = "UpdateTask"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); TaskUpdateRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("==========任务触发"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } public void NpcMove() { MoveRequest data = new MoveRequest(); data.RoomId = "168888"; data.SelectId = 10821; WSMessage msg = new WSMessage(); msg.Module = "move"; msg.ServiceName = "MoveNpc"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); MoveRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("==========选择路线"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } //12.消息转发 public void MessageToUser() { MessageBroadcastRequest data = new MessageBroadcastRequest(); data.RoomId = "168888"; data.Type = 1; data.RoleId = "8002"; data.Cmd = "55"; WSMessage msg = new WSMessage(); msg.Module = "hall"; msg.ServiceName = "MessageToUser"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); MessageBroadcastRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("==========消息转发函数调用"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } public void CreateNpcHandler() { NpcCreateRequest data = new NpcCreateRequest(); data.RoomId = "168888"; data.SceneId = "9003"; data.TemplateId = 2; WSMessage msg = new WSMessage(); msg.Module = "move"; msg.ServiceName = "CreateNpcHandler"; msg.Data = ByteString.CopyFrom(ProtoBufffer.Serialize(data)); byte[] sendData = ProtoBufffer.Serialize(msg); WSMessage deinfo = ProtoBufffer.DeSerialize(sendData); NpcCreateRequest login = ProtoBufffer.DeSerialize(deinfo.Data.ToByteArray()); Debug.Log("==========消息转发函数调用"); //BroadcastFrameMsg.FramesFieldNumber wEBScriptListener.SendMessageByte(sendData); } // Start is called before the first frame update async void Start() { //loging(); wEBScriptListener.ConcatWEBSocket(); wEBScriptListener.OnCallback += callback; if (wEBScriptListener != null) { lodingWebSocket(); //JoinRoom(); Heartbeat(); //BroadcastMessage(); //UpFps(); //PickUpProp(); //StartUseProp(); //StopUseProp(); //RoomStartTime(); //Location(); //TaskTrigger(); //TaskUpdateRequest(); } //int index = 0; //while (true) //{ // index++; // NpcData moveData = new NpcData(); // moveData.X = index; // moveData.Y = 1; // moveData.Z = 1; // MoveResponse data = new MoveResponse(); // data.MoveData.Add(moveData); // WSResponse ws = new WSResponse(); // ws.MessageType = "move.Location"; // ws.Data = ByteString.CopyFrom(data.ToByteArray()); // callback(ProtoBufffer.Serialize(ws)); // //PlayerJoinResponse pj = new PlayerJoinResponse(); // //pj.UserName = "abc"; // //pj.RoomId = "2"; // //pj.Status = 0; // //pj.RoleName = "ABC"; // //pj.IsLeadingNPC = 5; // //pj.Online = true; // //pj.RoleId = 7; // //pj.GroupLeader = 0; // //pj.ActionMode = 2; // //pj.Group = -1; // //pj.X = 11; // //pj.Y = 12; // //pj.Z = 13; // //pj.OverseeCond = "14"; // //pj.SendFrameCount = 15; // //pj.MoveSpeedFirst = 16; // //pj.MoveSpeedSecond = 17; // //pj.MoveSpeedThird = 18; // //pj.BearLoad = 19; // //pj.Protection = 20; // //pj.Health = 21; // //pj.RoleStatus = 22; // //pj.UserId = 23; // //JoinRoomResponse data = new JoinRoomResponse(); // //data.Data = pj; // //WSResponse ws = new WSResponse(); // //ws.MessageType = "hall.JoinRoom"; // //ws.Data = ByteString.CopyFrom(data.ToByteArray()); // //callback(ProtoBufffer.Serialize(ws)); // await Task.Delay(1000); //} } void callback(byte[] data) { WSResponse deinfo = ProtoBufffer.DeSerialize(data); Debug.Log("返回数据类型:"+deinfo.MessageType); byte[] bytes = deinfo.Data.ToByteArray(); switch (deinfo.MessageType) { //监听 //登录 case "hall.Login": Debug.Log("-=====--"); LoginResponse user = ProtoBufffer.DeSerialize(bytes); Debug.Log(user); //这里是测试阶段用的,在登录之后调用加入房间,后续会删掉 break; //进入房间 case "hall.JoinRoom": JoinRoomResponse joinRoomResponse = ProtoBufffer.DeSerialize(bytes); byte[] joinByte = joinRoomResponse.Data.ToByteArray(); PlayerJoinResponse playerJoinResponse = ProtoBufffer.DeSerialize(joinByte); Debug.Log("玩家:"+playerJoinResponse.UserName+"加入房间:"+playerJoinResponse.RoomId.ToString()); break; //广播 case "hall.BroadcastMessage": UserJoinResponse userJoinResponse = ProtoBufffer.DeSerialize(bytes); //Debug.Log(userJoinResponse.IncidentPosition); Debug.Log(userJoinResponse); if(userJoinResponse.MessageType == 1)//用户上线 { Debug.Log("玩家:" + userJoinResponse.NickName + "上线"); } if(userJoinResponse.MessageType == 2)//用户下线 { Debug.Log("玩家:" + userJoinResponse.NickName + "下线"); } if(userJoinResponse.MessageType == 3)//加入房间 { Debug.Log("玩家" + userJoinResponse.NickName + "加入房间:" + userJoinResponse.RoomId.ToString() + ",用户角色" + userJoinResponse.RoleName); } if(userJoinResponse.MessageType == 4)//事故发生 { } if(userJoinResponse.MessageType == 5)//火势 { } if(userJoinResponse.MessageType == 6)//任务 { TaskInfoResponse taskInfoResponse = userJoinResponse.TaskResponse; if (long.Parse(taskInfoResponse.ToUserId) == userJoinResponse.UserId)//当这个任务是当前玩家的任务时显示任务 { //TaskPanel.instance.SetInfo(int.Parse(taskInfoResponse.TaskId)); } } break; // case "fps.UpFps": InputData inputData = ProtoBufffer.DeSerialize(bytes); Debug.Log("Id:" + inputData.Id + ",sId :" + inputData.SId + ",X:"+ inputData.X.ToString() + ",Y:" + inputData.Y.ToString() + ",roomSeatId :" + inputData.RoomSeatId + ",z:" + inputData.Z.ToString() + ",roomId:" + inputData.RoomId); break; case "prop.PickUpProp": PropRequest propRequest = ProtoBufffer.DeSerialize(bytes); Debug.Log("PropId:" + propRequest.PropId); break; case "prop.StartUseProp": PropResponse useProp = ProtoBufffer.DeSerialize(bytes); Debug.Log("PropId:" + useProp); break; case "prop.StopUseProp": PropResponse stopuseProp = ProtoBufffer.DeSerialize(bytes); Debug.Log("PropId:" + stopuseProp); break; case "move.Location": Debug.Log("move.Location接受到了"); NpcData npcData = ProtoBufffer.DeSerialize(bytes); Debug.Log(npcData); if(npcData.Type == 1)//npc创建 { float x = -float.Parse(npcData.X.ToString()); float y = float.Parse(npcData.Y.ToString()); float z = float.Parse(npcData.Z.ToString()); Vector3 position = new Vector3(x, y, z); NPCController.instance.InitNPC(position, npcData); } if(npcData.Type == 2)//npc移动 { Vector3 v = new Vector3(-float.Parse(npcData.X.ToString()), float.Parse(npcData.Y.ToString()), float.Parse(npcData.Z.ToString())); foreach(RecuseNpc item in NPCController.instance.npcsList) { if(npcData.UserId == item.npcId) { item.SetNpcDes(v); } } } //npc.transform.name = npcData.UserId; //npc.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); //npc.transform.position = new Vector3(x, y + 0.25f, z); //npc.transform.parent = GameObject.Find("schoo103").transform; break; case "task.InitStart": break; //任务触发 case "task.TaskTrigger": Debug.Log("-----------task.TaskTrigger"); TaskTrigger taskTrigger = ProtoBufffer.DeSerialize(bytes); Debug.Log(taskTrigger); break; //更新任务 case "task.UpdateTask": Debug.Log("-----------task.TaskTrigger"); MoveRequest taskUpdateRequest = ProtoBufffer.DeSerialize(bytes); Debug.Log(taskUpdateRequest); break; //对象触发操作 case "object.HandleObject": Debug.Log("-----------object.HandleObject"); RequestObject requestObject = ProtoBufffer.DeSerialize(bytes); Debug.Log(requestObject); break; //对象触发操作 case "move.MoveNpc": Debug.Log("-----------move.MoveNpc"); MoveRequest moveRequest = ProtoBufffer.DeSerialize(bytes); Debug.Log(moveRequest); break; //case "prop.CreateNpc": // MoveResponse moveResponse = ProtoBufffer.DeSerialize(bytes); // Debug.Log("UserId:" + moveResponse.UserId + ",RoomId:" + moveResponse.RoomId + ",x:" + moveResponse.MoveData); // break; //case "hall.RoomStartTime": // JoinRoomRequest joinRoomRequest = ProtoBufffer.DeSerialize(bytes); // Debug.Log("PropId:" + joinRoomRequest.RoomId); // break; //case " hall.MessageToUser": // //JoinRoomRequest joinRoomRequest = ProtoBufffer.DeSerialize(bytes); // //Debug.Log("PropId:" + joinRoomRequest.RoomId); // break; } } }