123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- using UnityEngine;
- using System.Collections;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using LitJson;
- public class TServerC
- {
- public TServer ts;
- public int id;
- public Socket _socket;
- Thread connectThread;
- byte[] recvData;
- byte[] sendData;
- int recvLen;
- string recvStr;
- string sname;
- bool isSpeak = false;
- bool isMute = false;
- public JsonData getInfo()
- {
- JsonData data = new JsonData();
- data["nickname"] = sname;
- data["socketId"] = id;
- data["canSpeek"] = isMute;
- data["isSpeak"] = isSpeak;
- return data;
- }
- public void init()
- {
-
- connectThread = new Thread(new ThreadStart(SocketReceive));
- connectThread.Start();
- }
- public static int bytes2Int(byte[] b)
- {
- int i0 = b[0] & 0xFF;
- int i1 = (b[1] & 0xFF) << 8;
- int i2 = (b[2] & 0xFF) << 16;
- int i3 = (b[3] & 0xFF) << 24;
- return i0 | i1 | i2 | i3;
- }
-
- void SocketReceive()
- {
- while (true)
- {
- byte[] recvBytes = new byte[4];
- int bodyLength = _socket.Receive(recvBytes, 0, recvBytes.Length, SocketFlags.None);
- int baotou = bytes2Int(recvBytes);
- Debug.Log("准备接收==>" + baotou);
-
- recvData = new byte[baotou];
-
- recvLen = 0;
- while (recvLen != recvData.Length)
- {
-
- recvLen += _socket.Receive(recvData, recvLen, recvData.Length - recvLen, SocketFlags.None);
-
- }
-
- if (recvLen == 0)
- {
- _socket.Close();
- ts.clientSockets.Remove(this);
- Debug.Log("Client==>" + id +"断开连接=====》");
-
- break ;
- }
-
- recvStr = Encoding.ASCII.GetString(recvData, 0, recvLen);
-
-
-
- Debug.Log("server 接收到Client==>" + id + "的信息=====》"+ recvStr);
- JsonData data = JsonMapper.ToObject(recvStr) ;
- messageData(data);
- }
- }
-
- public void messageData(JsonData data)
- {
- TServerC tsc;
- JsonData fdata;
- switch (data["action"].ToString())
- {
- case "LoginByToken":
- sname = data["data"]["token"].ToString();
- break;
- case "CreateRoom":
- ts.ownerName = id.ToString();
- fdata = new JsonData();
- fdata["type"] = "Room";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "Create";
- fdata["data"]["roomId"] = "0001";
- fdata["data"]["ownerName"] = ts.ownerName;
- fdata["data"]["RoomUserList"] = ts.getRoomList(id);
- fdata["data"]["message"] = "创建房间成功";
- ts.SocketSend(fdata.ToJson(), -1);
- break;
- case "JoinRoom":
- fdata = new JsonData();
- fdata["type"] = "Room";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "UserJoin";
- fdata["data"]["roomId"] = "0001";
- fdata["data"]["socketId"] = id;
- fdata["data"]["nickname"] = id;
- fdata["data"]["message"] = "用户进入房间";
- ts.SocketSend(fdata.ToJson(), id);
- fdata = new JsonData();
- fdata["type"] = "Room";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "Join";
- fdata["data"]["roomId"] = "0001";
- fdata["data"]["roomName"] = "0001";
- fdata["data"]["ownerName"] = ts.ownerName;
- fdata["data"]["RoomUserList"] = ts.getRoomList(id);
- fdata["data"]["message"] = "进入房间";
- SocketSend(fdata.ToJson());
- break;
- case "LeaveRoom":
- fdata = new JsonData();
- fdata["type"] = "UserLogout";
- fdata["data"] = new JsonData();
- fdata["data"]["socketId"] = id;
- fdata["data"]["nickname"] = id;
- fdata["data"]["message"] = "用户登出";
- ts.SocketSend(fdata.ToJson(), -1);
- _socket.Close();
- ts.clientSockets.Remove(this);
- break;
- case "IceCandidate":
- tsc = ts.getRoomSocketById(int.Parse(data["data"]["socketId"].ToString()));
- fdata = new JsonData();
- fdata["type"] = "IceCandidate";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "IceCandidate";
- fdata["data"]["label"] = data["data"]["label"].ToString();
- fdata["data"]["candidate"] = data["data"]["candidate"].ToString();
- fdata["data"]["id"] = data["data"]["id"].ToString();
- fdata["data"]["socketId"] = id;
- tsc.SocketSend(fdata.ToJson());
- break;
- case "Offer":
- tsc = ts.getRoomSocketById(int.Parse(data["data"]["socketId"].ToString()));
- fdata = new JsonData();
- fdata["type"] = "Offer";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "Offer";
- fdata["data"]["sdp"] = data["data"]["sdp"];
- fdata["data"]["socketId"] = id;
- tsc.SocketSend(fdata.ToJson());
- break;
- case "Answer":
- tsc = ts.getRoomSocketById(int.Parse(data["data"]["socketId"].ToString()));
- fdata = new JsonData();
- fdata["type"] = "Answer";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "Answer";
- fdata["data"]["sdp"] = data["data"]["sdp"];
- fdata["data"]["socketId"] = id;
- tsc.SocketSend(fdata.ToJson());
- break;
- case "sendInfo":
- fdata = new JsonData();
- fdata["type"] = "Room";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "sendInfo";
- fdata["data"]["roomList"] = data["data"]["info"].ToString();
- fdata["data"]["message"] = "用户进入房间";
- ts.SocketSend(fdata.ToJson(), id);
- break;
- case "csj":
- fdata = new JsonData();
- fdata["type"] = "Room";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "csj";
- fdata["data"]["roomList"] = data["data"]["info"].ToString();
- ts.SocketSend(fdata.ToJson(), id);
- break;
- case "firstView":
- fdata = new JsonData();
- fdata["type"] = "View";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "firstView";
- fdata["data"]["pose"] = data["data"]["info"].ToString();
- ts.SocketSend(fdata.ToJson(), id);
- break;
- case "thirdView":
- fdata = new JsonData();
- fdata["type"] = "View";
- fdata["data"] = new JsonData();
- fdata["data"]["method"] = "thirdView";
- fdata["data"]["pose"] = data["data"]["info"].ToString();
- ts.SocketSend(fdata.ToJson(), id);
- break;
- }
- }
- public void SocketSend(string sendStr)
- {
-
- sendData = new byte[1024];
-
- sendData = Encoding.ASCII.GetBytes(sendStr);
- byte[] bb = TClient.int2Bytes(sendData.Length);
- _socket.Send(bb, bb.Length, SocketFlags.None);
- Debug.Log("Client发送的信息给服务器=====》长度" + sendData.Length);
-
- _socket.Send(sendData, sendData.Length, SocketFlags.None);
- Debug.Log("server 向Client==>" + id + "发送的信息=====》" + sendStr);
- }
- }
|