new public void Dispose()
        {
            if (_disposables == null)
            {
                return;
            }

            _disposables.Dispose();
            _disposables = null;

            _sentMessages.OnCompleted();
            _sentMessages.Dispose();
            _sentMessages = null;
            _internalReceivedMessages.OnCompleted();
            _internalReceivedMessages.Dispose();
            _internalReceivedMessages = null;
            _messages.OnCompleted();
            _messages.Dispose();
            _messages = null;

            _users.Do(u => u.Dispose());
            _users.Clear();
            _users = null;
            _channels.Do(c => c.Dispose());
            _channels.Clear();
            _channels = null;
            _networks.Do(n => n.Dispose());
            _networks.Clear();
            _networks = null;

            base.Dispose();
        }
예제 #2
0
        public void Dispose()
        {
            if (Name == null)
            {
                return;
            }

            Name.Dispose();
            Name = null;
            Modes.Dispose();
            Modes = null;
            Topic.Dispose();
            Topic = null;
            TopicSetBy.Dispose();
            TopicSetBy = null;
            TopicSetDate.Dispose();
            TopicSetDate = null;
            CreatedDate.Dispose();
            CreatedDate = null;
            _knownUsers.Do(u => u.Dispose());
            _knownUsers.Clear();
            _knownUsers.Dispose();
            _knownUsers = null;
            _users.Clear();
            _users.Dispose();
            _users = null;
        }
예제 #3
0
        public void Dispose()
        {
            if (Name == null)
            {
                return;
            }

            Name.Dispose();
            Name = null;
            Away.Dispose();
            Away = null;
            Modes.Dispose();
            Modes = null;
            Network.Dispose();
            Network = null;
            RealName.Dispose();
            RealName = null;
            Identity.Dispose();
            Identity = null;
            _knownChannels.Clear();
            _knownChannels.Dispose();
            _knownChannels = null;
            _channels.Clear();
            _channels.Dispose();
            _channels = null;
        }
예제 #4
0
        ClientRuntime(string contractName, string contractNamespace, SharedRuntimeState shared)
        {
            this.contractName      = contractName;
            this.contractNamespace = contractNamespace;
            this.shared            = shared;

            OperationCollection operations = new OperationCollection(this);

            this.operations     = operations;
            channelInitializers = new ProxyBehaviorCollection <IChannelInitializer>(this);
            messageInspectors   = new ProxyBehaviorCollection <IClientMessageInspector>(this);

            unhandled = new ClientOperation(this, "*", MessageHeaders.WildcardAction, MessageHeaders.WildcardAction);
            unhandled.InternalFormatter = new MessageOperationFormatter();
            maxFaultSize = TransportDefaults.MaxFaultSize;
        }
예제 #5
0
        public Channel(IClientConnection connection, String name, SynchronizationContext context)
        {
            _context    = context;
            _users      = new SynchronizedKeyedCollection <String, IChannelUser>(_context);
            _knownUsers = new SynchronizedKeyedCollection <String, IChannelUser>(_context);

            Connection   = connection;
            Name         = new ObservableProperty <String>(name);
            Modes        = new Mode();
            Topic        = new ObservableProperty <String>(String.Empty);
            TopicSetBy   = new ObservableProperty <IUser>(null);
            TopicSetDate = new ObservableProperty <uint>(0);
            CreatedDate  = new ObservableProperty <uint>(0);

            ReceivedMessages = connection.ReceivedMessages
                               .Where(m => m.Receiver.Equals(this))
            ;
        }
예제 #6
0
        public Channel(IClientConnection connection, String name, SynchronizationContext context)
        {
            _context = context;
            _users = new SynchronizedKeyedCollection<String, IChannelUser>(_context);
            _knownUsers = new SynchronizedKeyedCollection<String, IChannelUser>(_context);

            Connection = connection;
            Name = new ObservableProperty<String>(name);
            Modes = new Mode();
            Topic = new ObservableProperty<String>(String.Empty);
            TopicSetBy = new ObservableProperty<IUser>(null);
            TopicSetDate = new ObservableProperty<uint>(0);
            CreatedDate = new ObservableProperty<uint>(0);

            ReceivedMessages = connection.ReceivedMessages
                .Where(m => m.Receiver.Equals(this))
                ;
        }
예제 #7
0
        public User(IClientConnection connection, String name, SynchronizationContext context)
        {
            _context       = context;
            _channels      = new SynchronizedKeyedCollection <String, IChannel>(_context);
            _knownChannels = new SynchronizedKeyedCollection <String, IChannel>(_context);

            Connection = connection;
            Identity   = new Identity(name, null, null);
            RealName   = new ObservableProperty <String>(String.Empty);
            Network    = new ObservableProperty <INetwork>(null);
            Modes      = new Mode();
            Away       = new ObservableProperty <bool>(false);
            Name       = new ObservableProperty <String>(name);

            ReceivedMessages = connection.ReceivedMessages
                               .Where(m => m.Receiver.Equals(this))
            ;
            SentMessages = connection.ReceivedMessages
                           .Where(m => m.Sender.Equals(this))
            ;
        }
예제 #8
0
파일: User.cs 프로젝트: Gohla/ReactiveIRC
        public User(IClientConnection connection, String name, SynchronizationContext context)
        {
            _context = context;
            _channels = new SynchronizedKeyedCollection<String, IChannel>(_context);
            _knownChannels = new SynchronizedKeyedCollection<String, IChannel>(_context);

            Connection = connection;
            Identity = new Identity(name, null, null);
            RealName = new ObservableProperty<String>(String.Empty);
            Network = new ObservableProperty<INetwork>(null);
            Modes = new Mode();
            Away = new ObservableProperty<bool>(false);
            Name = new ObservableProperty<String>(name);

            ReceivedMessages = connection.ReceivedMessages
                .Where(m => m.Receiver.Equals(this))
                ;
            SentMessages = connection.ReceivedMessages
                .Where(m => m.Sender.Equals(this))
                ;
        }
        public IRCClientConnection(String address, ushort port, SynchronizationContext context, Client client)
            : base(address, port)
        {
            _context  = context;
            _client   = client;
            _networks = new SynchronizedKeyedCollection <String, INetwork>(_context);
            _channels = new SynchronizedKeyedCollection <String, IChannel>(_context);
            _users    = new SynchronizedKeyedCollection <String, IUser>(_context);

            _me = GetUser(_initialNickname) as User;

            _messageSender   = new MessageSender(this);
            _messageReceiver = new MessageReceiver(this);

            _disposables.Add(RawMessages
                             .Select(r => _messageReceiver.Receive(r))
                             .Subscribe(_internalReceivedMessages)
                             );
            _disposables.Add(_internalReceivedMessages.Subscribe(_receivedMessages));
            _disposables.Add(_receivedMessages.Subscribe(_messages));
            _disposables.Add(_sentMessages.Subscribe(_messages));
            _disposables.Add(_sentMessages
                             .Where(m => m.Type == SendType.Privmsg || m.Type == SendType.Notice)
                             .Subscribe(m => HandleMessage(m))
                             );

            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.Ping)
                             .Subscribe(HandlePing)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.Join)
                             .Subscribe(HandleJoin)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.Part)
                             .Subscribe(HandlePart)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.Kick)
                             .Subscribe(HandleKick)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.Quit)
                             .Subscribe(HandleQuit)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.NickChange)
                             .Subscribe(HandleNickChange)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.TopicChange)
                             .Subscribe(HandleTopicChange)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.ChannelModeChange)
                             .Subscribe(HandleChannelModeChange)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.Type == ReceiveType.UserModeChange)
                             .Subscribe(HandleUserModeChange)
                             );

            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.Welcome)
                             .Subscribe(HandleWelcome)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.ChannelModeIs)
                             .Subscribe(HandleChannelModeIsReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.CreatedAt)
                             .Subscribe(HandleCreatedAtReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.Topic)
                             .Subscribe(HandleTopicReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.TopicSetBy)
                             .Subscribe(HandleTopicSetByReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.NamesReply)
                             .Subscribe(HandleNamesReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.WhoReply)
                             .Subscribe(HandleWhoReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.Away)
                             .Subscribe(HandleAwayReply)
                             );
            _disposables.Add(_internalReceivedMessages
                             .Where(m => m.ReplyType == ReplyType.UnAway)
                             .Subscribe(HandleUnAwayReply)
                             );
        }
예제 #10
0
        public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            StringBuilder sb   = new StringBuilder();
            string        guid = Guid.NewGuid().ToString();

            sb.AppendFormat("请求标识:{0},调用前日志", guid).AppendLine();
            try
            {
                Uri requestUri = request.Headers.To;
                sb.AppendFormat("请求地址:{0}", requestUri).AppendLine();
                OperationContext              context  = OperationContext.Current;
                MessageProperties             prop     = context.IncomingMessageProperties;
                RemoteEndpointMessageProperty endpoint =
                    prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
                if (endpoint != null)
                {
                    sb.AppendFormat("请求IP:{0}", endpoint.Address).AppendLine();
                }
                HttpRequestMessageProperty httpReq =
                    (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
                sb.AppendFormat("请求方式:{0}", httpReq.Method).AppendLine();
                sb.AppendLine("请求Headers:");
                foreach (string header in httpReq.Headers.AllKeys)
                {
                    if (string.IsNullOrEmpty(header))
                    {
                        continue;
                    }
                    if (header.ToLower() == "cookie")
                    {
                        continue;
                    }
                    sb.AppendFormat("{0}:{1}", header, httpReq.Headers[header]).AppendLine();
                }
                MessageHeaders incomingMessageHeaders = OperationContext.Current.IncomingMessageHeaders;
                string         currentActionName      = incomingMessageHeaders.Action;
                if (string.IsNullOrEmpty(currentActionName))
                {
                    currentActionName =
                        incomingMessageHeaders.To.Segments[incomingMessageHeaders.To.Segments.Length - 1];
                }
                SynchronizedKeyedCollection <string, DispatchOperation> operations =
                    OperationContext.Current.EndpointDispatcher.DispatchRuntime.Operations;
                DispatchOperation operation = operations.FirstOrDefault(d => d.Name == currentActionName);
                if (operation != null)
                {
                    string actionName =
                        OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;
                    Type hostType = OperationContext.Current.Host.Description.ServiceType;
                    sb.AppendFormat("请求类:{0}", hostType.FullName).AppendLine();
                    sb.AppendFormat("请求方法:{0}", actionName).AppendLine();
                }
                sb.AppendLine("请求内容:");
                sb.AppendLine(this.MessageToString(ref request));
                Logger.Error(sb.ToString());
            }
            catch (Exception ex)
            {
                Logger.Error("日志记录异常:{0}", ex);
            }
            return(guid);
        }
예제 #11
0
        public IRCClientConnection(String address, ushort port, SynchronizationContext context, Client client)
            : base(address, port)
        {
            _context = context;
            _client = client;
            _networks = new SynchronizedKeyedCollection<String, INetwork>(_context);
            _channels = new SynchronizedKeyedCollection<String, IChannel>(_context);
            _users = new SynchronizedKeyedCollection<String, IUser>(_context);

            _me = GetUser(_initialNickname) as User;

            _messageSender = new MessageSender(this);
            _messageReceiver = new MessageReceiver(this);

            _disposables.Add(RawMessages
                .Select(r => _messageReceiver.Receive(r))
                .Subscribe(_internalReceivedMessages)
                );
            _disposables.Add(_internalReceivedMessages.Subscribe(_receivedMessages));
            _disposables.Add(_receivedMessages.Subscribe(_messages));
            _disposables.Add(_sentMessages.Subscribe(_messages));
            _disposables.Add(_sentMessages
                .Where(m => m.Type == SendType.Privmsg || m.Type == SendType.Notice)
                .Subscribe(m => HandleMessage(m))
            );

            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.Ping)
                .Subscribe(HandlePing)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.Join)
                .Subscribe(HandleJoin)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.Part)
                .Subscribe(HandlePart)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.Kick)
                .Subscribe(HandleKick)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.Quit)
                .Subscribe(HandleQuit)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.NickChange)
                .Subscribe(HandleNickChange)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.TopicChange)
                .Subscribe(HandleTopicChange)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.ChannelModeChange)
                .Subscribe(HandleChannelModeChange)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.Type == ReceiveType.UserModeChange)
                .Subscribe(HandleUserModeChange)
                );

            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.Welcome)
                .Subscribe(HandleWelcome)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.ChannelModeIs)
                .Subscribe(HandleChannelModeIsReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.CreatedAt)
                .Subscribe(HandleCreatedAtReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.Topic)
                .Subscribe(HandleTopicReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.TopicSetBy)
                .Subscribe(HandleTopicSetByReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.NamesReply)
                .Subscribe(HandleNamesReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.WhoReply)
                .Subscribe(HandleWhoReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.Away)
                .Subscribe(HandleAwayReply)
                );
            _disposables.Add(_internalReceivedMessages
                .Where(m => m.ReplyType == ReplyType.UnAway)
                .Subscribe(HandleUnAwayReply)
                );
        }
예제 #12
0
        public new void Dispose()
        {
            if(_disposables == null)
                return;

            _disposables.Dispose();
            _disposables = null;

            _sentMessages.OnCompleted();
            _sentMessages.Dispose();
            _sentMessages = null;
            _internalReceivedMessages.OnCompleted();
            _internalReceivedMessages.Dispose();
            _internalReceivedMessages = null;
            _messages.OnCompleted();
            _messages.Dispose();
            _messages = null;

            _users.Do(u => u.Dispose());
            _users.Clear();
            _users = null;
            _channels.Do(c => c.Dispose());
            _channels.Clear();
            _channels = null;
            _networks.Do(n => n.Dispose());
            _networks.Clear();
            _networks = null;

            base.Dispose();
        }
예제 #13
0
파일: User.cs 프로젝트: Gohla/ReactiveIRC
        public void Dispose()
        {
            if(Name == null)
                return;

            Name.Dispose();
            Name = null;
            Away.Dispose();
            Away = null;
            Modes.Dispose();
            Modes = null;
            Network.Dispose();
            Network = null;
            RealName.Dispose();
            RealName = null;
            Identity.Dispose();
            Identity = null;
            _knownChannels.Clear();
            _knownChannels.Dispose();
            _knownChannels = null;
            _channels.Clear();
            _channels.Dispose();
            _channels = null;
        }
예제 #14
0
        public void Dispose()
        {
            if(Name == null)
                return;

            Name.Dispose();
            Name = null;
            Modes.Dispose();
            Modes = null;
            Topic.Dispose();
            Topic = null;
            TopicSetBy.Dispose();
            TopicSetBy = null;
            TopicSetDate.Dispose();
            TopicSetDate = null;
            CreatedDate.Dispose();
            CreatedDate = null;
            _knownUsers.Do(u => u.Dispose());
            _knownUsers.Clear();
            _knownUsers.Dispose();
            _knownUsers = null;
            _users.Clear();
            _users.Dispose();
            _users = null;
        }