2015-01-16 4 views
0

코딩이 새로 생겼으며 C#으로 작성된 오픈 소스 IRC 봇을 편집하고 있습니다. 서버는 매 30 초마다 20 개의 메시지 제한을 설정합니다. 나는 봇이 이미 C# messageQueue를 사용하고 있다고 생각하지만 어떻게 동작하는지 이해하지 못합니다. 나는 누군가가 나를 서버 한계에 맞게 편집하도록 도와 줄 수 있는지 궁금해하고 있었다. 봇은 sendMessage를 사용하여 int 우선 순위의 문자열 메시지를 보냅니다. 미리 시간을내어 주셔서 감사합니다.메시지 큐 시스템 편집에 대한 도움이 필요합니다.

private Timer messageQueue; 

messageQueue = new Timer(handleMessageQueue, null, 0, 4000);  

private void handleMessageQueue(Object state) 
    { 
     String message; 
     //Console.WriteLine("Entering Message Queue. Time: " + DateTime.Now); 
     if (highPriority.TryDequeue(out message)) 
     { 
      print(nick + ": " + message); 
      sendRaw("PRIVMSG " + channel + " :" + message); 
      messageQueue.Change(4000, Timeout.Infinite); 
     } 
     else if (normalPriority.TryDequeue(out message)) 
     { 
      print(nick + ": " + message); 
      sendRaw("PRIVMSG " + channel + " :" + message); 
      messageQueue.Change(4000, Timeout.Infinite); 
     } 
     else if (lowPriority.TryDequeue(out message)) 
     { 
      print(nick + ": " + message); 
      sendRaw("PRIVMSG " + channel + " :" + message); 
      messageQueue.Change(4000, Timeout.Infinite); 
     } 
     else messageQueue.Change(4000, Timeout.Infinite); 
    } 

    private void sendMessage(String message, int priority) 
    { 
     if (priority == 1) 
     { 
      highPriority.Enqueue(message); 
     } 
     else if (priority == 2) 
     { 
      normalPriority.Enqueue(message); 
     } 
     else lowPriority.Enqueue(message); 
    } 

편집 : 코드에 messageQueue 시스템이 없다고 들었습니다. 여기에 소스가 있습니다 : http://sourceforge.net/p/twitchmodbot/source/ci/master/tree/ModBot/ 위의 코드는 Irc.cs에 있습니다.

+1

수정할 오픈 소스 프로젝트를 언급하고 링크해야합니다. 여기에있는 코드 블록을 한눈에 보면 큐에서 처리 할 메시지의 수에 대한 할당량이나 제한 사항이 없습니다. 어쩌면 제한은 대기열 구현 자체 또는 다른 곳에서 발생할 수 있습니다. – Bishoy

+0

이것은 전체 메시지 소스이므로 대기열 시스템이없는 것 같습니다. 코드에서 messageQueue를 보았습니다. 나는 그것에 대한 링크가있는 게시물을 편집 할 것이다. – Jan

+0

코드에 'highPriority','normalPriority','lowPriority'라는 대기열이 있습니다. 그러나 당신은 질문하지 않았습니다. – zerkms

답변

0

코드 스 니펫에서 대기열 처리는 타이머를 사용하여 수행됩니다.

private Timer messageQueue; 
messageQueue = new Timer(handleMessageQueue, null, 0, 4000);  

는 handleMessageQueue 방법 한번씩 4000 밀리 초 (4 초) 메시지 큐를 처리하기 위해 호출 될 것임을 의미한다.

여기에 사용 된 타이머 생성자에 대한 documentation입니다.

난 여기가 인용합니다 :

콜백 : : 방법을 나타내는 TimerCallback 대리자를 실행하는

public Timer(
    TimerCallback callback, 
    Object state, 
    long dueTime, 
    long period 
) 

매개 변수는 다음과 같이 설명합니다.

상태 : 콜백 메소드에서 사용할 정보가 들어있는 객체 또는 null입니다.

dueTime : 콜백을 호출하기 전에 지연되는 시간 (밀리 초 단위). 타이머가 시작되지 않도록 Timeout.Infinite를 지정하십시오. 타이머를 즉시 시작하려면 0을 지정하십시오.

기간 : 콜백 호출 간격 (밀리 초). 정기 신호를 사용하지 않으려면 Timeout.Infinite를 지정하십시오.

단순히 타이머 간격을 더 낮은 값으로 변경하면 대기열을 더 자주 처리하므로 처리량이 증가합니다.

관련 문제