예제 #1
0
파일: mqueue.cpp 프로젝트: acat/emule
bool EqualityComparisonFilter::ChannelMessageSeriesEnd(const std::string &channel, int propagation, bool blocking)
{
	unsigned int i = MapChannel(channel);

	if (i == 2)
	{
		OutputMessageSeriesEnd(4, propagation, blocking, channel);
		return false;
	}
	else if (m_mismatchDetected)
		return false;
	else
	{
		MessageQueue &q1 = m_q[i], &q2 = m_q[1-i];

		if (q2.AnyRetrievable() || q2.AnyMessages())
			goto mismatch;
		else if (q2.NumberOfMessageSeries() > 0)
			return Output(2, (const byte *)"\1", 1, 0, blocking) != 0;
		else
			q1.MessageSeriesEnd();

		return false;

mismatch:
		return HandleMismatchDetected(blocking);
	}
}
예제 #2
0
파일: mqueue.cpp 프로젝트: acat/emule
void EqualityComparisonFilter::ChannelInitialize(const std::string &channel, const NameValuePairs &parameters, int propagation)
{
	unsigned int i = MapChannel(channel);

	if (i == 2)
		PropagateInitialize(parameters, propagation, channel);
	else
	{
		m_q[i].Initialize();
		m_mismatchDetected = false;
	}
}
예제 #3
0
파일: mqueue.cpp 프로젝트: acat/emule
unsigned int EqualityComparisonFilter::ChannelPut2(const std::string &channel, const byte *inString, unsigned int length, int messageEnd, bool blocking)
{
	if (!blocking)
		throw BlockingInputOnly("EqualityComparisonFilter");

	unsigned int i = MapChannel(channel);

	if (i == 2)
		return Output(3, inString, length, messageEnd, blocking, channel);
	else if (m_mismatchDetected)
		return 0;
	else
	{
		MessageQueue &q1 = m_q[i], &q2 = m_q[1-i];

		if (q2.AnyMessages() && q2.MaxRetrievable() < length)
			goto mismatch;

		while (length > 0 && q2.AnyRetrievable())
		{
			unsigned int len = length;
			const byte *data = q2.Spy(len);
			len = STDMIN(len, length);
			if (memcmp(inString, data, len) != 0)
				goto mismatch;
			inString += len;
			length -= len;
			q2.Skip(len);
		}

		q1.Put(inString, length);

		if (messageEnd)
		{
			if (q2.AnyRetrievable())
				goto mismatch;
			else if (q2.AnyMessages())
				q2.GetNextMessage();
			else if (q2.NumberOfMessageSeries() > 0)
				goto mismatch;
			else
				q1.MessageEnd();
		}

		return 0;

mismatch:
		return HandleMismatchDetected(blocking);
	}
}
예제 #4
0
파일: main83.c 프로젝트: chenzhengxi/83
INT32S Init2060(void)
{
    INT32S re = 0;
    int32_t point = 0;
    
    Param_Point k[] = {
        {0, 2, { 0, 1}}, {0, 2, { 2, 3}}, {0, 2, { 4, 5}}, {0, 2, { 6, 7}}, {0, 2, { 8, 9}}, {0, 2, {10,11}}, {0, 2, {12,13}}, {0, 2, {14,15}}, 
        {0, 2, {16,17}}, {1, 2, { 0, 1}}, {1, 2, { 2, 3}}, {1, 2, { 4, 5}}, {1, 2, { 6, 7}}, {1, 2, { 8, 9}}, {2, 2, { 0, 1}}, {2, 2, { 2, 3}}, 
        {2, 2, { 4, 5}}, {2, 2, { 6, 7}}, {2, 2, { 8, 9}}, {3, 2, { 0, 1}}, {3, 2, { 2, 3}}, {3, 2, { 4, 5}}, {3, 2, { 6, 7}}, {3, 2, { 8, 9}}};
    InitDataLimit();
    InitRunTimeFlag();
    InitEvent();
    //memset(g_12Param.nMrsPtDataSize, 0, sizeof(INT32S)*_MAX_SIGNAL_CHANNEL_CNT);
    //memset(g_12Param.nMrsPtDataSize,  sizeof(INT32S)*_MAX_SIGNAL_CHANNEL_CNT);
    //memset(g_12Param.nMrsPtDataSize0,  sizeof(INT32S)*_MAX_SIGNAL_CHANNEL_CNT);
    Read12Param(&g_12Param);
    Init83Param(&g_83param,&g_12Param);
    RenewParam(&g_83param,&g_12Param);
    //re = InitNet(g_strHostIP,g_nTcpPort,g_nUdpPort);
    re = AllocMemery(_MAX_DYNAMIC_ARRAY_LTH,g_nTranGroupcnt);
    BuildSignalGroupTable(g_nChannelArrivalSequenceTable);
    MapChannel();
    /*czx add begin
    * init 测点
    */
    g_83param.nMrsPtcnt = 24;
    for(point=0; point<g_83param.nMrsPtcnt; ++point)
    {
        g_83param.nMrsPtTable[point] = point;
        g_83param.nPtMrsNo[point].jkey = k[point].jkey;
        g_83param.nPtMrsNo[point].nChCnt = k[point].nChCnt;
        g_83param.nPtMrsNo[point].channel[0] = k[point].channel[0];
        g_83param.nPtMrsNo[point].channel[1] = k[point].channel[1];
    }
    //OSTaskCreate(receive_channel_data, 0, &TaskStk[4][TASK_STK_SIZE-1], Task1_Prio+PICK_TASK_PRIO);
    //OSTaskCreate(command_analys, 0, &TaskStk[3][TASK_STK_SIZE-1], Task1_Prio+COMMAND_ANALYS_TASK_PRIO);
    //OSTaskCreate(tff, 0, &TaskStk[3][TASK_STK_SIZE-1], Task1_Prio+COMMAND_ANALYS_TASK_PRIO);
    //OpenRealTimeValuePipe();
    return re;
}