Changeset 359

Show
Ignore:
Timestamp:
01/17/08 02:50:12 (12 months ago)
Author:
tomoyo
Message:

トピックに設定した正規表現でマッチしたものだけを流す機能を追加。

Location:
TwitterIrcGateway/TwitterIrcGatewayCore
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • TwitterIrcGateway/TwitterIrcGatewayCore/Group.cs

    r65 r359  
    6262    public class Group : IComparable 
    6363    { 
    64         public String Name; 
    65         public String Mode; 
    66         public List<String> Members; 
    67         public Boolean IsJoined = false; 
     64        public String Name { get; set; } 
     65        public String Mode { get; set; } 
     66        public List<String> Members { get; set; } 
     67        public Boolean IsJoined { get; set; } 
     68        public String Topic { get; set; } 
    6869 
    6970        public Group() 
  • TwitterIrcGateway/TwitterIrcGatewayCore/IRCClient/IRCMessage.cs

    r47 r359  
    559559                private String _channel; 
    560560 
     561        public String Topic 
     562        { 
     563                        get { return _topic; } 
     564                        set { _topic = value; } 
     565        } 
     566 
     567        public String Channel 
     568        { 
     569            get { return _channel; } 
     570            set { _channel = value; } 
     571        } 
     572         
    561573                public 
    562574                TopicMessage() : base() 
  • TwitterIrcGateway/TwitterIrcGatewayCore/Session.cs

    r357 r359  
    6666            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_LIST); 
    6767            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TIGGC); 
     68            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TOPIC); 
    6869 
    6970            _groups = new Groups(); 
     
    407408                    SendNumericReply(NumericReply.RPL_ENDOFNAMES, channelName, "End of NAMES list"); 
    408409                    group.IsJoined = true; 
     410                     
     411                    // Set topic of client, if topic was set 
     412                    Send(new TopicMessage(channelName, group.Topic)); 
    409413                } 
    410414            } 
     
    793797        } 
    794798 
    795         private void MessageRecieved_TIGGC(object sender, MessageRecievedEventArgs e) 
     799        void MessageRecieved_TIGGC(object sender, MessageRecievedEventArgs e) 
    796800        { 
    797801            if (String.Compare(e.Message.Command, "TIGGC", true) != 0) return; 
     
    800804            SendTwitterGatewayServerMessage(String.Format("Garbage Collect: {0:###,##0} bytes -> {1:###,##0} bytes", memUsage, GC.GetTotalMemory(false))); 
    801805        } 
     806 
     807        void MessageRecieved_TOPIC(object sender, MessageRecievedEventArgs e) 
     808        { 
     809            if (String.Compare(e.Message.Command, "TOPIC", true) != 0) return; 
     810            TopicMessage topicMsg = e.Message as TopicMessage; 
     811 
     812            // client -> server (TOPIC #Channel :Topic Msg) && channel name != server primary channel(ex.#Twitter) 
     813            if (!String.IsNullOrEmpty(topicMsg.Topic) && (String.Compare(topicMsg.Channel, _server.ChannelName, true) != 0)) 
     814            { 
     815                // Set channel topic 
     816                Group group = GetGroupByChannelName(topicMsg.Channel); 
     817                group.Topic = topicMsg.Topic; 
     818                SaveGroups(); 
     819                 
     820                // server -> client (set client topic) 
     821                Send(new TopicMessage(topicMsg.Channel, topicMsg.Topic){ 
     822                    Sender = _clientHost 
     823                }); 
     824            } 
     825        } 
     826 
    802827        #endregion 
    803828 
     
    11201145                    foreach (Group group in _groups.Values) 
    11211146                    { 
    1122                         if (group.IsJoined && group.Exists(status.User.ScreenName)) 
     1147                        if (!group.IsJoined) 
     1148                            continue; 
     1149 
     1150                        Boolean isMatched = String.IsNullOrEmpty(group.Topic) ? true : Regex.IsMatch(line, group.Topic); 
     1151                         
     1152                        // 1: member exists in channel && match regex 
     1153                        // 2: no members in channel(self only) && match regex 
     1154                        if ((group.Exists(status.User.ScreenName) || group.Members.Count == 1) && isMatched) 
    11231155                        { 
    11241156                            switch (filterArgs.IRCMessageType.ToUpperInvariant())