コード例 #1
0
        /// <summary>
        /// Tries to reject all pending requests.
        /// </summary>
        /// <param name="messageRouter">The message router.</param>
        /// <param name="messageRouterResultHandler">The message router result handler.</param>
        /// <returns>True, if successful. False otherwise.</returns>
        public async Task <bool> RejectAllPendingRequestsAsync(
            MessageRouter messageRouter, MessageRouterResultHandler messageRouterResultHandler)
        {
            bool wasSuccessful = false;
            IList <ConnectionRequest> connectionRequests = messageRouter.RoutingDataManager.GetConnectionRequests();

            if (connectionRequests.Count > 0)
            {
                IList <ConnectionRequestResult> connectionRequestResults =
                    new List <ConnectionRequestResult>();

                foreach (ConnectionRequest connectionRequest in connectionRequests)
                {
                    connectionRequestResults.Add(
                        messageRouter.RejectConnectionRequest(connectionRequest.Requestor));
                }

                foreach (ConnectionRequestResult connectionRequestResult in connectionRequestResults)
                {
                    await messageRouterResultHandler.HandleResultAsync(connectionRequestResult);
                }

                wasSuccessful = true;
            }

            return(wasSuccessful);
        }
コード例 #2
0
        void Check(string checkName, GetMethod getMethod, SetMethod setMethod)
        {
            string s = "Check name ; " + checkName + "\n";

            try
            {
                setMethod();
                s += "Set succeeded\n";
            }
            catch (Exception e)
            {
                s += "Set through exception :\n\t" + e.Message + "\n";
            }

            try
            {
                s += "Value set is : " + getMethod().ToString() + "\n";
                s += "Get succeeded\n";
            }
            catch (Exception e)
            {
                s += "Get through exception : \n\t" + e.Message;
            }
            MessageRouter.MessageBox(new List <string> {
                s
            });
        }
コード例 #3
0
        protected override async Task HandleTurnAsync(ITurnContext turnContext, ChatUserContext userContext,
                                                      MessageRouter messageRouter, NextDelegate next, CancellationToken cancellationToken = default(CancellationToken))
        {
            Activity activity = turnContext.Activity;

            if (turnContext.TurnState.TryGetValue(typeof(CommandSendMessageProperties).FullName, out object result))
            {
                CommandSendMessageProperties properties = (CommandSendMessageProperties)result;

                //Log broadcast
                if (properties.From.Role == ChatUserRole.Admin && properties.UserId == "*")
                {
                    var allConsumerConservations = await _routingDataManager.GetConsumerConversations();

                    foreach (var consumerConversation in allConsumerConservations)
                    {
                        await _reportDataManager.CreateOrUpdateChatReport(new ChatReportLogCreationModel()
                        {
                            User = properties.From.Role == ChatUserRole.Admin ? new ChatUserModel()
                            {
                                Id = consumerConversation.User.Id
                            } : properties.From,
                            Message = new ChatReportLogModel()
                            {
                                From        = properties.From,
                                Date        = activity.Timestamp.Value.DateTime,
                                Message     = activity.Text,
                                ReportType  = properties.ReportType,
                                Id          = activity.Id,
                                IsBroadcast = true
                            }
                        });
                    }
                }
                else
                {
                    //Log one message
                    ChatReportModel chatReportModel = await _reportDataManager.CreateOrUpdateChatReport(new ChatReportLogCreationModel()
                    {
                        User = properties.From.Role == ChatUserRole.Admin ? new ChatUserModel()
                        {
                            Id = properties.UserId
                        } : properties.From,
                        ChannelId = activity.ChannelId,
                        Message   = new ChatReportLogModel()
                        {
                            From       = properties.From,
                            Date       = activity.Timestamp.Value.DateTime,
                            Message    = activity.Text,
                            ReportType = properties.ReportType,
                            Id         = activity.Id
                        }
                    });

                    turnContext.TurnState.Add(typeof(ChatReportModel).FullName, chatReportModel);
                }

                await next(cancellationToken).ConfigureAwait(false);
            }
        }
コード例 #4
0
        public void WhenIScheduleAMeeting()
        {
            var scheduleMeetingCommand = new ScheduleMeetingCommand(MEETING_ID, meetingDate, locationId, speakerId, capacity);

            new DomainDatabaseBootStrapper().ReCreateDatabaseSchema();

            var sqliteConnectionString = string.Format("Data Source={0}", DATA_BASE_FILE);

            var domainEventStorage = new DomainEventStorage<IDomainEvent>(sqliteConnectionString, new BinaryFormatter());
            var eventStoreIdentityMap = new EventStoreIdentityMap<IDomainEvent>();
            var bus = new DirectBus(new MessageRouter());
            var eventStoreUnitOfWork = new EventStoreUnitOfWork<IDomainEvent>(domainEventStorage, eventStoreIdentityMap, bus);
            var repository = new DomainRepository<IDomainEvent>(eventStoreUnitOfWork, eventStoreIdentityMap);

            new ReportingDatabaseBootStrapper().ReCreateDatabaseSchema();
            reportingRepository = new SQLiteReportingRepository(sqliteConnectionString, new SqlSelectBuilder(), new SqlInsertBuilder(), new SqlUpdateBuilder(), new SqlDeleteBuilder());

            handler = new ScheduleMeetingCommandHandler(repository);

            var messageRouter = new MessageRouter();
            messageRouter.Register<ScheduleMeetingCommand>(command => handler.Handle(command));

            bus.Publish(scheduleMeetingCommand);

            //how do we publish to report, directly or via command handler. Looks like by using transaction handler we go through unit of work whose commit method fires events to BUS
            //so if we have event and then save they get re-ublished and report canpick up
 
        }
コード例 #5
0
        protected override async Task HandleTurnAsync(ITurnContext turnContext, ChatUserContext userContext,
                                                      MessageRouter messageRouter, NextDelegate next, CancellationToken cancellationToken = default(CancellationToken))
        {
            Activity activity = turnContext.Activity;

            if (turnContext.TurnState.TryGetValue(typeof(CommandSendMessageProperties).FullName, out object result))
            {
                CommandSendMessageProperties properties       = (CommandSendMessageProperties)result;
                ConversationReference        selfConversation = activity.GetConversationReference();

                //Broadcast to many users
                IEnumerable <ConversationReference> conversations = await GetHandoffConversation(turnContext, activity, properties, selfConversation);

                //Send messages
                if (conversations != null)
                {
                    foreach (var conversation in conversations)
                    {
                        await messageRouter.SendMessageAsync(conversation, properties, activity.Text);
                    }
                }

                await next(cancellationToken).ConfigureAwait(false);
            }
        }
コード例 #6
0
                private static IDisposable CreateLocalSubscription(IReactivePlatform platform, Uri uri, IObserver <T> observer)
                {
                    var messagingConnection = platform.Environment.MessagingService.GetInstance <IReactiveMessagingConnection>();
                    var messageRouter       = new MessageRouter(messagingConnection);

                    return(messageRouter.Subscribe(uri, new Deserializer(observer)));
                }
コード例 #7
0
        private bool TrySendMessage(object message)
        {
            EntityActorMessage        castedMessage = (EntityActorMessage)message;
            EntityActorMessageContext context       = new EntityActorMessageContext(Sender, Self, Context.System.Scheduler);

            return(MessageRouter.RouteMessage(context, ActorState, castedMessage));
        }
コード例 #8
0
        public async Task OnTurnAsync(ITurnContext context, NextDelegate next, CancellationToken cancellationToken = default(CancellationToken))
        {
            Activity activity = context.Activity;

            if (activity.Type is ActivityTypes.Message)
            {
                bool.TryParse(
                    Configuration[KeyRejectConnectionRequestIfNoAggregationChannel],
                    out bool rejectConnectionRequestIfNoAggregationChannel);

                // Store the conversation references (identities of the sender and the recipient [bot])
                // in the activity
                MessageRouter.StoreConversationReferences(activity);

                AbstractMessageRouterResult messageRouterResult = null;

                // Check the activity for commands
                if (await CommandHandler.HandleCommandAsync(context) == false)
                {
                    // No command detected/handled

                    // Let the message router route the activity, if the sender is connected with
                    // another user/bot
                    messageRouterResult = await MessageRouter.RouteMessageIfSenderIsConnectedAsync(activity, false);

                    if (messageRouterResult is MessageRoutingResult &&
                        (messageRouterResult as MessageRoutingResult).Type == MessageRoutingResultType.NoActionTaken)
                    {
                        // No action was taken by the message router. This means that the user
                        // is not connected (in a 1:1 conversation) with a human
                        // (e.g. customer service agent) yet.

                        // Check for cry for help (agent assistance)
                        if (!string.IsNullOrWhiteSpace(activity.Text) &&
                            activity.Text.ToLower().Contains("human"))
                        {
                            // Create a connection request on behalf of the sender
                            // Note that the returned result must be handled
                            messageRouterResult = MessageRouter.CreateConnectionRequest(
                                MessageRouter.CreateSenderConversationReference(activity),
                                rejectConnectionRequestIfNoAggregationChannel);
                        }
                        else
                        {
                            // No action taken - this middleware did not consume the activity so let it propagate
                            await next(cancellationToken).ConfigureAwait(false);
                        }
                    }
                }

                // Uncomment to see the result in a reply (may be useful for debugging)
                //if (messageRouterResult != null)
                //{
                //    await MessageRouter.ReplyToActivityAsync(activity, messageRouterResult.ToString());
                //}

                // Handle the result, if necessary
                await MessageRouterResultHandler.HandleResultAsync(messageRouterResult);
            }
        }
コード例 #9
0
        public TimeoutMiddleware(IConfiguration configuration, ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger <TimeoutMiddleware>();

            string connectionString = configuration[KeyAzureTableStorageConnectionString];

            if (string.IsNullOrEmpty(connectionString))
            {
                _logger.LogError($"WARNING!!! No connection string found - using {nameof(InMemoryRoutingDataStore)}");
                _routingDataStore = new InMemoryRoutingDataStore();
            }
            else
            {
                _logger.LogDebug($"Found a connection string - using {nameof(AzureTableRoutingDataStore)}");
                _routingDataStore = new AzureTableRoutingDataStore(connectionString, new Underscore.Bot.MessageRouting.Logging.ConsoleLogger(loggerFactory.CreateLogger <AzureTableRoutingDataStore>()));
            }

            _timeout = TimeSpan.FromSeconds(Double.Parse(configuration[KeyConversationTimeout] ?? "3600"));
            _logger.LogInformation($"Bot Conversation Timeout set to {_timeout.ToString()}");

            _messageRouter = new MessageRouter(
                _routingDataStore,
                new MicrosoftAppCredentials(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"]),
                logger: new Underscore.Bot.MessageRouting.Logging.ConsoleLogger(loggerFactory.CreateLogger <MessageRouter>()));

            _endOfConversationActivity      = Activity.CreateMessageActivity();
            _endOfConversationActivity.Type = ActivityTypes.EndOfConversation;
        }
コード例 #10
0
ファイル: ConnectionManager.cs プロジェクト: ism41L/EIP.Net
        /// <summary>
        /// Closes a connection that was open with ForwardOpen or ConnectOverControlNet
        /// </summary>
        /// <param name="si">Session Info</param>
        /// <param name="Path">Path to the target</param>
        /// <returns>True if the request was successful, false otherwise</returns>
        public static bool ForwardClose(SessionInfo si, byte[] Path)
        {
            ForwardCloseRequest request = new ForwardCloseRequest();

            request.ConnectionSerialNumber = si.ConnectionParameters.ConnectionSerialNumber;
            request.VendorId = si.ConnectionParameters.VendorID;
            request.OriginatorSerialNumber = si.ConnectionParameters.OriginatorSerialNumber;
            byte[] tPath = new byte[Path.Length + CommonPaths.Router.Length];
            Buffer.BlockCopy(Path, 0, tPath, 0, Path.Length);
            Buffer.BlockCopy(CommonPaths.Router, 0, tPath, Path.Length, CommonPaths.Router.Length);
            request.Path = tPath;

            EncapsReply response = MessageRouter.SendMR_Request(si, (byte)ConnectionManagerService.ForwardClose, CommonPaths.ConnectionManager,
                                                                request.Pack());

            if (response == null)
            {
                return(false);
            }

            if (response.Status == 0)
            {
                return(true);
            }

            return(false);
        }
コード例 #11
0
ファイル: Command_Bus.cs プロジェクト: zaieda/InRetail
        protected override void SetupDependencies()
        {
            _handler = new FirstTestCommandHandler();
            var messageRouter = new MessageRouter();

            messageRouter.Register <TestCommand>(x => _handler.Execute(x));
            DoNotMock.Add(typeof(IRouteMessages), messageRouter);
        }
コード例 #12
0
        public OutboundPipelineConfigurator(IServiceBus bus)
        {
            _bus = bus;

            var router = new MessageRouter <ISendContext>();

            _pipeline = new OutboundMessagePipeline(router, this);
        }
コード例 #13
0
ファイル: PlayerInstance.cs プロジェクト: Joerosion/PvEvP
 private void Start()
 {
     _playerDataService = ServiceFactory.Instance.GetService <PlayerDataService>();
     _enemyService      = ServiceFactory.Instance.GetService <MinionService>();
     _messageRouter     = ServiceFactory.Instance.GetService <MessageRouter>();
     swingHitBox        = GetComponent <CapsuleCollider2D>();
     _entityIDsHit      = new List <int>();
 }
コード例 #14
0
 public MessageRouterTests()
 {
     _route1 = new Mock <NmeaSinkAndSource>(MockBehavior.Strict, "1");
     _route2 = new Mock <NmeaSinkAndSource>(MockBehavior.Strict, "2");
     _router = new MessageRouter();
     _router.AddEndPoint(_route1.Object);
     _router.AddEndPoint(_route2.Object);
 }
コード例 #15
0
		public OutboundPipelineConfigurator(IServiceBus bus)
		{
			_bus = bus;

			var router = new MessageRouter<ISendContext>();

			_pipeline = new OutboundMessagePipeline(router);
		}
コード例 #16
0
    public static void OnCustomEvent(this GameObject gameObject, EventData eventData)
    {
        MessageRouter messageRouter = gameObject.GetComponent <MessageRouter>();

        if (messageRouter)
        {
            messageRouter.OnCustomEvent(eventData);
        }
    }
コード例 #17
0
ファイル: Protocol.cs プロジェクト: peteward44/nbm-messenger
 private void OnOutReceived(MessageRouter router, Message message, object tag)
 {
     // server is about to disconnect us
     this.notifyRouter.Close();
     this.notifyRouter = null;
     control.ForcedDisconnect();
     timer.Stop();
     timeoutTimer.Stop();
 }
コード例 #18
0
 private void OnAuthResponseResponse(MessageRouter router, Message message, object tag)
 {
     if (message.Header.Status == YahooStatus.Error)
     {
         // authentication failed
         ((OperationCompleteEvent)tag).Execute(
             new ConnectionCompleteArgs(ConnectionFailedReport.AuthFailed));
     }
 }
コード例 #19
0
    public static void OnCustomEvent(this Component component, EventData eventData)
    {
        MessageRouter messageRouter = component.GetComponent <MessageRouter>();

        if (messageRouter)
        {
            messageRouter.OnCustomEvent(eventData);
        }
    }
コード例 #20
0
    public static void Dispatch(this GameObject gameObject, string message)
    {
        MessageRouter messageRouter = gameObject.GetComponent <MessageRouter>();

        if (messageRouter)
        {
            messageRouter.Dispatch(message);
        }
    }
コード例 #21
0
    public static void OnCustomEvent(this Component component, string message)
    {
        MessageRouter messageRouter = component.GetComponent <MessageRouter>();

        if (messageRouter)
        {
            messageRouter.OnCustomEvent(new EventData(message));
        }
    }
コード例 #22
0
    public static void OnCustomEvent <T>(this GameObject gameObject, string message, T arg)
    {
        MessageRouter messageRouter = gameObject.GetComponent <MessageRouter>();

        if (messageRouter)
        {
            messageRouter.OnCustomEvent(new EventData <T>(message, arg));
        }
    }
コード例 #23
0
ファイル: ProcessHandler.cs プロジェクト: Fsamot/HtmlUi
        /// <summary>
        /// Called when context created.
        /// </summary>
        /// <param name="browser">The browser.</param>
        /// <param name="frame">The frame.</param>
        /// <param name="context">The context.</param>
        protected override void OnContextCreated(CefBrowser browser, CefFrame frame, CefV8Context context)
        {
            if (frame == null)
            {
                throw new ArgumentNullException("frame");
            }

            MessageRouter.OnContextCreated(browser, frame, context);
        }
コード例 #24
0
    public static void Dispatch <T>(this Component component, string message, T arg)
    {
        MessageRouter messageRouter = component.GetComponent <MessageRouter>();

        if (messageRouter)
        {
            messageRouter.Dispatch(message, arg);
        }
    }
コード例 #25
0
 public SignalRBrooker(
     Uri baseAddress,
     MessageRouter messageQueue,
     IAccessTokenProvider accessTokenProvider)
 {
     this.baseAddress         = baseAddress ?? throw new ArgumentNullException(nameof(baseAddress));
     this.messageQueue        = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
     this.accessTokenProvider = accessTokenProvider ?? throw new ArgumentNullException(nameof(accessTokenProvider));
 }
コード例 #26
0
ファイル: Root.cs プロジェクト: Joerosion/PvEvP
    private void Awake()
    {
        var messageRouter = new MessageRouter();

        ServiceFactory.Instance.RegisterSingleton(messageRouter);
        RegisterServices();
        StartCoroutine(SpawnEnemy());
        StartCoroutine(SpawnGoldDelayed());
    }
コード例 #27
0
        InboundPipelineConfigurator(IServiceBus bus)
        {
            _subscriptionEventHandlers = new RegistrationList <ISubscriptionEvent>();
            _bus = bus;

            var router = new MessageRouter <IConsumeContext>();

            _pipeline = new InboundMessagePipeline(router, this);
        }
コード例 #28
0
        public void when_configure_ingress_and_call_without_ingress_it_should_fail()
        {
            Action sut1 = () =>
                          MessageRouter.Configure(
                router => router
                .AddMessageBroker(
                    broker => broker
                    .WithId("broker id")
                    .Ingress(
                        ingress => ingress
                        .WithTestDriver(new TestDriverState())
                        .WithEnterPipeFitter <EmptyPipeFitter>()
                        .WithExitPipeFitter <EmptyPipeFitter>()
                        .WithQueueNameMatcher <RegexQueueNameMatcher>()
                        .AddApi(
                            api => api
                            .WithId("ingress-api")
                            .WithHandlerRegistry <EmptyHandlerRegistry>()
                            .WithMessageKey <string>()
                            .WithMessagePayload <string>()
                            .WithMessageTypesRegistry <EmptyIngressApiMessageTypesRegistry>()
                            .WithPipeFitter <EmptyPipeFitter>()
                            .WithQueueNamePatternsProvider <ProvidingNothingQueueNamePatternsProvider>()
                            ))
                    .WithoutIngress()
                    .WithoutEgress()));

            sut1.Should().ThrowExactly <PoezdConfigurationException>().Which.Message.Should().Contain("WithoutIngress");

            Action sut2 = () =>
                          MessageRouter.Configure(
                router => router
                .AddMessageBroker(
                    broker => broker
                    .WithId("broker id")
                    .WithoutIngress()
                    .Ingress(
                        ingress => ingress
                        .WithTestDriver(new TestDriverState())
                        .WithEnterPipeFitter <EmptyPipeFitter>()
                        .WithExitPipeFitter <EmptyPipeFitter>()
                        .WithQueueNameMatcher <RegexQueueNameMatcher>()
                        .AddApi(
                            api => api
                            .WithId("ingress-api")
                            .WithHandlerRegistry <EmptyHandlerRegistry>()
                            .WithMessageKey <string>()
                            .WithMessagePayload <string>()
                            .WithMessageTypesRegistry <EmptyIngressApiMessageTypesRegistry>()
                            .WithPipeFitter <EmptyPipeFitter>()
                            .WithQueueNamePatternsProvider <ProvidingNothingQueueNamePatternsProvider>()
                            ))
                    .WithoutEgress()));

            sut2.Should().ThrowExactly <PoezdConfigurationException>().Which.Message.Should().Contain("WithoutIngress");
        }
コード例 #29
0
        //--------------------------------------------------------------------------------------------------

        #endregion

        #region Initialization and Property handling

        public MessageHandler()
        {
            _MessageItems   = new ObservableCollection <MessageItem>();
            _EntityMessages = new ConditionalWeakTable <Entity, List <MessageItem> >();
            //Messages(MessageSeverity.Warning, "This is an extended Warning.", "And this is extended Information.\nMultiline if you want to.");

            _MessageRouter = new MessageRouter();
            _MessageRouter.MessageArrived += _MessageRouter_MessageArrived;
            _MessageRouter.TraceLevel      = Message_Gravity.Message_Warning;
        }
コード例 #30
0
    private void OnSwitchBoardUsrResponse(MessageRouter router, Message message, object tag)
    {
        object[] objs = (object[])tag;

        Friend friend            = (Friend)objs[0];
        OperationCompleteEvent e = (OperationCompleteEvent)objs[1];

        this.InviteFriend(friend, e);
        router.RemoveMessageEvent(message);
    }
コード例 #31
0
ファイル: Protocol.cs プロジェクト: peteward44/nbm-messenger
    private void OnVersionResponse(MessageRouter router, Message message, object tag)
    {
        router.RemoveMessageEvent(message);

        // send CVR command - describes our local machine and client version
        router.SendMessage(
            Message.ConstructMessage("CVR", "0x0409 winnt 5.1 i386 MSMSGS 4.7.2009 WindowsMessenger " + settings.Username),
            new ResponseReceivedHandler(OnCvrResponse),
            tag);
    }
コード例 #32
0
ファイル: ProcessHandler.cs プロジェクト: Fsamot/HtmlUi
        /// <summary>
        /// Called when process message received.
        /// </summary>
        /// <param name="browser">The browser.</param>
        /// <param name="sourceProcess">The source process.</param>
        /// <param name="message">The process message.</param>
        /// <returns></returns>
        protected override bool OnProcessMessageReceived(CefBrowser browser, CefProcessId sourceProcess, CefProcessMessage message)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            return(V8NativeHandler.ProcessMessage(browser, sourceProcess, message) ||
                   MessageRouter.OnProcessMessageReceived(browser, sourceProcess, message));
        }
コード例 #33
0
ファイル: SmtpAgent.cs プロジェクト: DM-TOR/nhin-d
        void InitRoutes()
        {
            m_router = new MessageRouter(m_diagnostics);            
            if (!m_settings.HasRoutes)
            {
                return;
            }

            using (new MethodTracer(Logger))
            {
                m_router.Init(m_settings.IncomingRoutes);
            }
        }
コード例 #34
0
 private void OnForcedDisconnect(MessageRouter router, Message message, object tag)
 {
     //		control.ForcedDisconnection();
 }
コード例 #35
0
    private void OnSwitchBoardUsrResponse(MessageRouter router, Message message, object tag)
    {
        object[] objs = (object[])tag;

        Friend friend = (Friend)objs[0];
        OperationCompleteEvent e = (OperationCompleteEvent)objs[1];

        this.InviteFriend(friend, e);
        router.RemoveMessageEvent(message);
    }
コード例 #36
0
    public void StartByInvitation(Friend friend, OperationCompleteEvent opCompleteEvent, object tag)
    {
        object[] objs = (object[])tag;
        string sbIP = (string)objs[0];
        int sbPort = (int)objs[1];
        string hash = (string)objs[2];
        string sessionID = (string)objs[3];

        try
        {
            Proxy.IConnection conn = this.control.CreateConnection();
            conn.Connect("", 0, sbIP, sbPort, Proxy.ConnectionType.Tcp);
            sbRouter = new MessageRouter(this.protocol, conn, null, null);

            RegisterCodeEvents();

            sbRouter.SendMessage(Message.ConstructMessage("ANS",
                this.settings.Username + " " + hash + " " + sessionID),
                new ResponseReceivedHandler(OnAnswerResponse), opCompleteEvent);
        }
        catch
        {
            opCompleteEvent.Execute(new OperationCompleteArgs("Could not connect", true));
        }
    }
コード例 #37
0
 private void OnSayAck(MessageRouter router, Message message, object tag)
 {
     switch (message.Code)
     {
         case "ACK":
             ((OperationCompleteEvent)tag).Execute(new OperationCompleteArgs());
             break;
         case "NAK":
             ((OperationCompleteEvent)tag).Execute(new OperationCompleteArgs("Message could not be sent", false));
             break;
         default:
             ((OperationCompleteEvent)tag).Execute(new OperationCompleteArgs("Unknown error occurred", false));
             break;
     }
 }
コード例 #38
0
    private void OnSwitchBoardRequestResponse(MessageRouter router, Message message, object tag)
    {
        object[] o = (object[])tag;

        Friend friend = (Friend)o[0];
        OperationCompleteEvent op = (OperationCompleteEvent)o[1];

        Regex.Regex regex = new Regex.Regex(@"SB (?<sbServerIP>\d+\.\d+\.\d+\.\d+):(?<sbServerPort>\d+) CKI (?<hash>.*$)");
        Regex.Match match = regex.Match(message.Arguments);

        if (match.Success)
        {
            string sbIP = match.Groups["sbServerIP"].Value;
            int sbPort = int.Parse(match.Groups["sbServerPort"].Value);
            string conversationID = match.Groups["hash"].Value;

            // connect
            try
            {
                Proxy.IConnection conn = this.control.CreateConnection();
                conn.Connect("", 0, sbIP, sbPort, Proxy.ConnectionType.Tcp);
                sbRouter = new MessageRouter(this.protocol, conn, null, new ResponseReceivedHandler(OnForcedDisconnect));
            }
            catch
            {
                op.Execute(new OperationCompleteArgs("Could not connect", true));
                return;
            }

            RegisterCodeEvents();

            sbRouter.SendMessage(Message.ConstructMessage("USR", this.settings.Username + " " + conversationID),
                new ResponseReceivedHandler(OnSwitchBoardUsrResponse), tag);
        }
        else
            op.Execute(new OperationCompleteArgs("Could not connect", true));

        router.RemoveMessageEvent(message);
    }
コード例 #39
0
    private void OnJoinReceived(MessageRouter router, Message message, object tag)
    {
        Regex.Regex regex = new Regex.Regex(@"(?<username>\S+)\s+(?<screenName>\S+)");
        Regex.Match match = regex.Match(message.Arguments);

        if (match.Success)
        {
            string email = match.Groups["username"].Value;
            string screenName = match.Groups["screenName"].Value;

            control.FriendJoin(email);
        }
    }
コード例 #40
0
    private void OnMsgReceived(MessageRouter router, Message message, object tag)
    {
        // seperate message from all the crap
        string actualMessage = message.Body.Substring( message.Body.IndexOf("\r\n\r\n") + 4 );
        actualMessage.TrimEnd('\r', '\n');

        // locate content type in mime headers
        Regex.Regex contentTypeRegex = new Regex.Regex(@"\r\nContent-Type:\s+(?<contentType>[^\;\s]+)");
        Regex.Match contentTypeMatch = contentTypeRegex.Match(message.Body);

        if (contentTypeMatch.Success)
        {
            string contentType = contentTypeMatch.Groups["contentType"].Value;

            switch (contentType)
            {
                case "text/x-msmsgscontrol": // user typing notification
                {
                    // get username of typing user
                    Regex.Regex notifyRegex = new Regex.Regex(@"TypingUser: (?<username>[^\r]+)");
                    Regex.Match notifyMatch = notifyRegex.Match(message.Body);

                    if (notifyMatch.Success)
                    {
                        this.control.TypingNotification(notifyMatch.Groups["username"].Value);
                    }
                }
                    return;

                case "text/x-msmsgsinvite": // file transfer, netmeeting invitation
                    return;
            }
        }

        // find user's name
        Regex.Regex regex = new Regex.Regex(@"(?<username>\S+)\s+(?<displayName>\S+)\s+\d+");
        Regex.Match match = regex.Match(message.Header);

        if (match.Success)
        {
            string username = match.Groups["username"].Value;
            string displayName = match.Groups["displayName"].Value;

            control.FriendSay(username, actualMessage);
        }
    }
コード例 #41
0
 private void OnJoinAfterInvite(MessageRouter router, Message message, object tag)
 {
     router.AddCodeEvent("JOI", new ResponseReceivedHandler(OnJoinReceived), null);
     OnJoinReceived(router, message, null);
     ((OperationCompleteEvent)tag).Execute(new OperationCompleteArgs());
 }
コード例 #42
0
 private void OnInviteFriendComplete(MessageRouter router, Message message, object tag)
 {
     router.RemoveMessageEvent(message);
 }
コード例 #43
0
 private void onDisconnect(MessageRouter router, Message message, object tag)
 {
     if (ExpectingDisconnection)
         this.connection.Disconnect();
     else
     {
         if (this.onDisconnectHandler != null)
             this.onDisconnectHandler(router, message, tag);
     }
 }
コード例 #44
0
    private void OnByeReceived(MessageRouter router, Message message, object tag)
    {
        Regex.Regex regex = new Regex.Regex(@"(?<username>\S*)\s*\d*");
        Regex.Match match = regex.Match(message.Arguments);

        if (match.Success)
        {
            string username = match.Groups["username"].Value;

            control.FriendLeave(username);
        }
    }
コード例 #45
0
    private void OnAnswerResponse(MessageRouter router, Message message, object tag)
    {
        if (message.Arguments == "OK")
        {
            ((OperationCompleteEvent)tag).Execute(new OperationCompleteArgs());
            router.RemoveMessageEvent(message);
        }
        else
        {
            if (message.Code == "IRO")
            {
                Regex.Regex regex = new Regex.Regex(
                    @"(?<userNumber>\d+)\s+(?<totalUsers>\d+)\s+(?<username>\S+)\s+(?<screenName>.*$)"
                    );

                Regex.Match match = regex.Match(message.Arguments);

                if (match.Success)
                {
                    string username = match.Groups["username"].Value;
                    control.FriendJoin(username);
                }
            }
        }
    }