Exemple #1
0
        public void BlockingReadData()
        {
            // Data buffer for incoming data. Used in example on MSDN - see link at top of class
            byte[] bytes = new byte[1024];
            while (_running)
            {
                try {
                    // Create a TCP/IP socket.
                    _client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    var pbxEndpoint = new IPEndPoint(_ipAddress, _port);
                    _client.Connect(pbxEndpoint);
                    _log.LogInformation($"Socket connected to {_client.RemoteEndPoint}");

                    // Encode the data string into a byte array.
                    while (_client.Connected)
                    {
                        int bytesRec = _client.Receive(bytes);
                        DataArrived?.Invoke(this, new TransportDataEventArgs(bytes, bytesRec));
                        //_log.LogDebug($"Received message: {Encoding.ASCII.GetString(bytes, 0, bytesRec)}");
                    }
                }
                catch (SocketException ex) {
                    _log.LogWarning($"Unexpected Socket Disconnection: {ex}");
                }
                catch (Exception ex) {
                    _log.LogWarning($"Unexpected Exception: {ex}");
                }
                WaitAndDestroyBrokenSocket();
            }
        }
Exemple #2
0
    private static void Runner(object obj)
    {
        var ipep    = new IPEndPoint(IPAddress.Any, 4445);
        var SrvSock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

        SrvSock.Bind(ipep);
        var      sender = new IPEndPoint(IPAddress.Any, 4445);
        EndPoint Remote = sender;

        while (true)
        {
            var data = new byte[1024];
            var recv = SrvSock.ReceiveFrom(data, ref Remote);
            var str  = Encoding.UTF8.GetString(data, 0, recv);
            if (str == "exit")
            {
                break;
            }
            try
            {
                var result = str.Split(',').Select(float.Parse).ToArray();
                if (result.Length == 2)
                {
                    DataArrived?.Invoke(result);
                }
            }
            catch (Exception e)
            {
                Debug.Log(e);
            }

            SrvSock.SendTo(data, data.Length, SocketFlags.None, Remote);
        }
    }
Exemple #3
0
 public TcpContext(Socket client)
 {
     this.client = client;
     loop        = Dispatcher.BackgroundThread(() => {
         while (true)
         {
             try
             {
                 var buf    = new byte[1024];
                 int len    = 0;
                 var buffer = new MemoryStream();
                 while (true)
                 {
                     len = client.Receive(buf);
                     buffer.Write(buf, 0, len);
                     if (buf[len - 1] == 0x00)
                     {
                         // 字符串结束
                         break;
                     }
                 }
                 var bytes = buffer.ToArray();
                 var str   = Encoding.UTF8.GetString(bytes);
                 DataArrived?.Invoke(client, str);
             }
             catch
             {
                 server.NotifyConnectionLost(client);
             }
         }
     });
 }
Exemple #4
0
        protected override void Radio_Interrupted(object sender, InterruptedEventArgs e)
        {
            base.Radio_Interrupted(sender, e);

            //lock (SyncRoot)
            {
                MaxRetries = e.StatusRegister.MaximunTransmitRetries;
                if (MaxRetries || e.StatusRegister.TransmitDataSent)
                {
                    _sendCompleteEvent.Set();
                }
                if (e.StatusRegister.ReceiveDataReady)
                {
                    DataArrived?.Invoke(this, Reader.ReadBufferAll());
                }
                lock (SyncRoot)
                {
                    Radio.OperatingMode = OperatingModes.StandBy;
                    e.StatusRegister.ResetToDefault();
                    e.StatusRegister.Save();
                    if (!_isSending)
                    {
                        Radio.OperatingMode = OperatingModes.ReceiveMode;
                    }
                }
            }
        }
Exemple #5
0
        private void DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            ReceivedData     = _arduinoPort.ReadExisting();
            _lastLineBuffer += ReceivedData;

            while (_lastLineBuffer.Contains(NEW_LINE_CHAR))
            {
                LastLine        = _lastLineBuffer.GetBefore(NEW_LINE_CHAR);
                _lastLineBuffer = _lastLineBuffer.GetAfter(NEW_LINE_CHAR);
                LineArrived?.Invoke(this, new EventArgs());
            }

            DataArrived?.Invoke(this, new EventArgs());
        }
    public void Start(DataArrived showMessageDelegate)
    {
      string szData = "\r\n";
      byte[] byData = System.Text.Encoding.ASCII.GetBytes(szData);

      myDelegate = new DataArrived(showMessageDelegate);
      thread_ = new Thread(new ThreadStart(ReceiveMessage));
      thread.IsBackground = true;

      IPAddress ip = IPAddress.Parse(IP_);
      IPEndPoint ipEndPoint = new IPEndPoint(ip, port_);

      udpClient.Send(byData, byData.Length, ipEndPoint);

      thread.Start();
    }
        protected override void Radio_Interrupted(object sender, InterruptedEventArgs e)
        {
            if (!e.StatusRegister.ReceiveDataReady)
            {
                return;
            }
            base.Radio_Interrupted(sender, e);

            DataArrived?.Invoke(this, Reader.ReadBufferAll());
            lock (SyncRoot)
            {
                Radio.OperatingMode = OperatingModes.StandBy;
                e.StatusRegister.ResetToDefault();
                e.StatusRegister.Save();
                Radio.OperatingMode = OperatingModes.ReceiveMode;
            }
        }
 public void BlockingReadData()
 {
     _sp = GetSerialPort(_log, _config.SerialPort);
     _log.LogInformation($"Opening port {_config.SerialPort}");
     _sp.Open();
     byte[] rawRxBuf = new byte[SerialReadBufSize];
     while (!_stopRequested)
     {
         try {
             var bytesRead = _sp.Read(rawRxBuf, 0, rawRxBuf.Length);
             if (bytesRead > 0)
             {
                 DataArrived?.Invoke(this, new TransportDataEventArgs(rawRxBuf, bytesRead));
                 //_log.LogDebug($"Received message: {Encoding.ASCII.GetString(rawRxBuf, 0, bytesRead)}");
             }
         }
         catch (IOException) {
             _log.LogInformation("Threaded serial lexer was stopped due to (expected) I/O exception");
         }
     }
 }
Exemple #9
0
        private void wis_DataAvailable(object sender, WaveInEventArgs e)
        {
            Console.WriteLine(DateTime.Now + ":" + DateTime.Now.Millisecond);

            var ret        = 0;
            var bp         = Marshal.AllocHGlobal(e.BytesRecorded);
            var status     = AudioStatus.IsrAudioSampleContinue;
            var epStatus   = EpStatus.IsrEpNull;
            var recStatus  = RecogStatus.IsrRecNull;
            var rsltStatus = RecogStatus.IsrRecNull;

            //ep_status        端点检测(End-point detected)器所处的状态
            //rec_status       识别器所处的状态
            //rslt_status      识别器所处的状态
            Marshal.Copy(e.Buffer, 0, bp, e.BytesRecorded);
            //开始向服务器发送音频数据
            ret = AsrDll.QISRAudioWrite(_sessID, bp, (uint)e.BytesRecorded, status, ref epStatus, ref recStatus);
            if (ret != 0)
            {
                throw new Exception("QISRAudioWrite err,errCode=" + ((ErrorCode)ret).ToString("G"));
            }

            //服务器返回部分结果
            if (recStatus == RecogStatus.IsrRecStatusSuccess)
            {
                var p = AsrDll.QISRGetResult(_sessID, ref rsltStatus, 0, ref ret);
                if (p != IntPtr.Zero)
                {
                    var tmp = FlyTts.Ptr2Str(p);
                    DataArrived?.Invoke(this, new DataArrivedEventArgs(tmp)); //激发识别数据到达事件
                    Console.WriteLine(@"服务器返回部分结果!-->" + tmp);
                }
            }
            Thread.Sleep(500);
            Marshal.FreeHGlobal(bp);
            //System.Console.WriteLine(System.DateTime.Now + ":" + System.DateTime.Now.Millisecond);
        }
Exemple #10
0
 private void DataRecieved(object sender, RJCP.IO.Ports.SerialDataReceivedEventArgs e)
 {
     LastRecieved = _arduinoPort.ReadExisting().Replace('\n'.ToString(), "");;
     DataArrived?.Invoke(this, new EventArgs());
 }
 private void InvokeDataArrived(CourierNetwork network, byte[] data, int offset, int length, IPEndPoint remoteEndpoint)
 {
     DataArrived?.Invoke(network, data, offset, length, remoteEndpoint);
 }
 protected virtual void OnDataArrived(DataArrivedEventArgs e)
 {
     DataArrived?.Invoke(this, e);
 }
Exemple #13
0
        public void MessagePoll()
        {
            NetMQ.Msg msg = new NetMQ.Msg();
            msg.InitEmpty();
            if (_socket.TryReceive(ref msg, TimeSpan.FromMilliseconds(1)))
            {
                switch ((MessageType)msg.Data[0])
                {
                case MessageType.Heartbeat:     //heartbeat

                    break;

                case MessageType.Debug:     // debug
                    if (_socket.TryReceive(ref msg, TimeSpan.FromMilliseconds(1)))
                    {
                        string text = System.Text.Encoding.ASCII.GetString(msg.Data);
                        if (text == "{}")
                        {
                            break;
                        }
                        JObject jo   = (JObject)JsonConvert.DeserializeObject(text);
                        var     type = jo["type"].Value <string>();
                        if (type == "get-program")
                        {
                            GameState.Program = DreyProgram.FromJson(jo);
                            DataArrived?.Invoke(new GetProgramEventArgs()
                            {
                                Program = GameState.Program
                            });
                        }
                        else if (type == "announce")
                        {
                            var deserialized = JsonConvert.DeserializeObject <GameState>(text, new ObjectTypeDeserializer());
                            GameState.Announce(deserialized);
                            DataArrived?.Invoke(new AnnounceEventArgs()
                            {
                                State = GameState
                            });
                        }
                        else if (type == "set-breakpoint")
                        {
                            var address = jo["address"].Value <int>();
                            GameState.Breakpoints.Add(address);
                            DataArrived?.Invoke(new BreakPointEventArgs()
                            {
                                Address = address, Set = true
                            });
                        }
                        else if (type == "clear-breakpoint")
                        {
                            var address = jo["address"].Value <int>();
                            GameState.Breakpoints.Remove(address);
                            DataArrived?.Invoke(new BreakPointEventArgs()
                            {
                                Address = address, Set = false
                            });
                        }
                        else if (type == "debug-msg")
                        {
                            var msg2 = jo["message"].Value <string>();
                            DataArrived?.Invoke(new DebugMessageEventArgs()
                            {
                                Message = msg2
                            });
                        }
                        else if (type == "debug-msg-line")
                        {
                            var msg3 = jo["message"].Value <string>();
                            DataArrived?.Invoke(new DebugMessageEventArgs()
                            {
                                Message = msg3 + Environment.NewLine
                            });
                        }
                    }
                    break;

                case MessageType.Data:     // data
                    if (_socket.TryReceive(ref msg, TimeSpan.FromMilliseconds(1)))
                    {
                        string text = System.Text.Encoding.ASCII.GetString(msg.Data);

                        var ser = new Newtonsoft.Json.JsonSerializer();
                        using (var reader = new JsonTextReader(new StringReader(text)))
                        {
                            PendingChoice choice = ser.Deserialize <PendingChoice>(reader);
                            GameState.PendingChoice = choice;
                        }

                        DataArrived?.Invoke(new DataEventArgs()
                        {
                            Data = text
                        });
                    }

                    break;
                }
            }
        }
Exemple #14
0
 public void HandleDataArrived(byte[] data)
 {
     DataArrived?.BeginInvoke(network, data, 0, data.Length, network.LocalEndpoint, null, null);
 }
Exemple #15
0
 private void Context_DataArrived(Socket client, object ext)
 {
     DataArrived?.Invoke(client, ext);
 }
Exemple #16
0
        /// <summary>
        /// 进行声音识别
        /// </summary>
        /// <param name="inFile">音频文件,pcm无文件头,采样率16k,数据16位,单声道</param>
        /// <param name="outFile">输出识别结果到文件</param>
        public void Audio2Txt(string inFile, string outFile = null)
        {
            var ret    = 0;
            var result = "";

            try
            {
                //模拟录音,输入音频
                if (!File.Exists(inFile))
                {
                    throw new Exception("文件" + inFile + "不存在!");
                }
                if (inFile.Substring(inFile.Length - 3, 3).ToUpper() != "WAV" && inFile.Substring(inFile.Length - 3, 3).ToUpper() != "PCM")
                {
                    throw new Exception("音频文件格式不对!");
                }
                var fp = new FileStream(inFile, FileMode.Open);
                if (inFile.Substring(inFile.Length - 3, 3).ToUpper() == "WAV")
                {
                    fp.Position = 44;
                }
                var buff = new byte[BufferNum];
                var bp   = Marshal.AllocHGlobal(BufferNum);
                int len;
                var status     = AudioStatus.IsrAudioSampleContinue;
                var epStatus   = EpStatus.IsrEpNull;
                var recStatus  = RecogStatus.IsrRecNull;
                var rsltStatus = RecogStatus.IsrRecNull;
                //ep_status        端点检测(End-point detected)器所处的状态
                //rec_status       识别器所处的状态
                //rslt_status      识别器所处的状态
                while (fp.Position != fp.Length)
                {
                    len = fp.Read(buff, 0, BufferNum);
                    Marshal.Copy(buff, 0, bp, buff.Length);
                    //开始向服务器发送音频数据
                    ret = AsrDll.QISRAudioWrite(_sessID, bp, (uint)len, status, ref epStatus, ref recStatus);
                    if (ret != 0)
                    {
                        fp.Close();
                        throw new Exception("QISRAudioWrite err,errCode=" + ((ErrorCode)ret).ToString("G"));
                    }
                    //服务器返回部分结果
                    if (recStatus == RecogStatus.IsrRecStatusSuccess)
                    {
                        var p = AsrDll.QISRGetResult(_sessID, ref rsltStatus, WaitTime, ref ret);
                        if (p != IntPtr.Zero)
                        {
                            var tmp = FlyTts.Ptr2Str(p);
                            DataArrived?.Invoke(this, new DataArrivedEventArgs(tmp));
                            result += tmp;
                            Console.WriteLine(@"返回部分结果!:" + tmp);
                        }
                    }
                    Thread.Sleep(500);
                }
                fp.Close();

                //最后一块数据
                status = AudioStatus.IsrAudioSampleLast;

                ret = AsrDll.QISRAudioWrite(_sessID, bp, 1, status, ref epStatus, ref recStatus);
                if (ret != 0)
                {
                    throw new Exception("QISRAudioWrite write last audio err,errCode=" + ((ErrorCode)ret).ToString("G"));
                }
                Marshal.FreeHGlobal(bp);
                var loopCount = 0;
                //最后一块数据发完之后,循环从服务器端获取结果
                //考虑到网络环境不好的情况下,需要对循环次数作限定
                do
                {
                    var p = AsrDll.QISRGetResult(_sessID, ref rsltStatus, WaitTime, ref ret);
                    if (p != IntPtr.Zero)
                    {
                        var tmp = FlyTts.Ptr2Str(p);
                        DataArrived?.Invoke(this, new DataArrivedEventArgs(tmp)); //激发识别数据到达事件
                        result += tmp;
                        Console.WriteLine(@"传完音频后返回结果!:" + tmp);
                    }
                    if (ret != 0)
                    {
                        throw new Exception("QISRGetResult err,errCode=" + ((ErrorCode)ret).ToString("G"));
                    }
                    Thread.Sleep(200);
                } while (rsltStatus != RecogStatus.IsrRecStatusSpeechComplete && loopCount++ < 30);
                if (outFile != null)
                {
                    var fout = new FileStream(outFile, FileMode.OpenOrCreate);
                    fout.Write(Encoding.Default.GetBytes(result), 0, Encoding.Default.GetByteCount(result));
                    fout.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                ret = AsrDll.QISRSessionEnd(_sessID, string.Empty);
                ret = AsrDll.MSPLogout();
                IsrEnd?.Invoke(this, new EventArgs()); //通知识别结束
            }
        }
Exemple #17
0
        private async void HandleClient(Socket clientSocket)
        {
            try {
                clientSocket.NoDelay = true;

                using var stream = new NetworkStream(clientSocket, ownsSocket: true)
                      {
                          ReadTimeout  = 3000,
                          WriteTimeout = 3000,
                      };

                var messageBuffer = new byte[64];
                random.Value !.NextBytes(messageBuffer.AsSpan(0, 32));
                await stream.WriteAsync(messageBuffer.AsMemory(0, 32), cancellationTokenSource.Token);

                // 32字节另一半消息
                // 64字节公钥
                // 64字节签名
                var buffer = new byte[160];
                await stream.FillAsync(buffer, cancellationTokenSource.Token);

                buffer.AsSpan(0, 32).CopyTo(messageBuffer.AsSpan(32));
                byte[] messageHash = Sha256.ComputeHashToArray(messageBuffer);
                if (messageHash[0] != 0)
                {
                    return;                      // 工作量证明,hash前8位必须是0
                }
                var(pubkey, sign) = ReadPublicKeySignature(buffer.AsSpan(32));
                var superAddress = pubkey.ToAddress();
                if (!system.IsProducer(superAddress))
                {
                    return;
                }
                if (!Secp256k1.Secp256k1.Verify(pubkey, messageHash, sign))
                {
                    return;
                }

                // 认证通过,开始处理请求
                stream.ReadTimeout = -1;
                var clientNode = new SuperNode(pubkey, (IPEndPoint)clientSocket.RemoteEndPoint, isReadOnly: true)
                {
                    ClientSocket = clientSocket
                };
                ClientConnected?.Invoke(this, new SuperNodeEventArgs(clientNode, Array.Empty <byte>()));

                try {
                    var arrayPool = ArrayPool <byte> .Create(65536, 1);

                    while (cancellationTokenSource.IsCancellationRequested is false && clientSocket.Connected)
                    {
                        var packetLength = await stream.ReadStructAsync <int>(cancellationTokenSource.Token);

                        if (BitConverter.IsLittleEndian is false)
                        {
                            packetLength = BinaryPrimitives.ReverseEndianness(packetLength);
                        }
                        if (packetLength is 0 || packetLength > 10485760)
                        {
                            return;
                        }

                        byte[] packetBuffer = arrayPool.Rent(packetLength);
                        await stream.FillAsync(packetBuffer.AsMemory(0, packetLength), cancellationTokenSource.Token);

                        // TODO: 处理请求
                        DataArrived?.Invoke(this, new SuperNodeEventArgs(clientNode, packetBuffer.AsMemory(0, packetLength)));

                        arrayPool.Return(packetBuffer);
                    }
                } catch {
                }
                Closed?.Invoke(this, new SuperNodeEventArgs(clientNode, Array.Empty <byte>()));
            } catch {
            }
Exemple #18
0
 public void SetDataHandler(DataArrived Method)
 {
     DataHandler = Method;
 }
Exemple #19
0
 private void _xaReal_ReceiveRealData(string szTrCode)
 {
     Debug.WriteLine("RealData: " + szTrCode);
     _ewh_ReadSync.Set();
     DataArrived?.Invoke(this, new RealDataArgs(szTrCode));
 }
 private void HandleReceiveCompleted(ReceiveState receiveState, byte[] buffer, int offset, int length, IPEndPoint remoteEndpoint)
 {
     DataArrived?.Invoke(network, buffer, offset, length, remoteEndpoint);
     receiveStatePool.ReturnObject(receiveState);
 }