void ReadAsync(IAsyncResult result) { try { int readCount = stream.EndRead(result); if (readCount == 0) { throw new Exception("读取到0字节"); } NetMsgData receive = NetUtilcs.UnpackNetMsg(buffer); this.mRecvingMsgQueue.Enqueue(receive); //string msg = Encoding.UTF8.GetString(buffer, 0, readCount); Debug.Log("接收到消息 -> " + receive.ProtoId); lock (stream) //再次开启读取 { Array.Clear(buffer, 0, buffer.Length); stream.BeginRead(buffer, 0, BuffseSize, ReadAsync, null); } } catch (Exception e) { Console.WriteLine(e.Message); } }
//发送消息到服务器 public void SendMsg(ProtoDefine protoType, IExtensible protoData) { //byte[] temp = Encoding.UTF8.GetBytes(msg); NetMsgData msg = NetMsgData.GetMsgData(protoType, protoData); byte[] data = NetUtilcs.PackNetMsg(msg); stream.Write(data, 0, data.Length); Debug.Log("发送消息 -> " + msg.ProtoId + data); }
void Send() { while (this.mIsRunning) { if (mSendingMsgQueue.Count == 0) { lock (this.mSendLock) { while (this.mSendWaitingMsgQueue.Count == 0) { Monitor.Wait(this.mSendLock); } Queue <NetMsgData> temp = this.mSendingMsgQueue; this.mSendingMsgQueue = this.mSendWaitingMsgQueue; this.mSendWaitingMsgQueue = temp; } } else { try { NetMsgData msg = this.mSendingMsgQueue.Dequeue(); byte[] data = NetUtilcs.PackNetMsg(msg); mSocket.Send(data, data.Length, SocketFlags.None); Debug.Log("client send: " + (ProtoDefine)msg.ProtoId); } catch (System.Exception e) { Debug.LogError(e.Message); Disconnect(); } } } this.mSendingMsgQueue.Clear(); this.mSendWaitingMsgQueue.Clear(); }
void Receive() { byte[] data = new byte[1024]; while (this.mIsRunning) { try { //将收到的数据取出来 int len = mSocket.Receive(data); NetMsgData receive = NetUtilcs.UnpackNetMsg(data); Debug.Log("client receive : " + (ProtoDefine)receive.ProtoId); lock (this.mRecvLock) { this.mRecvWaitingMsgQueue.Enqueue(receive); } } catch (System.Exception e) { Debug.LogError(e.Message); Disconnect(); } } }