示例#1
0
        private void ReceiveForEver()
        {
            while (working)
            {
                try
                {
                    // TODO: 这里只能读取一个buffer大小, 后续优化
                    byte[] bytes    = new byte[1024 * 4];
                    int    bytesRec = _client.Receive(bytes);
                    byte[] data     = new byte[bytesRec];
                    ByteUtils.arraycopy(bytes, 0, data, 0, bytesRec);

                    RawMessage raw = RawMessageEncoder.me.decode(data);
                    if (raw.getMessageType() != (int)RawMessageType.PING_COMMAND)
                    {
                        logger.InfoFormat("receive data is {0}, {1}, {2}", raw.totalLength, raw.messageType, raw.bodyText);
                    }

                    MessageDispatcher.ME.Dispatch(raw);

                    this.anotherRecvCallback?.Invoke(raw);

                    // logger.InfoFormat("Echoed test = {0}", Encoding.ASCII.GetString(bytes, 0, bytesRec));
                }
                catch (Exception e)
                {
                    // logger.ErrorFormat("Receive error", e.Message);
                    logger.Error("Receive error", e);

                    // TODO: 出现错误, 先临时处理 不再接收了
                    working = false;

                    KK.Sleep(50);
                }
            }
        }