public ConnectionProfile(SynchronizationContext syncContext, ConnectionParameters connParams)
        {
            _syncContext    = syncContext;
            this.Parameters = connParams;

            _messageChannel = SetupMessageChannel(connParams, this, this);
        }
Exemplo n.º 2
0
        protected ServiceBase(MessageChannel messageChannel)
        {
            Console.WriteLine(messageChannel);

            _factory = new ConnectionFactory
            {
                HostName = "localhost"
            };

            _connection = _factory.CreateConnection();
            _channel    = _connection.CreateModel();
            _channel.QueueDeclare(messageChannel.ToString(), false, false, false, null);

            _consumer = new EventingBasicConsumer(_channel);

            _consumer.Received += (model, ea) =>
            {
                Thread.Sleep(500);

                var body = Encoding.UTF8.GetString(ea.Body);

                MessageType messageType;
                Enum.TryParse(body, out messageType);

                Console.WriteLine("\t-> [x]    " + messageType);

                ReceiveMessage(messageType);
            };

            _channel.BasicConsume(messageChannel.ToString(), true, _consumer);
        }
Exemplo n.º 3
0
        public async void ListSongs(IMessageChannel channel, int page)
        {
            //Page enumeration works like an array, so pages actually start from 0,
            int arrayPage = page - 1;

            int pageRepresentation = page;
            int pageCount          = (ListSize() + 10 - 1) / 10;

            if (SongList.Count < 1)
            {
                var embedL = new EmbedBuilder()
                             .WithColor(new Color(240, 230, 231))
                             .WithDescription("Nenhuma musica na lista");
                await channel.SendMessageAsync("", false, embedL);

                return;
            }
            else if (ListSize() <= arrayPage * 10)
            {
                var embedL = new EmbedBuilder()
                             .WithColor(new Color(240, 230, 231))
                             .WithDescription("Não é possível exibir a " + page + "ª pagina pois não há musicas suficientes");
                await channel.SendMessageAsync("", false, embedL);

                return;
            }



            var embedList = new EmbedBuilder()
                            .WithColor(new Color(240, 230, 231))
                            .WithFooter(new EmbedFooterBuilder().WithText("Pagina " + pageRepresentation + "/" + pageCount));

            //10 Songs per page
            var i = arrayPage * 10;


            while (i < SongList.Count && i < ((arrayPage * 10) + 10))
            {
                EmbedFieldBuilder embedField = new EmbedFieldBuilder();

                YTSong cur = SongList[i];

                if (SongList[i] == SongList[CurrentSongID])
                {
                    embedField.WithName("`#" + (i + 1) + " - Atual `")
                    .WithIsInline(false)
                    .WithValue("[" + cur.Title + "](" + cur.Url + ")\n\n`" + cur.RequestAuthor.Username + " | " + cur.Duration + "`");
                }
                else
                {
                    embedField.WithName("`#" + (i + 1) + "`")
                    .WithIsInline(false)
                    .WithValue("[" + cur.Title + "](" + cur.Url + ")\n\n`" + cur.RequestAuthor.Username + " | " + cur.Duration + "`");
                }
                embedList.AddField(embedField);
                i++;
            }
            await MessageChannel.SendMessageAsync("", false, embedList);
        }
Exemplo n.º 4
0
 private void goToGameView(object obj)
 {
     if (LobbyViewModel != null)
     {
         LobbyViewModel.Dispose();
         LobbyViewModel = null;
     }
     Task.Delay(500).ContinueWith(_ =>
     {
         if (GameViewModel != null)
         {
             GameViewModel.Dispose();
             GameViewModel = null;
         }
         GameViewModel = new GameViewModel((string)obj);
         App.Current.Dispatcher.Invoke(delegate
         {
             SubChannels.Remove(_subChannels.SingleOrDefault(i => i.id == (Constants.LOBBY_CHANNEL + Lobbyname)));
             MessageChannel gameChannel = new MessageChannel(Constants.GAME_CHANNEL, true, false);
             if (!SubChannels.Contains(gameChannel))
             {
                 SubChannels.Add(gameChannel);
             }
             ChangeChannel(Constants.GAME_CHANNEL);
         });
         SwitchView = Views.Game;
         IsInGame   = true;
     });
 }
Exemplo n.º 5
0
        public async void ShowSongSkippedEmbed(int n)
        {
            if (CurrentSong() == null)
            {
                return;
            }

            DeleteCurMessage();

            YTSong curSong = CurrentSong();

            EmbedFieldBuilder songTitle = new EmbedFieldBuilder();

            songTitle.WithName("** " + (PreviousSongID + 1) + " # --> " + (curSong.Order + 1) + " #**")
            .WithIsInline(false)
            .WithValue("`" + "¯\\_(ツ)_/¯" + "`");

            var embedSkip = new EmbedBuilder()
                            .WithColor(new Color(240, 230, 231))
                            .WithAuthor(author => { author.WithName("Pulando " + n + " músicas").WithIconUrl("https://cdn.discordapp.com/avatars/390402848443203595/d2831182eb4d3177febd28f44b4ec936.png?size=256"); })
                            .WithThumbnailUrl(curSong.DefaultThumbnailUrl);

            embedSkip.AddField(songTitle);

            var msg = await MessageChannel.SendMessageAsync("", false, embedSkip);

            await Task.Delay(12000);

            await msg.DeleteAsync();
        }
Exemplo n.º 6
0
        public async void ShowSongSkippedEmbed(SocketUser usr)
        {
            if (CurrentSong() == null)
            {
                return;
            }

            DeleteCurMessage();

            YTSong curSong = CurrentSong();

            EmbedFieldBuilder songTitle = new EmbedFieldBuilder();

            songTitle.WithName("--")
            .WithIsInline(false)
            .WithValue("`Cortesia de " + usr.Username + "`");

            var embedSkip = new EmbedBuilder()
                            .WithColor(new Color(240, 230, 231))
                            .WithAuthor(author => { author.WithName(" Pulando musiquinha lixo").WithIconUrl("https://cdn.discordapp.com/avatars/390402848443203595/d2831182eb4d3177febd28f44b4ec936.png?size=256"); })
                            .WithThumbnailUrl(curSong.DefaultThumbnailUrl);


            embedSkip.AddField(songTitle);

            var msg = await MessageChannel.SendMessageAsync("", false, embedSkip);

            await Task.Delay(12000);

            await msg.DeleteAsync();
        }
Exemplo n.º 7
0
    public void SendMessage(byte[] data, NetDeliveryMethod method, MessageChannel channel)
    {
        var msg = m_Client.CreateMessage();

        msg.Write(data);
        m_Client.SendMessage(msg, method, (int)channel);
    }
Exemplo n.º 8
0
        public ReceiverViewModel()
        {
            var exePath        = System.Reflection.Assembly.GetExecutingAssembly().Location;
            var exeDir         = System.IO.Path.GetDirectoryName(exePath);
            var runtimeOptions = new Openfin.Desktop.RuntimeOptions
            {
                UUID = "receiver-uuid",
                EnableRemoteDevTools = false,
                RemoteDevToolsPort   = 9090,
                AssetsPath           = exeDir + "\\Assets"
            };

            var runtime = Openfin.Desktop.Runtime.GetRuntimeInstance(runtimeOptions);

            runtime.Error += (sender, e) =>
            {
                Console.Write(e);
            };

            runtime.Connect(() =>
            {
                // Initialize the communication channel after the runtime has connected
                // but before launching any applications or EmbeddedViews
                dataMessageChannel = new MessageChannel(runtime.InterApplicationBus, "user-data");
                dataMessageChannel.MessageReceived += DataMessageChannel_MessageReceived;
            });
        }
Exemplo n.º 9
0
        //To get a single Message channel inside a server
        public async Task <GetMessageObject> GetMessageGroupAsync(string MessageKey)
        {
            MessageChannel message = await _Context.messageChannels.FindAsync(MessageKey);

            if (message == null)
            {
                return(new GetMessageObject {
                    IsSuccess = false, Errors = new[] { "message channel does not exist" }
                });
            }
            try{
                //Get MessageGroupUsers Users
                IEnumerable <GroupMap> maps        = _Context.GroupMaps.Select(val => val).Where(pre => pre.MessageChannelKey == MessageKey);
                List <string>          UserkeyList = new List <string>();
                foreach (GroupMap x in maps)
                {
                    UserkeyList.Add(x.UserId);
                }

                return(new GetMessageObject()
                {
                    IsSuccess = true,
                    MessageKey = message.Key,
                    name = message.Name,
                    UserKeys = UserkeyList,
                });
            }catch (Exception e) {
                return(new GetMessageObject {
                    IsSuccess = false,
                    Errors = new[] { e.Message }
                });
            }
        }
Exemplo n.º 10
0
 public void SendChatAsync(string message, MessageChannel channel)
 {
     StarSonataCommClient.Client.SendMessage(
         new TextMessageOut(new ChatMessage {
         Channel = channel, Message = message
     }));
 }
Exemplo n.º 11
0
        public async Task Check_SimpleUdpConnection()
        {
            var testingPort1 = TestUtility.GetFreeTcpPort();
            var testingPort2 = TestUtility.GetFreeTcpPort();

            var receiveTaskOnPassiveChannel = new TaskCompletionSource <string>();
            var receiveTaskOnActiveChannel  = new TaskCompletionSource <string>();

            // Define channels
            var passiveChannel = new MessageChannel(
                new UdpByteStreamHandlerSettings(testingPort1, IPAddress.Loopback, testingPort2),
                new DefaultMessageRecognizerSettings(Encoding.UTF8),
                (msg) =>
            {
                receiveTaskOnPassiveChannel.SetResult(msg.ToString());
                msg.ReturnToPool();
            });
            var activeChannel = new MessageChannel(
                new UdpByteStreamHandlerSettings(testingPort2, IPAddress.Loopback, testingPort1),
                new DefaultMessageRecognizerSettings(Encoding.UTF8),
                (msg) =>
            {
                receiveTaskOnActiveChannel.SetResult(msg.ToString());
                msg.ReturnToPool();
            });

            try
            {
                // Start both channels
                await Task.WhenAll(
                    passiveChannel.StartAsync(),
                    activeChannel.StartAsync());

                // Wait for connection
                var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5.0));
                await Task.WhenAll(
                    passiveChannel.WaitForConnectionAsync(timeoutTokenSource.Token),
                    activeChannel.WaitForConnectionAsync(timeoutTokenSource.Token));

                Assert.AreEqual(ConnectionState.Connected, passiveChannel.State, $"Unable to connect on port {testingPort2}");
                Assert.AreEqual(ConnectionState.Connected, activeChannel.State, $"Unable to connect on port {testingPort1}");

                // Send/Receive some messages in both directions
                await passiveChannel.SendAsync("Message from passive endpoint");

                await activeChannel.SendAsync("Message from active endpoint");

                // Check for received messages
                var receivedOnPassiveChannel = await receiveTaskOnPassiveChannel.Task;
                var receivedOnActiveChannel  = await receiveTaskOnActiveChannel.Task;
                Assert.IsTrue(receivedOnPassiveChannel == "Message from active endpoint");
                Assert.IsTrue(receivedOnActiveChannel == "Message from passive endpoint");
            }
            finally
            {
                await Task.WhenAll(
                    passiveChannel.StopAsync(),
                    activeChannel.StopAsync());
            }
        }
Exemplo n.º 12
0
        protected Agent(bool unitTestContext)
        {
            MainThread.Initialize();

            agentServer = new AgentServer(this);

            evaluationContextManager = new Lazy <EvaluationContextManager> (() => {
                MainThread.Ensure();
                var host = CreateEvaluationContextManager();
                host.Events.Subscribe(new Observer <ICodeCellEvent> (evnt => {
                    switch (evnt)
                    {
                    case EvaluationInFlight _:
                        break;

                    default:
                        MessageChannel.Push(evnt);
                        break;
                    }
                }));
                return(host);
            });

            if (!unitTestContext)
            {
                RepresentationManager.AddProvider(new ReflectionRepresentationProvider());
            }
        }
Exemplo n.º 13
0
 /// <summary>
 /// 启动消息客户端
 /// </summary>
 /// <param name="config"></param>
 /// <param name="brokerIP">远程消息代理</param>
 /// <returns></returns>
 public static CFConfig RegisterMessageDispatcher(this CFConfig config, string brokerIP = null)
 {
     MessageService._default = !string.IsNullOrEmpty(brokerIP) ?
                               new RemoteMessageDispatcher(Consumer.Connect(MessageChannel.ForProducer(brokerIP)), Producer.Connect(MessageChannel.ForConsumer(brokerIP))) :
                               new LocalMessageDispatcher();
     return(config);
 }
Exemplo n.º 14
0
        public override void InitializeService(INetContext context)
        {
            base.InitializeService(context);
            connectedUsers = new HashSet <NetUser>();
            context.Packets.Register <P_Ping>();

            ChPing = Router.Route <P_Ping>();
        }
Exemplo n.º 15
0
        [Test] public void SimpleStringIsWritten()
        {
            var testSocket   = new TestPort();
            var socketStream = new MessageChannel(testSocket);

            socketStream.Write("hello");
            Assert.AreEqual(new byte[] { 104, 101, 108, 108, 111 }, testSocket.GetBytes());
        }
Exemplo n.º 16
0
        [Test] public void StringIsWrittenWithLengthPrefix()
        {
            var testSocket   = new TestPort();
            var socketStream = new MessageChannel(testSocket);

            socketStream.Write("h\u2019llo", "{0}:");
            Assert.AreEqual(new byte[] { 55, 58, 104, 226, 128, 153, 108, 108, 111 }, testSocket.GetBytes());
        }
Exemplo n.º 17
0
        [Test] public void EncodedStringIsRead()
        {
            var testSocket   = new TestPort();
            var socketStream = new MessageChannel(testSocket);

            testSocket.PutBytes(new byte[] { 104, 226, 128, 153, 108, 108, 111 });
            Assert.AreEqual("h\u2019llo", socketStream.Read(7));
        }
Exemplo n.º 18
0
        /// <summary>
        ///     Handles the Removed event of the DistributedMemoryManagerCache control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="KeyCacheEventArgs{TKey}" /> instance containing the event data.</param>
        protected override void DistributedMemoryManagerCache_Removed(object sender, KeyCacheEventArgs <long> e)
        {
            var message = new FieldEntityCacheMessage( );

            message.RemoveKeys.Add(e.Key);

            MessageChannel.Publish(message, PublishOptions.None, false, MergeMessages);
        }
Exemplo n.º 19
0
        [Test] public void SimpleStringIsRead()
        {
            var testSocket   = new TestPort();
            var socketStream = new MessageChannel(testSocket);

            testSocket.PutBytes(new byte[] { 104, 101, 108, 108, 111 });
            Assert.AreEqual("hello", socketStream.Read(5));
        }
Exemplo n.º 20
0
 public MessageReceivedEvent(DateTime timestamp, string from, MessageSource source, bool player, MessageChannel channel, string message) : base(timestamp, NAME)
 {
     this.from    = from;
     Source       = source;
     this.player  = player;
     Channel      = channel;
     this.message = message;
 }
Exemplo n.º 21
0
        public void IsSubscribed_Returns_True_If_Subscriber_Is_Subscribed()
        {
            var messageChannel = new MessageChannel();

            var subscriber = messageChannel.Subscribe <string>();

            Assert.True(messageChannel.IsSubscribed(subscriber));
        }
Exemplo n.º 22
0
        public void IsSubscribed_Returns_False_If_Subscribers_MessageType_IsNull()
        {
            var mockSubscriber = new Mock <ISubscriber>();

            var messageChannel = new MessageChannel();

            Assert.False(messageChannel.IsSubscribed(mockSubscriber.Object));
        }
Exemplo n.º 23
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MmoRadar"/> class.
 /// </summary>
 public MmoRadar()
 {
     this.fiber = new PoolFiber();
     this.fiber.Start();
     this.channel = new MessageChannel<ItemEventMessage>(ItemEventMessage.CounterEventSend);
     this.itemPositions = new Dictionary<Item, float[]>();
     this.itemSubscriptions = new Dictionary<Item, IDisposable>();
     this.actionQueue = new ActionQueue(this, this.fiber);
 }
Exemplo n.º 24
0
        [Test] public void StringIsReadInMultipleParts()
        {
            var testSocket   = new TestPort();
            var socketStream = new MessageChannel(testSocket);

            testSocket.PutBytes(new byte[] { 104, 101, 108, 108, 111 });
            testSocket.PutBytes(new byte[] { 32, 119, 111, 114, 108, 100 });
            Assert.AreEqual("hello world", socketStream.Read(11));
        }
Exemplo n.º 25
0
 public Radar()
 {
     this.fiber = new PoolFiber();
     this.fiber.Start();
     this.channel           = new MessageChannel <ItemEventMessage>(ItemEventMessage.CounterEventSend);
     this.itemPositions     = new Dictionary <Item, Vector>();
     this.itemSubscriptions = new Dictionary <Item, IDisposable>();
     this.actionQueue       = new ActionQueue(this, this.fiber);
 }
Exemplo n.º 26
0
        /// <summary>
        ///     Handles the Cleared event of the DistributedMemoryManagerCache control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="CacheEventArgs" /> instance containing the event data.</param>
        protected override void DistributedMemoryManagerCache_Cleared(object sender, CacheEventArgs e)
        {
            var message = new FieldEntityCacheMessage
            {
                Clear = true
            };

            MessageChannel.Publish(message, PublishOptions.None, false, MergeMessages);
        }
Exemplo n.º 27
0
        private void UpdateUnsubChannel(JObject channelMes)
        {
            MessageChannel newChannel = new MessageChannel(channelMes.GetValue("id").ToString(), false, false);

            App.Current.Dispatcher.Invoke(delegate
            {
                _notSubChannels.Add(newChannel);
            });
        }
Exemplo n.º 28
0
        public async Task Check_SerialConnection_Send()
        {
            var encoding = Encoding.UTF8;

            // Fake serial port api and listen for Write calls
            var receivedString = string.Empty;

            SerialPortByteStreamHandler.SerialPortFactory = () =>
            {
                var isOpened = false;

                var fakedSerialPort = A.Fake <ISerialPort>();
                A.CallTo(() => fakedSerialPort.IsOpen).ReturnsLazily(call => isOpened);
                A.CallTo(() => fakedSerialPort.Open()).Invokes(call => isOpened  = true);
                A.CallTo(() => fakedSerialPort.Close()).Invokes(call => isOpened = false);
                A.CallTo(fakedSerialPort)
                .Where(call => call.Method.Name == nameof(ISerialPort.Write))
                .Invokes(call =>
                {
                    var buffer = (byte[])call.Arguments[0] !;
                    var offset = (int)call.Arguments[1] !;
                    var count  = (int)call.Arguments[2] !;

                    receivedString = encoding.GetString(buffer, offset, count);
                });

                return(fakedSerialPort);
            };

            // Define channels
            var serialChannel = new MessageChannel(
                new SerialPortByteStreamHandlerSettings("COM1"),
                new StartAndEndSymbolsRecognizerSettings(encoding, "<", ">"));

            try
            {
                // Start both channels
                await serialChannel.StartAsync();

                // Wait for connection
                var timeoutTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(5.0));
                await serialChannel.WaitForConnectionAsync(timeoutTokenSource.Token);

                Assert.AreEqual(serialChannel.State, ConnectionState.Connected);

                // Send/Receive some messages in both directions
                await serialChannel.SendAsync("Message sent through serial channel");

                // Check for written message
                Assert.AreEqual(receivedString, "<Message sent through serial channel>");
            }
            finally
            {
                await serialChannel.StopAsync();
            }
        }
Exemplo n.º 29
0
        public void IsSubscribed_Returns_False_If_Subscriber_IsNot_Subscribed()
        {
            var mockSubscriber = new Mock <ISubscriber>();

            mockSubscriber.SetupGet(x => x.MessageType).Returns(typeof(string));

            var messageChannel = new MessageChannel();

            Assert.False(messageChannel.IsSubscribed(mockSubscriber.Object));
        }
Exemplo n.º 30
0
 /// <summary>
 /// Stops Listening to a given channel
 /// </summary>
 /// <param name="channelToListen">Channel to stop listening to</param>
 public void StopChannelListening(MessageChannel channelToListen)
 {
     if (_registeredChannelConsumers.ContainsKey(channelToListen))
     {
         _channel.BasicCancel(_registeredChannelConsumers[channelToListen].ConsumerTag);
         _registeredChannelConsumers.Remove(channelToListen);
     }
     else
     {
         throw new Exception("No Channel Listener Consumer registered!");
     }
 }
Exemplo n.º 31
0
        private async void UnsubChannel(object id)
        {
            string channelId   = (string)id;
            string requestPath = Constants.SERVER_PATH + Constants.LEAVE_CHANNEL_PATH + "/" + ServerService.instance.username + "/" + channelId;

            try
            {
                var response = await ServerService.instance.client.DeleteAsync(requestPath);

                if (!response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    ErrorServerMessage serverMessage = JsonConvert.DeserializeObject <ErrorServerMessage>(message);
                    ShowMessageBox(serverMessage.message);
                    return;
                }

                JObject responseJson = JObject.Parse(await response.Content.ReadAsStringAsync());

                if (!(responseJson.ContainsKey("status") && responseJson.ContainsKey("message")))
                {
                    ShowMessageBox("Error parsing server response");
                    return;
                }

                if (responseJson.GetValue("status").ToString() == "200")
                {
                    if (_selectedChannel.ID == channelId)
                    {
                        ChangeChannel(Constants.DEFAULT_CHANNEL);
                    }

                    MessageChannel leftChannel = new MessageChannel(channelId, false, false);
                    _subChannels.Remove(_subChannels.SingleOrDefault(i => i.id == channelId));

                    await Application.Current.Dispatcher.Invoke(async delegate
                    {
                        NotSubChannels.Clear();
                        var notSubChannelReq = await ServerService.instance.client.GetAsync(Constants.SERVER_PATH + Constants.NOT_SUB_CHANNELS_PATH + "/" + ServerService.instance.username);
                        ProcessChannelRequest(notSubChannelReq, NotSubChannels, false);
                    });
                }
                else
                {
                    ShowMessageBox(responseJson.GetValue("message").ToString());
                }
            }
            catch (Exception e)
            {
                ShowMessageBox(e.Message);
            }
        }
Exemplo n.º 32
0
        public Item(Vector position, Hashtable properties, string id, byte type, MmoWorld world)
        {
            this.Position = position;
            this.eventChannel = new MessageChannel<ItemEventMessage>(ItemEventMessage.CounterEventSend);
            this.disposeChannel = new MessageChannel<ItemDisposedMessage>(MessageCounters.CounterSend);
            this.positionUpdateChannel = new MessageChannel<ItemPositionMessage>(MessageCounters.CounterSend);
            this.properties = properties ?? new Hashtable();
            if (properties != null)
            {
                this.PropertiesRevision++;
            }

            this.id = id;
            this.world = world;
            this.type = type;
        }
Exemplo n.º 33
0
        public void postChat(MessageChannel channel,string content)
        {
            // 向服务器请求的代码
            if (channel == MessageChannel.ChannelPrivate ||
                channel == MessageChannel.ChannelWorld ||
                channel == MessageChannel.ChannelGuild)
            {
                Protocol.C2SChatMessageReq chatRequest = new Protocol.C2SChatMessageReq();
                chatRequest.chat_type = (int)channel;
                if (channel == MessageChannel.ChannelPrivate)
                {
                    chatRequest.chat_target_guid = 439715978;   // > Debug
                }

                chatRequest.chat_content = Encoding.UTF8.GetBytes(content);
                NetworkEvent.sendPacket<Protocol.C2SChatMessageReq>(chatRequest);
            }
            else
            {
                writeLine(MessageChannel.ChannelSystem, "错误", SystemUid, "信息“" + content + "”发送失败!" );
            }
        }
Exemplo n.º 34
0
 public void writeLine(MessageChannel channel, string uname, UInt64 from_uid, string content)
 {
     wb.Document.InvokeScript("addChatMessage", new Object[] { (int)channel, from_uid, uname, content });
 }
Exemplo n.º 35
0
        static void Main(string[] args)
        {
            log4net.Config.BasicConfigurator.Configure();
            Tracer.Initialize(new TracerManager());

            AppDomain.CurrentDomain.UnhandledException += (s, e) => tracer.Error(e.ExceptionObject);
            TaskScheduler.UnobservedTaskException += (s, e) => tracer.Error(e.Exception);

            try
            {
                short port = 1055;
                if (args.Length > 0)
                    port = short.Parse(args[0]);

                ServiceRegistration.Start(port);

                var devices = new DeviceRegistry();
                var topics = new Dictionary<string, TopicType>();
                var stream = new EventStream();
                var state = new SystemState();
                var impulseStore = new FileImpulseStore("Store\\Impulses");
                var commandStore = new FileCommandStore("Store\\Commands");

                SetupTracing(stream);

                // Hook up event stream consumers that perform orthogonal operations.
                new ClockImpulses(Clock.Default).Connect(stream);
                new CommandToBytes().Connect(stream);
                new SensedToImpulse(Sensorium.Clock.Default, topics).Connect(stream);
                new SetSystemState(state).Connect(stream);
                // Hook up stores
                new StoreCommands(commandStore).Connect(stream);
                new StoreImpulses(impulseStore).Connect(stream);
                
                var brain = new Brain(stream, devices, topics, state, Clock.Default);

                if (File.Exists("Server.cfg"))
                {
                    var setup = Setup.Read("Server.cfg", File.ReadAllText("Server.cfg"));
                    Console.WriteLine("Applying configuration file:");
                    Console.WriteLine(setup.ToString(true));
                    foreach (var topic in setup.Topics)
                    {
                        topics[topic.Key] = topic.Value;
                    }
                    foreach (var device in setup.DeviceTypes)
                    {
                        devices.Register(device.Type, device.Commands.ToArray());
                    }
                    foreach (var behavior in setup.Behaviors)
                    {
                        brain.Behave(behavior);
                    }
                }

                var server = new ReactiveListener(port);
                server.Connections.Subscribe(socket =>
                {
                    Console.WriteLine("New socket connected {0}", socket.GetHashCode());

                    var binary = new BinaryChannel(socket);
                    var message = new MessageChannel(binary);
                    var device = new TcpDevice(brain, message, Clock.Default);

                    connectedDevices.Add(device);
                    device.Disconnected += (sender, e) => socket.Dispose();
                    socket.Disconnected += (sender, e) =>
                        {
                            Console.WriteLine("Socket disconnected {0}", sender.GetHashCode());
                            connectedDevices.Remove(device);
                            device.Dispose();
                        };
                    socket.Disposed += (sender, e) =>
                        {
                            Console.WriteLine("Socket disposed {0}", sender.GetHashCode());
                            connectedDevices.Remove(device);
                            device.Dispose();
                        };
                });

                server.Start();

                Console.WriteLine("Define topic:");
                Console.WriteLine("  topic [void|bool|number|string] [name]");
                Console.WriteLine("Define device:");
                Console.WriteLine("  device [type] [comma-separated list of topic commands the device can receive]");
                Console.WriteLine("Define behavior:");
                Console.WriteLine("  behave [when then expression]");

                Console.WriteLine("Press Enter to exit");

                string line = null;
                while ((line = Console.ReadLine()) != "")
                {
                    if (line == Environment.NewLine)
                        return;

                    if (line.StartsWith("topic"))
                    {
                        var topic = TopicParser.Parse(line);
                        topics[topic.Item1] = topic.Item2;
                        Console.WriteLine("Registered topic '{0}' of type {1}", topic.Item1, topic.Item2);
                    }
                    else if (line.StartsWith("device"))
                    {
                        var device = DeviceParser.Parse(line);
                        devices.Register(device.Item1, device.Item2.ToArray());
                        Console.WriteLine("Registered device type '{0}' to receive commands {1}", device.Item1, string.Join(", ", device.Item2.Select(s => "'" + s + "'")));
                    }
                    else if (line.StartsWith("behave "))
                    {
                        try
                        {
                            brain.Behave(line.Substring(7));
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e.Message);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed: {0}", e);
            }
        }
 public virtual void Send(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel, bool releaseMessage) {
   SharingClientPINVOKE.NetworkConnection_Send__SWIG_0(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel, releaseMessage);
 }
Exemplo n.º 37
0
 /// <summary>Maps the filterable channel messages to the proper filter.</summary>
 internal static MessageFilter GetChannelMessageFilter(MessageChannel mc)
 {
     switch (mc) {
         case MessageChannel.Guild:
             return MessageFilter.GuildChat;
         case MessageChannel.Group:
             return MessageFilter.GroupChat;
         case MessageChannel.Shout:
             return MessageFilter.Shout;
         case MessageChannel.Auction:
             return MessageFilter.Auction;
         case MessageChannel.OOC:
             return MessageFilter.OOC;
         default:
             return MessageFilter.None;
     }
 }
Exemplo n.º 38
0
        static void Main(string[] args)
        {
            log4net.Config.BasicConfigurator.Configure();
            Tracer.Initialize(new TracerManager());
            AppDomain.CurrentDomain.UnhandledException += (s, e) => Tracer.Get<Client>().Error(e.ExceptionObject);
            TaskScheduler.UnobservedTaskException += (s, e) => Tracer.Get<Client>().Error(e.Exception);

            try
            {
                var ipPort = ServiceDiscovery.DiscoverBroker();
                var host = ipPort.Ip;
                var port = ipPort.Port;

                //var host = "localhost";
                //var port = 1055;

                //if (args.Length > 0)
                //    host = args[0];
                //if (args.Length > 1)
                //    port = int.Parse(args[1]);

                var client = new ReactiveClient(host, port);
                var binary = new BinaryChannel(client);
                var channel = new MessageChannel(binary);

                channel.Receiver.SubscribeOn(TaskPoolScheduler.Default).Subscribe(
                    s =>
                    {
                        Console.WriteLine("Received: {0}", s);
                        // Report state change immediately.
                        var topic = s as Topic;
                        if (topic != null)
                        {
                            Console.WriteLine("Sending back to cause state change: {0}", topic);
                            channel.SendAsync(topic);
                        }
                    },
                    e => Console.WriteLine(e),
                    () => Console.WriteLine("Socket receiver completed"));

                Console.WriteLine("To connect, enter: connect [device id] [device type]");
                Console.WriteLine("To send message once connected: [topic] = [value], where [value] can be:");
                Console.WriteLine("  * a boolean (words 'true' or 'false' without quotes)");
                Console.WriteLine("  * a number (a numberic value followed by the suffic 'f' denoting a floating point number)");
                Console.WriteLine("  * a string (without quotes)");
                Console.WriteLine("If no value is provided after the topic, then it's assumed to be a void topic (no payload needed)");

                string line = null;
                while ((line = Console.ReadLine()) != "")
                {
                    if (line.StartsWith("connect "))
                    {
                        var connectInfo = line.Substring(8).Split(' ');
                        var deviceId = connectInfo[0];
                        var deviceType = connectInfo[1];

                        Console.WriteLine("Connecting...");
                        try
                        {
                            client.ConnectAsync().Wait();
                            channel.SendAsync(new Connect(deviceId, deviceType)).Wait();
                            Console.WriteLine("Connected!");
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Failed to connect: {0}", e);
                        }
                    }
                    else if (line == "disconnect")
                    {
                        if (client.IsConnected)
                        {
                            Console.WriteLine("Disconnecting...");
                            try
                            {
                                channel.SendAsync(new Disconnect()).Wait();
                                client.Disconnect();
                                Console.WriteLine("Disconnected!");
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("Failed to disconnect: {0}", e);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Client was already disconnected.");
                        }
                    }
                    else if (line == "r")
                    {
                        Console.WriteLine("Reconnecting...");
                        client.Disconnect();
                        client.ConnectAsync().Wait();
                        Console.WriteLine("IsConnected = {0}. Re-send Connect message.", client.IsConnected);
                    }
                    else
                    {
                        Console.WriteLine("Sending...");
                        if (line.IndexOf('=') == -1)
                        {
                            channel.SendAsync(new Topic(line.Trim()));
                        }
                        else
                        {
                            var parts = line.Split(new[] { '=' }, StringSplitOptions.RemoveEmptyEntries)
                                .Select(s => s.Trim()).ToArray();
                            if (parts[1].Equals("true", StringComparison.OrdinalIgnoreCase))
                                channel.SendAsync(new Topic(parts[0], Payload.ToBytes(true)));
                            else if (parts[1].Equals("false", StringComparison.OrdinalIgnoreCase))
                                channel.SendAsync(new Topic(parts[0], Payload.ToBytes(false)));
                            else if (parts[1].EndsWith("f"))
                                channel.SendAsync(new Topic(parts[0], Payload.ToBytes(float.Parse(parts[1].Substring(0, parts[1].Length - 1)))));
                            else
                                channel.SendAsync(new Topic(parts[0], Payload.ToBytes(parts[1])));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Failed: {0}", e);
            }
        }
 public virtual void Broadcast(NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel) {
   SharingClientPINVOKE.NetworkConnection_Broadcast__SWIG_1(swigCPtr, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel);
 }
 public virtual void SendTo(User user, ClientRole deviceRole, NetworkOutMessage msg, MessagePriority priority, MessageReliability reliability, MessageChannel channel) {
   SharingClientPINVOKE.NetworkConnection_SendTo__SWIG_1(swigCPtr, User.getCPtr(user), (int)deviceRole, NetworkOutMessage.getCPtr(msg), (int)priority, (int)reliability, (int)channel);
 }
Exemplo n.º 41
0
        /// <summary>Sends a communication message (tell, say, etc.) to the player.  Since we are sending this player the message, it is the listener.</summary>
        /// <param name="fromName">An optionally blank speaker's name.</param>
        /// <param name="toName">An optionally blank target's name.</param>
        /// <remarks>Messages should already be scrubbed for validity (GM messages intended only for GMs, etc.)</remarks>
        internal void SendChannelMessage(string fromName, string toName, MessageChannel chan, Language lang, int langSkill, string message)
        {
            ChannelMessage cm = new ChannelMessage();
            cm.ChannelId = (int)chan;
            cm.Message = message;
            cm.SpeakerName = string.IsNullOrEmpty(fromName) ? "ZServer" : fromName;     // Why 'ZServer'?

            // Looks like even though we know who the message is intended for, the target field can be blank
            if (!string.IsNullOrEmpty(toName))
                cm.TargetName = toName;
            else if (chan == MessageChannel.Tell)
                cm.TargetName = this.Name;

            int listenerSkill;
            if ((int)lang < Character.MAX_LANGUAGE) {   // Is the language being spoken within the allowable range
                listenerSkill = this.PlayerProfile.Languages[(int)lang];
                cm.LanguageId = (int)lang;
                if (chan == MessageChannel.Group && listenerSkill < 100) {  // group messages in unmastered languages, check for skill up
                    if ((this.PlayerProfile.Languages[(int)lang] <= langSkill) && fromName != this.Name)
                        CheckForSkillUp(lang, langSkill);
                }
            }
            else {
                // Not in allowable range, assume common tongue
                listenerSkill = this.PlayerProfile.Languages[(int)Language.CommonTongue];
                cm.LanguageId = (int)Language.CommonTongue;
            }

            // Set effective language skill = lower of sender and receiver skills
            int effSkill = Math.Min(langSkill, listenerSkill);
            effSkill = Math.Min(effSkill, 100); // Cap at 100
            cm.LanguageSkill = effSkill;

            EQRawApplicationPacket cmPack = new EQRawApplicationPacket(AppOpCode.ZonePlayerToBind, this.Client.IPEndPoint, cm.Serialize());
            this.Client.SendApplicationPacket(cmPack);
        }
Exemplo n.º 42
0
        public static void CheckTriggers( Player player, String Message, MessageChannel Channel )
        {
            //Check swears in PMs
            if ( Channel == MessageChannel.PM ) {
                if ( File.Exists( "SwearWords.txt" ) && Settings.AnnounceWarnSwear ) {
                    if ( !player.Can( Permission.Swear ) ) {
                        if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.SwearFullTrigger ) ) {
                            Methods.SendMessage( player, Color.PM + "Please refrain from swearing :)", MessageChannel.PM );
                            return;
                        }
                    }
                }
            }
            if ( Channel == MessageChannel.PM )
                return; //ignore PMs for this

            //What is my next rank?
            if ( Triggers.MatchesTrigger( Message, RankTriggers.NextRankFullTrigger ) && Settings.AnnounceRank ) {
                if ( player.Info.Rank != RankManager.HighestRank ) {
                    Methods.SendMessage( player.ClassyName + "&F, your next rank is " + player.Info.Rank.NextRankUp.ClassyName, Channel );
                    Methods.AddTYPlayer( player );
                } else {
                    Methods.SendMessage( player.ClassyName + "&F, you are already the highest rank!", Channel );
                    Methods.AddTYPlayer( player );
                }
                return;
            }
            //Caps checker
            if ( IsAllUpper( Message ) && Settings.AnnounceCaps ) {
                Methods.SendPM( player, "Please refrain from abusing caps." );
            }
            //How do I get the next rank?
            if ( Triggers.MatchesTrigger( Message, RankTriggers.HowDoFullTrigger ) && Settings.AnnounceRank ) {
                if (player.Info.Rank == RankManager.HighestRank)
                {
                    Methods.SendMessage(player.ClassyName + "&F, you are already the highest rank!", Channel);
                    Methods.AddTYPlayer(player);
                    return;
                }
                if (player.Can(Permission.ReadStaffChat))
                {
                    Methods.SendMessage( player.ClassyName + "&f, " + Settings.HowToGetRankedStaffString, Channel );
                    Methods.AddTYPlayer( player );
                } else {
                    Methods.SendMessage( player.ClassyName + "&f, " + Settings.HowToGetRankedBuilderString, Channel );
                    Methods.AddTYPlayer( player );
                }
                return;
            }

            //I was demoted
            if ( Triggers.MatchesTrigger( Message, RankTriggers.DemotedFullTrigger ) && Settings.AnnounceDemoted ) {
                Methods.SendMessage( player.ClassyName + "&F, if you were wrongfully demoted you can appeal at " + Settings.Website, Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //How do I PM players?
            if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.PMFullTrigger ) && Settings.AnnouncePM ) {
                Methods.SendMessage( player.ClassyName + "&f, to PM, type '@playername [message]'.", Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //What is the time
            if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.TimeFullTrigger ) && Settings.AnnounceTime ) {
                Methods.SendMessage( player.ClassyName + "&f, the server's time is currently " + DateTime.Now.ToShortTimeString(), Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //I fell
            if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.FellFullTrigger ) && Settings.AnnounceFell ) {
                Methods.SendMessage( player.ClassyName + Settings.StuckMessage, Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //What are my hours?
            if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.HoursFullTrigger ) && Settings.AnnounceHours ) {
                Methods.SendMessage( Methods.GetPlayerTotalHoursString( player ), Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //What is the website?
            if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.WebFullTrigger ) ) {
                Methods.SendMessage( player.ClassyName + "&F, the server's website is " + Settings.Website, Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //What is the server's name?
            if ( Triggers.MatchesTrigger( Message, MaintenanceTriggers.ServFullTrigger ) && Settings.AnnounceServerName ) {
                Methods.SendMessage( player.ClassyName + "&F, you are currently playing on " + ConfigKey.ServerName.GetString(), Channel );
                Methods.AddTYPlayer( player );
                return;
            }

            //!Spleef
            if ( Triggers.MatchesTrigger( Message, MiscTriggers.SpleefFullTrigger ) && Settings.AnnounceSpleefTimer ) {
                if ( SpleefInProgress ) {
                    Methods.SendPM( player, "There is already a spleef timer!" );
                    return;
                }
                try {
                    Thread t = new Thread( new ThreadStart( delegate {
                        SpleefInProgress = true;
                        for ( int i = 3; i >= 1; i-- ) {
                            Thread.Sleep( 1000 );
                            Methods.SendChat( i.ToString() );
                        }
                        Thread.Sleep( 1000 );
                        Methods.SendChat( "&WSPLEEF!" );
                        SpleefInProgress = false;
                    } ) );
                    t.Start();
                } catch { SpleefInProgress = false; }
                return;
            }

            //Alice, Joke
            if ( Triggers.MatchesNameAndTrigger( Message, MiscTriggers.JokeFullTrigger ) && Settings.AnnounceJokes ) {
                Methods.SendMessage( Methods.GetRandomJoke(), MessageChannel.Global );
                return;
            }

            //how do I fly? Using CM now since Java 7 is such a pain
            if ( Triggers.MatchesTrigger( Message, MiscTriggers.FlyFullTrigger ) && Settings.AnnounceFly ) {
                Methods.SendMessage( player.ClassyName + "&F, to fly, type /fly, or download ClassiCube at http://Classicube.net.", MessageChannel.Global );
                Methods.AddTYPlayer( player );
                return;
            }

            //fun fact
            if ( Triggers.MatchesNameAndTrigger( Message, MiscTriggers.FunFactFullTrigger ) && Settings.AnnounceJokes ) {
                Methods.SendMessage( Methods.GetRandomStatString( player ), Channel );
                return;
            }

            //Thanks checking
            if ( Triggers.MessageIsTrigger( Message, MiscTriggers.ThanksFullTrigger ) ) {
                lock ( Values.AwaitingThanks ) {
                    foreach ( Values.TYObject _O in Values.AwaitingThanks ) {
                        if ( _O.player == player ) {
                            double totalTime = ( DateTime.Now - _O.Time ).TotalSeconds;
                            if ( totalTime <= 20 ) {
                                Methods.SendMessage( Values.ThankyouReplies[new Random().Next( 0, Values.ThankyouReplies.Length )], MessageChannel.Global );
                            }
                        }
                    }
                    Methods.RemoveTYPlayer( player );
                }
            }
        }