Exemple #1
0
    /// <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);
        }
    }
Exemple #2
0
 public void MainPackHanlder(int op, PlazaSessionCode code)
 {
     if (mainPack.ContainsKey(op))
     {
         mainPack[op](code.SubCmdId, code.GetBytes);
     }
 }
Exemple #3
0
        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);
            }
        }