HRESULT MessagePipe::WaitHeader(ITransferrable* &message) 
{
	STATIC_ASSERT(sizeof(MessageType) == sizeof(int));

    if (!isOpen()) return E_ACCESSDENIED;

    HRESULT hr;
    // receive header
	int code;
    if(FAILED(hr = read(&code, sizeof code)))
        return hr;

	message = ResolveMessage(static_cast<MessageType>(code));
	return message == 0 ? E_FAIL : S_OK;
}
Beispiel #2
0
/*
名称: void DataResolve(uint8_t *Data, uint16_t Length)
功能: 数据分解
形参: *Data 数据指针, Length 数据长度
返回值:无
*/ 
void DataResolve(String Data, uint16_t Length)
{
    uint8_t RxDataBuffer[10][BUFFERSIZE] = {0};
    uint16_t RxLength[10] = {0};
    uint16_t Index = 0;
    uint16_t Recv, i;
    static uint8_t End = 0;

    for(i = 0; i < Length; i++)
    {
        Recv = Data[i];

        if(End == 1)
        {
            if(Recv == '\n')
            {
//                RxDataBuffer[Index][0] = RxLength[Index]-1;
                Index++;
            }
            End = 0;
        }
        else
        {
            if(Recv == '\r') End = 1;
            else
            {   
//                if(RxLength[Index] == 0) RxLength[Index]++;
                RxDataBuffer[Index][RxLength[Index]++] = Recv;
                if(RxLength[Index] > BUFFERSIZE-1) RxLength[Index] = 0;
            }
        }
    }

    for(i = 0; i < Index; i++)
    {
        ResolveMessage(RxDataBuffer[i]);
#if 0
        UART3_SendString(RxDataBuffer[i], RxLength[i]);
#endif
    }

    Length = 0;
    Index = 0;
}