/// <summary> /// 读取消息 /// </summary> void OnRead(IAsyncResult asr) { int bytesRead = 0; try { lock (client.GetStream()) { //读取字节流到缓冲区 bytesRead = client.GetStream().EndRead(asr); } if (bytesRead < 1) { //包尺寸有问题,断线处理 OnDisconnected(DisType.Disconnect, "bytesRead < 1"); return; } byte[] lenBytes = new byte[bytesRead - sizeof(ushort)]; Array.Copy(byteBuffer, sizeof(ushort), lenBytes, 0, bytesRead - sizeof(ushort)); PlazaSessionCode sessionCode = (PlazaSessionCode)Serial.GetInstance.Decode(lenBytes, 0, lenBytes.Length); MessageOperate msgOperate = new MessageOperate(); msgOperate.MainPackHanlder(sessionCode.MainCmdId, sessionCode); lock (client.GetStream()) { //分析完,再次监听服务器发过来的新消息 Array.Clear(byteBuffer, 0, byteBuffer.Length); //清空数组 client.GetStream().BeginRead(byteBuffer, 0, MAX_READ, new AsyncCallback(OnRead), client); } } catch (Exception ex) { Console.WriteLine(ex.Message); //PrintBytes(); OnDisconnected(DisType.Exception, ex.Message); } }
public void MainPackHanlder(int op, PlazaSessionCode code) { if (mainPack.ContainsKey(op)) { mainPack[op](code.SubCmdId, code.GetBytes); } }
private void ReceiveCb(IAsyncResult ar) { PlazaSession plazaSession = (PlazaSession)ar.AsyncState; int bytesRead = 0; try { lock (plazaSession.client.GetStream()) { //读取字节流到缓冲区 bytesRead = plazaSession.client.GetStream().EndRead(ar); } if (bytesRead < 1) { //包尺寸有问题,断线处理 //OnDisconnected(DisType.Disconnect, "bytesRead < 1"); return; } byte[] lenBytes = new byte[bytesRead - sizeof(ushort)]; Array.Copy(plazaSession.byteBuffer, sizeof(ushort), lenBytes, 0, bytesRead - sizeof(ushort)); PlazaSessionCode sessionCode = (PlazaSessionCode)serial.Decode(lenBytes, 0, lenBytes.Length); MessageOperate msgOperate = new MessageOperate(); msgOperate.MainPackHanlder(sessionCode.MainCmdId, sessionCode, plazaSession); //ByteBuffer buff = new ByteBuffer(sessionCode.message.byteBuffer); //Console.WriteLine(sessionCode.message.mainCmdId); //Console.WriteLine(sessionCode.message.subCmdId); //string w = buff.ReadString(); //string q = buff.ReadString(); //Console.WriteLine(w); //Console.WriteLine(q); //OnReceive(byteBuffer, bytesRead); //分析数据包内容,抛给逻辑层 lock (plazaSession.client.GetStream()) { //分析完,再次监听服务器发过来的新消息 Array.Clear(plazaSession.byteBuffer, 0, plazaSession.byteBuffer.Length); //清空数组 plazaSession.client.GetStream().BeginRead(plazaSession.byteBuffer, 0, plazaSession.GetMaxRead(), new AsyncCallback(ReceiveCb), plazaSession); } } catch (Exception ex) { //PrintBytes(); //OnDisconnected(DisType.Exception, ex.Message); } }