void ListenTcpClient(System.IAsyncResult ar) { // bit stream NetBitStream stream = new NetBitStream(); try { // 取得服务器端的Socket // Socket listener = (Socket)ar.AsyncState; // 取得客户端的socket Socket client = _listener.EndAccept(ar); stream._socket = client; // 设置 timeout时间 client.SendTimeout = _sendTimeout; client.ReceiveTimeout = _revTimeout; // 接收从服务器返回的头信息 client.BeginReceive(stream.BYTES, 0, NetBitStream.header_length, SocketFlags.None, new System.AsyncCallback(ReceiveHeader), stream); // 发送消息 建立一个新的连接 PushPacket((ushort)MessageIdentifiers.ID.NEW_INCOMING_CONNECTION, "", client); } catch (System.Exception) { //出现错误 } // 继续接受其它连接 _listener.BeginAccept(new System.AsyncCallback(ListenTcpClient), _listener); }
private void SendControl() { NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)MessageIdentifiers.ID.PLAYER_ACTION); Player p = m_netManager.player; stream.WriteString(p.name); stream.WriteBool(p.first); stream.WriteFloat(p.pos_x); stream.WriteFloat(p.pos_y); stream.WriteFloat(p.hp); stream.WriteInt(p.ctype); int count = CGameManager.Instance.ControlList().Count; stream.WriteInt(count); List <byte> lc = CGameManager.Instance.ControlList(); for (int i = 0; i < count; i++) { stream.WriteByte(lc[i]); } stream.EncodeHeader(); m_netManager.Send(stream); CGameManager.Instance.ControlList().Clear(); }
//向登录服务器发送数据 public void Send(NetBitStream bts) { if (clientSocket == null) { ClientDispatcher.Error("请先连接到服务器!"); return; } if (!clientSocket.Connected) { return; } //创建NetWorkStream NetworkStream ns; //加锁,避免在多线程下出问题 lock (clientSocket) { ns = new NetworkStream(clientSocket); } if (ns.CanWrite) { try { ns.BeginWrite(bts.BYTES, 0, bts.Length, new System.AsyncCallback(SendCallBack), ns); } catch { Disconnect(0); } } }
// 处理消息 public static void ProcessMessage(byte[] Buffer) { var nbs = new NetBitStream(); nbs.BeginRead(Buffer); EProtocolId id = (EProtocolId)nbs.ReadProtocolHeader(); //Debug($"处理协议-> {id} -> {(int)id} ......"); if (EventHandler != null) { EventHandler(Buffer); return; } if (!DictProtocolEvent.TryGetValue(id, out var protocolevent)) { Debug(string.Format("未注册协议-> {0} -> {1} ......", id, (int)id)); return; } try { //处理 protocolevent.ExecuteProtocolEvent(Buffer); } catch (Exception ex) { Error(string.Format("处理协议-> {0} -> {1}出错 ex:{2}", id, (int)id, ex.Message)); } }
private void MSG_CLIENT_LINK_WORLD() { NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); // 从流中读取新登陆玩家状态信息, 并写入 string name; bool first; float pos_x; float pos_y; float hp; int ctype; stream.ReadString(out name); stream.ReadBool(out first); stream.ReadFloat(out pos_x); stream.ReadFloat(out pos_y); stream.ReadFloat(out hp); stream.ReadInt(out ctype); Player p = new Player(name, first, pos_x, pos_y, hp, ctype); playerList.Add(p); CGameManager.Instance.AddPlayer(p); }
// Update is called once per frame public override void Update() { NetPacket packet = null; for (packet = GetPacket(); packet != null;) { ushort msgid = 0; packet.TOID(out msgid); switch (msgid) { case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED: { Debug.Log("连接到服务器"); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED: { Debug.Log("连接服务器失败,请退出"); break; } case (ushort)MessageIdentifiers.ID.CONNCET_LOST: { Debug.Log("丢失服务器的连接,请按任意键退出"); break; } case (ushort)Protocol.ID.LOGIN: { NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.DecodeHeader(); byte[] bs = stream.ReadBodyBytes(); System.IO.MemoryStream mstream = new System.IO.MemoryStream(bs); CommonProto.Response response = ProtoBuf.Serializer.Deserialize <CommonProto.Response>(mstream); Debug.Log("responseid = " + response.id + "; " + response.desc); if (response.id == 0) { LoadingScene.LoadNewScene("demo"); } break; } default: { break; } } packet = null; } }
public void SendChat(string message) { NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT); stream.WriteString(message); stream.EncodeHeader(); m_netManager.Send(stream); }
// Update is called once per frame public override void Update () { NetPacket packet = null; for ( packet = GetPacket(); packet != null; ) { ushort msgid = 0; packet.TOID( out msgid ); switch(msgid) { case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED: { Debug.Log( "连接到服务器" ); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED: { Debug.Log( "连接服务器失败,请退出" ); break; } case (ushort)MessageIdentifiers.ID.CONNCET_LOST: { Debug.Log( "丢失服务器的连接,请按任意键退出" ); break; } case (ushort)Protocol.ID.LOGIN: { NetBitStream stream = new NetBitStream(); stream.BeginRead2( packet ); stream.DecodeHeader(); byte[] bs = stream.ReadBodyBytes(); System.IO.MemoryStream mstream = new System.IO.MemoryStream( bs ); CommonProto.Response response = ProtoBuf.Serializer.Deserialize<CommonProto.Response>( mstream ); Debug.Log( "responseid = "+response.id + "; " + response.desc ); if ( response.id == 0 ) { LoadingScene.LoadNewScene( "demo" ); } break; } default: { break; } } packet = null; } }
// 发送聊天消息 void SendChat() { // 将聊天消息写入NetBitStream对象 NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT); stream.WriteString(_inputString); stream.EncodeHeader(); // 发送给服务器端 mGNManager.Send(stream); //清空_inputString _inputString = ""; }
// 发送聊天消息 void SendChat() { // 将聊天消息写入NetBitStream对象 NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT); stream.WriteString(m_inputString); stream.EncodeHeader(); // 发送给服务器端 m_netManager.Send(stream); //清空m_inputString m_inputString = ""; }
private void MSG_CLIENT_LOGIN_RESPONSE() { bool success; string msg = ""; bool first; float pos_x; float pos_y; float hp; int ctype; NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadBool(out success); stream.ReadString(out msg); //读取用户基本状态信息,并更新信息 stream.ReadBool(out first); stream.ReadFloat(out pos_x); stream.ReadFloat(out pos_y); stream.ReadFloat(out hp); stream.ReadInt(out ctype); //更新用户基本信息 player.name = strUsername; player.first = first; player.pos_x = pos_x; player.pos_y = pos_y; player.hp = hp; player.ctype = ctype; Debug.Log("$$$" + strUsername); Debug.Log(first); Debug.Log(pos_x); Debug.Log(pos_y); Debug.Log(hp); Debug.Log(ctype); if (success) { Debug.Log("登录成功!"); iLoginState = 1; } else { Debug.Log("登录失败!"); iLoginState = 2; } strMessage = msg; }
private void MSG_ID_CHAT() { NetBitStream stream = new NetBitStream(); string recvStr = ""; stream.BeginRead2(packet); stream.ReadString(out recvStr); NetClient.Instance.RecvString = recvStr; //string _name = ""; //foreach (Player p in playerList) //{ // if (p.peer.RemoteEndPoint.ToString().Equals(packet.peer.RemoteEndPoint.ToString())) // { // _name = p.name; // } //} CMenuCallback.Instance.textlist.Add(packet.peer.RemoteEndPoint.ToString() + ": " + recvStr); }
void SendChat2() { NetStructManager.TestStruct chatstr; chatstr.header = 0; chatstr.msgid = (ushort)MessageIdentifiers.ID.ID_CHAT2; chatstr.m = 0.1f; chatstr.n = 1000; chatstr.str = _inputString; byte[] bytes = NetStructManager.GetStructBytes(chatstr); NetBitStream stream = new NetBitStream(); stream.CopyBytes(bytes); mGNManager.Send(stream); //清空_inputString _inputString = ""; }
private void MSG_CLIENT_EXIT_WORLD_RESPONSE() { //to do ,读取流信息, 跟新玩家列表与信息 NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); string name = ""; stream.ReadString(out name); foreach (Player p in playerList) { if (p.name.Equals(name)) { playerList.Remove(p); CGameManager.Instance.RemovePlayer(name); break; } } }
private void MSG_CLIENT_LINK_WORLD_RESPONSE() { bool success; string msg = ""; NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadBool(out success); stream.ReadString(out msg); if (success) { Debug.Log("登入游戏世界成功**"); iGameState = 1; // 从流中读取世界状态信息, 并写入 int count; string name; bool first; float pos_x; float pos_y; float hp; int ctype; stream.ReadInt(out count); for (int i = 0; i < count; i++) { stream.ReadString(out name); stream.ReadBool(out first); stream.ReadFloat(out pos_x); stream.ReadFloat(out pos_y); stream.ReadFloat(out hp); stream.ReadInt(out ctype); Player p = new Player(name, first, pos_x, pos_y, hp, ctype); playerList.Add(p); CGameManager.Instance.InitPlayer(p); } } else { Debug.Log("登录游戏世界失**"); iGameState = 2; } strMessage = msg; }
private static void GateEventHandler(byte[] buffer) { var nbs = new NetBitStream(); nbs.BeginRead(buffer); EProtocolId id = (EProtocolId)nbs.ReadProtocolHeader(); var objMsg = ProtocolDump.Dump(id, buffer); if (objMsg == null) { loger.Error($"错误协议!{id}"); return; } if (ClientDispatcher.DictProtocolEvent.TryGetValue(id, out var protocolevent)) { protocolevent.ExecuteProtocolEvent(buffer); return; } if ((int)id < 100) { return; } long puid = ((ProtocolMsgBase)objMsg).Puid; if (puid == 0 && ((ProtocolMsgBase)objMsg).RspPuids.Count == 0) { loger.Error($"发送客户端消息错误,无发送目标!"); return; } List <long> rspId = new List <long>(); if (puid != 0) { rspId.Add(puid); } if (((ProtocolMsgBase)objMsg).RspPuids.Count > 0) { rspId.AddRange(((ProtocolMsgBase)objMsg).RspPuids); } SendMsg(objMsg, rspId); }
private static void GameEventHandler(byte[] buffer) { var nbs = new NetBitStream(); nbs.BeginRead(buffer); EProtocolId id = (EProtocolId)nbs.ReadProtocolHeader(); var objMsg = ProtocolDump.Dump(id, buffer); if (objMsg == null) { loger.Error($"错误协议!{id}"); return; } if (id == EProtocolId.S2C_SERVER_CONNECT) { var rsp = new C2S_Server_Connect() { SessionType = (short)BaseServerInfo.SessionType }; Dispatcher.SendByServerID(((S2C_Server_Connect)objMsg).ServerID, rsp); return; } if ((int)id < 100) { return; } if (!ClientDispatcher.DictProtocolEvent.TryGetValue(id, out var protocolevent)) { loger.Debug(string.Format("未注册协议-> {0} -> {1} ......", id, (int)id)); return; } try { //处理 protocolevent.ExecuteProtocolEvent(buffer); } catch (Exception ex) { loger.Error(string.Format("处理协议-> {0} -> {1}出错 ex:{2}", id, (int)id, ex.Message)); } }
public void Login(string name,string pwd) { Debug.Log( "name = " + name + "; pwd = " + pwd ); NetBitStream stream = new NetBitStream(); stream.BeginWrite( (ushort)Protocol.ID.LOGIN ); LoginProto.Login login = new LoginProto.Login(); login.name = name; login.pwd = pwd; System.IO.MemoryStream mstream = new System.IO.MemoryStream(); ProtoBuf.Serializer.Serialize<LoginProto.Login>( mstream, login ); byte[] bs = mstream.ToArray(); stream.WriteBodyBytes( bs ); stream.EncodeHeader(); _SvrMgr.Send( stream ); }
public void Send(NetBitStream bts, Socket peer) { NetworkStream ns; lock (peer) { ns = new NetworkStream(peer); } if (ns.CanWrite) { try { ns.BeginWrite(bts.BYTES, 0, bts.Length, new System.AsyncCallback(SendCallback), ns); } catch (System.Exception) { PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_LOST, "", peer); } } }
void SendChat2() { NetStructManager.TestStruct chatstr; chatstr.header = 0; chatstr.msgid = (ushort)MessageIdentifiers.ID.ID_CHAT2; chatstr.m = 0.1f; chatstr.n = 1000; chatstr.str = m_inputString; byte[] bytes = NetStructManager.getBytes(chatstr); NetBitStream stream = new NetBitStream(); stream.CopyBytes(bytes); m_netManager.Send(stream); //清空m_inputString m_inputString = ""; }
private void MSG_CLIENT_REGISTER_RESPONSE() { bool success; string msg = ""; NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadBool(out success); stream.ReadString(out msg); if (success) { Debug.Log("注册成功!"); iRegisterState = 1; } else { Debug.Log("注册失败!"); iRegisterState = 2; } strMessage = msg; }
public void Login(string name, string pwd) { Debug.Log("name = " + name + "; pwd = " + pwd); NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)Protocol.ID.LOGIN); LoginProto.Login login = new LoginProto.Login(); login.name = name; login.pwd = pwd; System.IO.MemoryStream mstream = new System.IO.MemoryStream(); ProtoBuf.Serializer.Serialize <LoginProto.Login>(mstream, login); byte[] bs = mstream.ToArray(); stream.WriteBodyBytes(bs); stream.EncodeHeader(); _SvrMgr.Send(stream); }
public void Input() { while (true) { string str = System.Console.ReadLine(); if (str.CompareTo("quit") == 0) { client.Disconnect(0); NetThread.Abort(); break; } else { /* * NetBitStream stream = new NetBitStream(); * stream.BeginWrite((ushort)MessageIdentifiers.ID.ID_CHAT); * stream.WriteString(str); * stream.EncodeHeader(); * * client.Send(stream); */ NetStructManager.TestStruct chatstr; chatstr.header = 0; chatstr.msgid = (ushort)MessageIdentifiers.ID.ID_CHAT2; chatstr.m = 0.1f; chatstr.n = 100; chatstr.str = str; byte[] bs = NetStructManager.getBytes(chatstr); //NetStructManager.EncoderHeader(ref bs); NetBitStream stream = new NetBitStream(); stream.CopyBytes(bs); client.Send(stream); } } }
public bool Login(string username, string password, out string msg) { if (false == m_netManager.bConnected) { msg = "无法连接到服务器,请稍后重试!"; return(false); } m_netManager.iLoginState = 0; NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)MessageIdentifiers.ID.CLIENT_LOGIN); stream.WriteString(username + "&" + password); stream.EncodeHeader(); m_netManager.Send(stream); msg = ""; Stopwatch sw = new Stopwatch(); sw.Start(); while (0 == m_netManager.iLoginState) { m_netManager.Update(); long time = sw.ElapsedMilliseconds; if (time > 5000) { break; } } sw.Stop(); if (1 == m_netManager.iLoginState) { msg = m_netManager.strMessage; m_netManager.strUsername = username; return(true);; } msg = m_netManager.strMessage; return(false); }
public bool LinkWorld(out string msg) { if (false == m_netManager.bConnected) { msg = "无法连接到服务器,请稍后重试!"; return(false); } m_netManager.iGameState = 0; NetBitStream stream = new NetBitStream(); stream.BeginWrite((ushort)MessageIdentifiers.ID.CLIENT_LINK_WORLD); stream.WriteString(m_netManager.strUsername); stream.WriteInt(m_netManager.player.ctype); stream.EncodeHeader(); m_netManager.Send(stream); msg = ""; Stopwatch sw = new Stopwatch(); sw.Start(); while (0 == m_netManager.iGameState) { m_netManager.Update(); long time = sw.ElapsedMilliseconds; if (time > 5000) { break; } } sw.Stop(); if (1 == m_netManager.iGameState) { msg = m_netManager.strMessage; return(true);; } msg = m_netManager.strMessage; return(false); }
// 发送消息 public void Send(NetBitStream bts) { if (!_socket.Connected) return; NetworkStream ns; lock (_socket) { ns = new NetworkStream(_socket); } if (ns.CanWrite) { try { ns.BeginWrite(bts.BYTES, 0, bts.Length, new System.AsyncCallback(SendCallback), ns); } catch (System.Exception) { PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_LOST, ""); Disconnect(0); } } }
static void Main(string[] args) { ushort id = 10; byte n = 0; bool b = false; int vint = 100; uint vint2 = 999; short vshort = 10; ushort vshort2 = 101; float number = 0.8f; string data = "我是中国人"; NetBitStream stream = new NetBitStream(); stream.BeginWrite(id); stream.WriteByte(n); stream.WriteBool(b); stream.WriteInt(vint); stream.WriteUInt(vint2); stream.WriteShort(vshort); stream.WriteUShort(vshort2); stream.WriteFloat(number); stream.WriteString(data); stream.EncodeHeader(); NetPacket packet = new NetPacket(); packet.CopyBytes(stream); NetBitStream stream2 = new NetBitStream(); stream2.BeginRead(packet, out id); stream2.ReadByte(out n); stream2.ReadBool(out b); stream2.ReadInt(out vint); stream2.ReadUInt(out vint2); stream2.ReadShort(out vshort); stream2.ReadUShort(out vshort2); stream2.ReadFloat(out number); stream2.ReadString(out data); System.Console.WriteLine(id); System.Console.WriteLine(n); System.Console.WriteLine(b); System.Console.WriteLine(vint); System.Console.WriteLine(vint2); System.Console.WriteLine(vshort); System.Console.WriteLine(vshort2); System.Console.WriteLine(number); System.Console.WriteLine(data); NetStructManager.TestStruct cif; cif.header = 10; cif.msgid = 5; cif.m = 0.9f; cif.n = 10; cif.str = "hello"; byte[] bs = NetStructManager.getBytes(cif); NetStructManager.EncoderHeader(ref bs); NetStructManager.TestStruct cif2; System.Type type = typeof(NetStructManager.TestStruct); cif2 = (NetStructManager.TestStruct)NetStructManager.fromBytes(bs, type); System.Console.WriteLine(":" + bs.Length); System.Console.WriteLine(":" + cif2.header); System.Console.WriteLine(cif2.msgid); System.Console.WriteLine(cif2.m); System.Console.WriteLine(cif2.n); System.Console.WriteLine(cif2.str); ChatClient client = new ChatClient(); client.Start(); client.Update(); }
// 从数据流中拷贝数据 public void CopyBytes(NetBitStream stream) { stream.BYTES.CopyTo(_bytes, 0); _length = stream.Length; }
public void Send( NetBitStream stream ) { client.Send( stream ); }
public override void Update() { NetPacket packet = null; while (true) { for (packet = GetPacket(); packet != null;) { // 获得消息ID ushort msgid = 0; packet.TOID(out msgid); switch (msgid) { case (ushort)MessageIdentifiers.ID.NEW_INCOMING_CONNECTION: { System.Console.WriteLine("新的连接:" + packet._peer.RemoteEndPoint.ToString()); _socketList.Add(packet._peer); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_LOST: { System.Console.WriteLine("一个用户退出"); _socketList.Remove(packet._peer); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT: { string chatdata = ""; // 读取聊天消息 NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadString(out chatdata); stream.EncodeHeader(); // 群发聊天消息 for (int i = 0; i < _socketList.Count; i++) { Socket sk = (Socket)_socketList[i]; if (sk == packet._peer) { continue; } _server.Send(stream, sk); } //System.Console.WriteLine("收到消息:" + chatdata); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT2: { // 读取聊天消息 NetStructManager.TestStruct chatstr; chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct)); System.Console.WriteLine("header:" + chatstr.header); System.Console.WriteLine("msgid:" + chatstr.msgid); System.Console.WriteLine("m:" + chatstr.n); System.Console.WriteLine("n:" + chatstr.m); System.Console.WriteLine("str:" + chatstr.str); NetBitStream stream = new NetBitStream(); stream.CopyBytes(packet._bytes); // 群发聊天消息 for (int i = 0; i < _socketList.Count; i++) { Socket sk = (Socket)_socketList[i]; if (sk == packet._peer) { continue; } _server.Send(stream, sk); } break; } default: { // 错误 break; } } packet = null; } // end fore } // end while }
public override void Update() { NetPacket packet = null; while (true) { for (packet = GetPacket(); packet != null; ) { // 获得消息ID ushort msgid = 0; packet.TOID(out msgid); switch (msgid) { case (ushort)MessageIdentifiers.ID.NEW_INCOMING_CONNECTION: { System.Console.WriteLine("新的连接:" + packet._peer.RemoteEndPoint.ToString()); _socketList.Add(packet._peer); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_LOST: { System.Console.WriteLine("一个用户退出"); _socketList.Remove(packet._peer); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT: { string chatdata = ""; // 读取聊天消息 NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadString(out chatdata); stream.EncodeHeader(); // 群发聊天消息 for (int i = 0; i < _socketList.Count; i++) { Socket sk = (Socket)_socketList[i]; if (sk == packet._peer) continue; _server.Send(stream, sk); } System.Console.WriteLine("收到消息:" + chatdata); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT2: { // 读取聊天消息 NetStructManager.TestStruct chatstr; chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct)); System.Console.WriteLine("header:" + chatstr.header); System.Console.WriteLine("msgid:" + chatstr.msgid); System.Console.WriteLine("m:" + chatstr.n); System.Console.WriteLine("n:" + chatstr.m); System.Console.WriteLine("str:" + chatstr.str); NetBitStream stream = new NetBitStream(); stream.CopyBytes(packet._bytes); // 群发聊天消息 for (int i = 0; i < _socketList.Count; i++) { Socket sk = (Socket)_socketList[i]; if (sk == packet._peer) continue; _server.Send(stream, sk); } break; } default: { // 错误 break; } } packet = null; }// end fore }// end while }
public override void Update() { NetPacket packet = null; while (true) { for (packet = GetPacket(); packet != null;) { ushort msgid = 0; packet.TOID(out msgid); switch (msgid) { case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED: { System.Console.WriteLine("连接到服务器"); NetThread = new System.Threading.Thread(new System.Threading.ThreadStart(Input)); NetThread.Start(); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED: { System.Console.WriteLine("连接服务器失败,请按任意键退出"); System.Console.Read(); return; } case (ushort)MessageIdentifiers.ID.CONNECTION_LOST: { System.Console.WriteLine("丢失与服务器的连接,请按任意键退出"); System.Console.Read(); return; } case (ushort)MessageIdentifiers.ID.ID_CHAT: { string chatdata = ""; NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadString(out chatdata); System.Console.WriteLine("收到消息:" + chatdata); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT2: { NetStructManager.TestStruct chatstr; chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct)); System.Console.WriteLine("收到消息:" + chatstr.str); break; } default: { // 错误 break; } } packet = null; } // end fore } // end while }
// 异步连接回调 void ConnectionCallback(System.IAsyncResult ar) { NetBitStream stream = new NetBitStream(); // 获得服务器socket stream._socket = (Socket)ar.AsyncState; try { // 与服务器取得连接 _socket.EndConnect(ar); // 设置timeout _socket.SendTimeout = _sendTimeout; _socket.ReceiveTimeout = _revTimeout; // 向Network Manager传递消息 PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED, ""); // 接收从服务器返回的头信息 _socket.BeginReceive(stream.BYTES, 0, NetBitStream.header_length, SocketFlags.None, new System.AsyncCallback(ReceiveHeader), stream); } catch (System.Exception e) { // 错误处理 if (e.GetType() == typeof(SocketException)) { if (((SocketException)e).SocketErrorCode == SocketError.ConnectionRefused) { PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED, e.Message); } else { PushPacket((ushort)MessageIdentifiers.ID.CONNECTION_LOST, e.Message); } } Disconnect(0); } }
// 向Network Manager的队列传递数据 void PushPacket2(NetBitStream stream) { NetPacket packet = new NetPacket(); stream.BYTES.CopyTo(packet._bytes, 0); packet._peer = stream._socket; _netMgr.AddPacket(packet); }
private void MSG_PLAYER_ACTION() { //读取流信息,更新玩家状态 NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); string name; bool first; float pos_x; float pos_y; float hp; int ctype; stream.ReadString(out name); stream.ReadBool(out first); stream.ReadFloat(out pos_x); stream.ReadFloat(out pos_y); stream.ReadFloat(out hp); stream.ReadInt(out ctype); Player player = null; foreach (Player p in playerList) { if (p.name.Equals(name)) { player = p; } } player.name = name; player.first = first; player.pos_x = pos_x; player.pos_y = pos_y; player.hp = hp; player.ctype = ctype; List <byte> lc = new List <byte>(); int count; stream.ReadInt(out count); for (int i = 0; i < count; i++) { byte b; stream.ReadByte(out b); lc.Add(b); } //传递控制信息 CGameManager.Instance.UpdateControl(name, lc); Debug.Log("recv control ****"); Debug.Log(name); Debug.Log(first); Debug.Log(pos_x); Debug.Log(pos_y); Debug.Log(hp); Debug.Log(ctype); string str = ""; foreach (byte b in lc) { str += b + "-"; } Debug.Log(str); }
public void Send(NetBitStream stream) { client.Send(stream); }
public override void Update() { NetPacket packet = null; for (packet = GetPacket(); packet != null; ) { ushort msgid = 0; packet.TOID(out msgid); switch (msgid) { case (ushort)MessageIdentifiers.ID.CONNECTION_REQUEST_ACCEPTED: { Debug.Log("连接到服务器"); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_ATTEMPT_FAILED: { Debug.Log("连接服务器失败,请退出" + packet._error); break; } case (ushort)MessageIdentifiers.ID.CONNECTION_LOST: { Debug.Log("失与服务器的连接,请按任意键退出" + packet._error); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT: { NetBitStream stream = new NetBitStream(); stream.BeginRead2(packet); stream.ReadString(out GameClient.Instance._revString); break; } case (ushort)MessageIdentifiers.ID.ID_CHAT2: { NetStructManager.TestStruct chatstr; chatstr = (NetStructManager.TestStruct)NetStructManager.fromBytes(packet._bytes, typeof(NetStructManager.TestStruct)); GameClient.Instance._revString = chatstr.str; Debug.Log(chatstr.header); Debug.Log(chatstr.msgid); Debug.Log(chatstr.m); Debug.Log(chatstr.n); Debug.Log(chatstr.str); break; } default: { // 错误 break; } }// end switch // 销毁数据包 packet = null; }// end for }