public DataSubscriber(ConfigFlags configurationFlags, KinectProcessor kinectProcessor, UDPSender dataSender)
        {
            _configurationFlags = configurationFlags;

			_dataSender = dataSender;
			_dataSender.StartDataOut();

            kinectProcessor.Reader.MultiSourceFrameArrived += MultiSourceFrameHandler;
        }
        protected override void OnStart()
        {
            base.OnStart();

            if (UseUDP)
            {
                sender = _bootstrap.GetService(ServicesTypes.UDPSend) as UDPSender;
            }

#if HAS_SERVER
            turningVoteData = _bootstrap.GetModel(ModelTypes.TurningVote) as TurningVoteData;
#endif
        }
예제 #3
0
 // 2.00 Aktivierung
 public static void ToogleLanguage()
 {
     if (TextProvider.lang == "en")
     {
         TextProvider.lang = "de";
     }
     else
     {
         TextProvider.lang = "en";
     }
     Debug.Log("Language: " + TextProvider.lang);
     UDPSender.SendUDPStringUTF8(ip, port, "state=intro;action=ripcord;value=" + TextProvider.lang);
     ParagliderGame.GetInstance().updateHudTexts();
 }
        public SessionWorker(string ip, int sendPort, KinectProcessor dataPub, SessionManager sessionManager)
        {
            _ip         = ip;
            _port       = sendPort;
            _udpSender  = new UDPSender(_ip, _port);
            _endSession = false;

            _sessionManager = sessionManager;
            _dataPub        = dataPub;
            _configFlags    = new ConfigFlags();
            _lookupFlags    = new ConfigFlags();
            _flagIterator   = new ConfigFlags();
            _dataSub        = new DataSubscriber(_configFlags, _dataPub, _udpSender);
        }
		public SessionWorker(string ip, int sendPort, KinectProcessor dataPub, SessionManager sessionManager)
		{
			_ip = ip;
			_port = sendPort;
			_udpSender = new UDPSender(_ip, _port);
			_endSession = false;

			_sessionManager = sessionManager;
			_dataPub = dataPub;
			_configFlags = new ConfigFlags();
			_lookupFlags = new ConfigFlags();
			_flagIterator = new ConfigFlags();
			_dataSub = new DataSubscriber(_configFlags, _dataPub, _udpSender);
		}
예제 #6
0
 ///
 /// See 180524_exp_ie_0404_fsb_paraglider_animkom_jn.pdf
 ///
 // 1.00 Standby Modus
 public static void StartStandbymodus()
 {
     state = STATE.STANDBYMODUS;
     UDPSender.SendUDPStringUTF8(ip, port, "state=standbymodus");
     timeUntilStandby = maxTimeUntilStandby;
     if (ParagliderGame.GetInstance() != null)
     {
         if (ParagliderGame.GetInstance().state != ParagliderGame.STATE.RESETTING &&
             ParagliderGame.GetInstance().state != ParagliderGame.STATE.READY)
         {
             ParagliderGame.GetInstance().gameReset();
         }
     }
 }
예제 #7
0
    // 8.0 Unfall / Game Over
    // 9.0 Zeit abgelaufen
    public static void GameOver(bool isTimeout)
    {
        if (state != STATE.GAMEOVER)
        {
            state = STATE.GAMEOVER;
            string action = "crash";
            if (isTimeout)
            {
                action = "timeout";
            }

            UDPSender.SendUDPStringUTF8(ip, port, "state=gameover;action=" + action);
        }
    }
예제 #8
0
    static async Task Main(string[] args)
    {
        //UDPSender udpSender = new UDPSender("192.168.1.201", PORT);
        UDPSender udpSender = new UDPSender("192.168.1.202", PORT);

        udpSender.send(Encoding.UTF8.GetBytes(args[0]));

        var receivedBytes = await udpSender.receiveAsync(1);

        var receivedMessage = Encoding.UTF8.GetString(receivedBytes);

        Console.WriteLine(receivedMessage);

        udpSender.close();
    }
예제 #9
0
        private CommandSender()
        {
            commands = new ConcurrentDictionary <string, string>();
            commands.TryAdd(CommandMetadata.Camera.Identifier, string.Empty);
            commands.TryAdd(CommandMetadata.Movement.LeftIdentifier, string.Empty);
            commands.TryAdd(CommandMetadata.Movement.RightIdentifier, string.Empty);
            commands.TryAdd(CommandMetadata.Pan.Identifier, string.Empty);
            commands.TryAdd(CommandMetadata.Tilt.Identifier, string.Empty);

            udpSender = new UDPSender(Properties.NetworkSettings.Default.RoverIPAddress, Properties.NetworkSettings.Default.CommandsPort);
            Thread t = new Thread(SendCommands);

            t.IsBackground = true;
            t.Start();
        }
예제 #10
0
        // 发送文字消息,调用应用层AppProtocol的接口封包,调用传输层P2PSender/UDPSender发送
        private void SendWordMsg()
        {
            if (chatRoomList.SelectedIndex == -1)
            {
                MessageBox.Show("请选择聊天对象");
                return;
            }
            if (msgTbx.Text == "")
            {
                MessageBox.Show("所发消息不能为空");
                return;
            }


            string targetIP = chatViewModel.selectedChatRoom.addressInfo.IPAddress;

            int    targetPort = P2PListener.GENERALLISTENPORT;
            string srcId      = App.user.userName;
            string destId     = chatViewModel.selectedChatRoom.id;

            if (groupChat.isGroupChatMsg(destId))
            {
                // 群聊消息单独处理
                groupChat.SendGroupWord(msgTbx.Text, destId);
            }
            else
            {
                byte[] data = AppProtocol.PackWord(msgTbx.Text, srcId, destId);
                if (isUDPCbx.IsChecked == true)
                {
                    UDPSender.getInstance().ReliableSendData(data, targetIP); // udp 发送不支持指定端口
                }
                else
                {
                    P2PSender.getInstance().SendData(data, targetIP, targetPort);
                }
            }


            // 本地显示自己的话
            chatViewModel.selectedChatRoom.msgList.Add(new Model.Message {
                description = msgTbx.Text, src = "我"
            });

            updateUI();

            msgTbx.Text = "";
        }
예제 #11
0
    void Awake()
    {
        // Register a local target at the selected port.
        senders[localhost] = new UDPSender(localhost, LocalPort);

        inSocket = new UdpClient(Port);
        inSocket.Client.ReceiveTimeout = 1000;
        Thread thread1 = new Thread(new ThreadStart(Check));

        thread1.IsBackground = true;
        thread1.Start();
        Thread thread2 = new Thread(new ThreadStart(Seconds));

        thread2.IsBackground = true;
        thread2.Start();
    }
예제 #12
0
        public void Play(bool _onlyLocal = true)
        {
            if (CurrentState == State.Playing)
            {
                return;
            }

            if (string.IsNullOrEmpty(filePath))
            {
                return;
            }

            //if (onlyLocal != _onlyLocal)
            //    CloseSenders();

            if (CurrentState == State.Paused)
            {
                Resume();
            }
            else
            {
                resetTimeOffsetRequired = true;

                onlyLocal    = _onlyLocal;
                cancelSource = new CancellationTokenSource();
                cancelToken  = cancelSource.Token;
                runningJob   = new Task(() => RunReaderSenderProcessCallback(filePath, idxFilePath, cancelToken), cancelToken, TaskCreationOptions.None);
                CurrentState = State.Playing;

                // Create Senders
                foreach (PlayPeerInfo p in udpSenders.Values)
                {
                    var u = new UDPSender(p.ID, p.IP, p.Port, false);
                    u.DataRateEvent += OnDataRate;
                    u.Start();

                    p.commsLink = u;
                }

                // Start Timer
                eventTimer = new Timer(OnEventTimer, null, 0, 1000);

                runningJob.Start();

                StatusEvent?.Invoke(CurrentState);
            }
        }
예제 #13
0
        public frmMain()
        {
            InitializeComponent();

            frmSettings settingsLoader = new frmSettings();

            if (settingsLoader.ShowDialog() != DialogResult.OK)
            {
                Environment.Exit(0);
            }

            PORT                            = settingsLoader.selectedPort;
            ROBOT_IP                        = settingsLoader.ipAddress;
            oscReceiver.DoWork             += oscReceiverWorker_DoWork;
            oscReceiver.RunWorkerCompleted += oscReceiverWorker_RunWorkerCompleted;

            dataChart.Series.Clear();
            dataChart.Titles.Clear();
            dataChart.ChartAreas.Clear();
            dataChart.Legends.Clear();

            dataChart.Titles.Add("Robot Data");
            dataChart.ChartAreas.Add(new ChartArea("Robot Data"));
            dataChart.ChartAreas[0].AxisX.Title = "Time";
            dataChart.Legends.Add(new Legend("Legend"));
            dataChart.Legends[0].Title = "Legend";
            dataChart.Series.Add(new Series("Actual Value"));
            dataChart.Series.Add(new Series("Requested Value"));
            dataChart.Series[0].Label     = "Actual Value";
            dataChart.Series[0].Name      = "Actual Value";
            dataChart.Series[0].ChartType = SeriesChartType.FastLine;
            dataChart.Series[1].Label     = "Requested Value";
            dataChart.Series[1].Name      = "Requested Value";
            dataChart.Series[1].ChartType = SeriesChartType.FastLine;


            try
            {
                oscSender = new UDPSender(ROBOT_IP, PORT);
            } catch (Exception)
            {
                MessageBox.Show("Error creating UDP Sender. Make sure your IP Address and port settings are correct!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                Environment.Exit(1);
            }
            programLaunchTime = DateTime.Now;
        }
예제 #14
0
        private void oscSenderWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            UDPSender udpSender    = null;
            bool      reinit       = true;
            var       heartbeatMsg = new OscMessage("/RegisterRequestor");

            while (runThread)
            {
                try
                {
                    if (udpSender == null || reinit)
                    {
                        try
                        {
                            udpSender = new UDPSender(ROBOT_IP, PORT);
                            reinit    = false;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Couldn't create udp listener");
                        }
                    }

                    udpSender.Send(heartbeatMsg);

                    Thread.Sleep(1000);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    try
                    {
                        udpSender.Close();
                    }
                    catch (Exception)
                    {
                    }
                    reinit = true;
                }
            }

            udpSender.Close();
        }
        public void SendBytesNow_LoopBack1k()
        {
            UDPSender us = new UDPSender("127.0.0.1", 7778);

            byte[] data = new byte[1024 * 1];

            UdpClient  listener = new UdpClient(7778);
            IPEndPoint groupEP  = new IPEndPoint(IPAddress.Any, 7778);

            //Blocking Call
            us.SendBytesNow(data, 1024 * 1);

            //BLOCKING CALL
            byte[] bytes = listener.Receive(ref groupEP);

            Assert.AreEqual(us.GetTotalNbDataINOUT(), bytes.Length);

            listener.Close();
        }
예제 #16
0
    IEnumerator WaitForGameReady()
    {
        Debug.Log("WaitForGameReady");
        if (ParagliderGame.GetInstance().state != ParagliderGame.STATE.RESETTING &&
            ParagliderGame.GetInstance().state != ParagliderGame.STATE.READY)
        {
            ParagliderGame.GetInstance().gameReset();
        }

        //Todo: start game and turn on character control to be able to play
        while (ParagliderGame.GetInstance().state != ParagliderGame.STATE.READY)
        {
            Debug.Log("Waiting For GameReady");

            yield return(new WaitForSeconds(0.1f));
        }

        UDPSender.SendUDPStringUTF8(ip, port, "state=game;action=start;");
        ParagliderGame.GetInstance().gameStart();
    }
예제 #17
0
 public static void CallChangedGrips(string currentDirections)
 {
     if (state == STATE.INTRO)
     {
         Debug.Log("" + currentDirections);
         UDPSender.SendUDPStringUTF8(ip, port, "state=intro;action=steps;" + currentDirections);
     }
     else if (state == STATE.STARTGAME && currentDirections == "left=down;right=down")
     {
         StartGame();
     }
     else if (state == STATE.GAME && ParagliderGame.GetInstance().state == ParagliderGame.STATE.ATSTART && currentDirections == "left=down;right=down")
     {
         StartPlaying();
     }
     else if ((state == STATE.ABORT || state == STATE.INACTIVITY) && currentDirections == "left=down;right=down")
     {
         ResumeGame();
     }
 }
예제 #18
0
        //private Dictionary<IPEndPoint, UDPSender> _senders = null;

        private void Replayer_Grid_Initialized(object sender, EventArgs e)
        {
            _sender = new UDPSender();
            _sender.GetSocket().Blocking = false;
            var ret = _sender.GetSocket().SendBufferSize = 50 * 1024 * 1024;

            Replayer_Speed.Items.Add("0.01x");
            Replayer_Speed.Items.Add("0.1x");
            Replayer_Speed.Items.Add("0.25x");
            Replayer_Speed.Items.Add("0.5x");
            Replayer_Speed.Items.Add("0.75x");
            Replayer_Speed.Items.Add("1x");
            Replayer_Speed.Items.Add("1.5x");
            Replayer_Speed.Items.Add("2x");
            Replayer_Speed.Items.Add("4x");
            Replayer_Speed.Items.Add("8x");
            Replayer_Speed.Items.Add("16x");
            Replayer_Speed.Items.Add("32x");

            Replayer_Speed.SelectedItem = "1x";
        }
예제 #19
0
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Usage: TobiiInputInterface [dest-ip] [dest-port]");
                System.Environment.Exit(1);
            }

            commandLineArgs = args;
            var       tobiiHost           = new Host();
            var       gazePointDataStream = tobiiHost.Streams.CreateGazePointDataStream();
            UDPSender sender = instantiateNewUDPStream(commandLineArgs[0], Int32.Parse(commandLineArgs[1]));

            Console.WriteLine("Waiting for Eye Bar Input...");
            startStreamData(gazePointDataStream);

            while (true)
            {
                System.Threading.Thread.Sleep(500);
                OscMessage msg = buildMessageFromPoint(currentPoint);
                sendEyeCoordsOverOSC(sender, msg);
            }
        }
예제 #20
0
        // 主窗口关闭时,关断各类监听端口,写本地通讯录
        private void Window_Closed(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                string recv = NetWork.CSClient.getInstance().SendAMsg($"logout{App.user.userName}");
                if (recv == "loo")
                {
                    break;
                }
                if (i == 100 - 1)
                {
                    MessageBox.Show("多次尝试,未能和服务器成功发送下线请求");
                }
            }
            // TODO commonet logout, debug temp

            App.generalListener.EndListen();
            App.fileListener.EndListen();
            UDPListener.getInstance().EndListen();
            UDPSender.getInstance().EndUDPSender();
            App.UpdateAddressBook();
            Environment.Exit(0);
        }
예제 #21
0
    /// <summary>
    ///
    /// > 3.00: ID = 1
    /// > 4.00: ID = 2
    /// > 4.01: ID = 0
    /// > 4.02: ID = 0
    /// > 5.00: ID = 0
    /// > 6.00: ID = 4
    /// > 7.00: ID = 0
    /// > 8.00 Unfall / Game Over ID = 5
    /// > 9.00 Zeit abgelaufen ID = 5;
    /// </summary>
    /// <param name="_id"></param>
    public static void ChangePromptTextInIGP(int _id)
    {
        string actionString = "";

        switch (_id)
        {
        case 0:
            actionString = "hideheadline";
            break;

        case 1:
            actionString = "gamestart";
            break;

        case 2:
            actionString = "control";
            break;

        case 3:
            actionString = "obstacle";
            break;

        case 4:
            actionString = "finish";
            break;

        case 5:
            actionString = "gameover";
            break;

        default:
            Debug.LogError("case " + _id + "  is missing");
            break;
        }

        UDPSender.SendUDPStringUTF8(ip, port, "state=game;action=" + actionString);
    }
예제 #22
0
        /// <summary>
        /// Creates the string according to the existing values
        /// </summary>
        public static void CreateStringMessage()
        {
            if (EnvironmentName == "Demo")
            {
                var uv = Demo.SetEnvironment().UpdatableVariables;
                var rv = Demo.SetEnvironment().ReadableVariables;
                var sv = PhysioAdapter.Sensors;

                var message = "";

                for (var i = 0; i < uv.Count; i++)
                {
                    if (uv[i].Name.StartsWith("UB"))
                    {
                        message = uv[i].Name + "," + uv[i].Value;
                    }
                    else
                    {
                        message = uv[i].Name + "," + uv[i].Type + "," + uv[i].Value + "," + uv[i].Min + "," + uv[i].Max;
                    }
                    UDPSender.SendStringMessage(message);
                }

                for (var i = 0; i < rv.Count; i++)
                {
                    message = rv[i].Name + "," + rv[i].Value;
                    UDPSender.SendStringMessage(message);
                }

                for (var i = 0; i < sv.Count; i++)
                {
                    message = sv[i].Name + "," + sv[i].Value;
                    UDPSender.SendStringMessage(message);
                }
            }
        }
예제 #23
0
        public void TestDeviceHangup()
        {
            // setup
            var sender  = new UDPSender("127.0.0.1", 5000);
            var adapter = new RemoteOSCAdapter(5000);

            adapter.AddHandler(EEGDataType.CONTACT_QUALITY, HandleConnStatus);
            adapter.Start();

            // test that it recieves our packet
            var packet = new OscMessage("/muse/elements/horseshoe", new object[] { 1, 1, 1, 1 });

            sender.Send(packet);
            while (!messageReceived)
            {
                adapter.FlushEvents();
            }
            CheckConnStatus(new double[] { 1, 1, 1, 1 });

            // test hangup
            Thread.Sleep(RemoteOSCAdapter.HANGUP_TIME * 2);
            adapter.FlushEvents();
            CheckConnStatus(new double[] { 4, 4, 4, 4 });

            // test recovery
            messageReceived = false;
            sender.Send(packet);
            while (!messageReceived)
            {
                adapter.FlushEvents();
            }
            CheckConnStatus(new double[] { 1, 1, 1, 1 });

            // teardown
            adapter.Stop();
        }
예제 #24
0
    public void start()
    {
        Debug.Assert(_driver != null);

        if (isRunning)
        {
            stop();
        }

        try
        {
            _rawRequests  = new ConcurrentQueue <string>();
            _rawResponses = new ConcurrentQueue <string>();

            _sendSocket = new UDPSender(_sendAddress, _sendPort);
            _sendThread = new Thread(new ThreadStart(threadProcess_send));
            _sendThread.IsBackground = true;
            _sendThread.Start();

            _recvSocket = new UDPReceiver(_recvAddress, _recvPort);
            _recvThread = new Thread(new ThreadStart(threadProcess_recv));
            _recvThread.IsBackground = true;
            _recvThread.Start();
            _logger.info("Started UDP recv thread");

            _driver.startSpinRoutine(spinRoutine());

            notifyObservers((o) => o.onStart());
        }
        catch (Exception e)
        {
            _logger.error(e.ToString());
            stop();
            throw e;
        }
    }
예제 #25
0
		// sends a state request to the ip address
		public void SendRequestMatch(string serverIPAddress)
		{
			MessageMatchRequest m = new MessageMatchRequest ();
			m.Guid = MyProfile.Guid;

			UDPSender<MessageMatchRequest> sender = new UDPSender<MessageMatchRequest> ();
			sender.Send (UDP_MESSAGE_REQUEST_MATCH, m, serverIPAddress, UPD_PORT_LISTENER);

			if (Logging) {
				Database.Instance().SaveLog("Match - SendRequestMatch() " + serverIPAddress);
			}				
		}
예제 #26
0
 // Start is called before the first frame update
 void Start()
 {
     mesh      = this.gameObject.GetComponent <MeshFilter>().mesh;
     udpSneder = GetComponent <UDPSender>();
 }
예제 #27
0
 void SetUdpClient()
 {
     udp_send = new UDPSender(sendhost, sendport);
     udp_rvc  = new UDPReciever(localport);
     udp_rvc.TStart();
 }
예제 #28
0
 public ExpressivOSC(String address, int port)
 {
     sender = new SharpOSC.UDPSender("127.0.0.1", 12000);
 }
예제 #29
0
		public void Attach(FM.IceLink.Conference conference, Action<Exception> callback)
		{
			try {
				this.Conference = conference;

				conference.OnLinkOfferAnswer += (e) =>
				{
					try {
						Signal signal = new Signal();
						signal.PeerId = e.PeerId;
						signal.DataJson = e.OfferAnswer.ToJson();
						#if USE_TCP_SIGNALLING
							TCPSender<Signal> sender = new TCPSender<Signal> ();
							if (sender.Connect (IPAddress, TCP_PORT_SIGNALLING)) {
								sender.Send (TCP_MESSAGE_OFFER_ANSWER, signal);
								sender.Disconnect ();
							}
						#else
							UDPSender<Signal> sender = new UDPSender<Signal>();
							sender.Send(TCP_MESSAGE_OFFER_ANSWER,signal,this.IPAddress,TCP_PORT_SIGNALLING);
						#endif

					}
					catch (Exception ex)
					{
						Console.WriteLine(ex.Message);
					}
						
				};
				conference.OnLinkCandidate += (e) =>
				{
					try {
						Signal signal = new Signal();
						signal.PeerId = e.PeerId;
						signal.DataJson = e.Candidate.ToJson();
						#if USE_TCP_SIGNALLING
							TCPSender<Signal> sender = new TCPSender<Signal> ();
							if (sender.Connect (IPAddress, TCP_PORT_SIGNALLING)) {
								sender.Send (TCP_MESSAGE_CANDIDATE, signal);
								sender.Disconnect ();
							}
						#else
							UDPSender<Signal> sender = new UDPSender<Signal>();
							sender.Send(TCP_MESSAGE_CANDIDATE,signal,this.IPAddress,TCP_PORT_SIGNALLING);
						#endif


					}
					catch (Exception ex)
					{
						Console.WriteLine(ex.Message);
					}
						
				};					
			}
			catch (Exception ex)
			{
				callback(ex);
			}
		}
예제 #30
0
		// Profile Messges //////////

		// sends a request to ip address to return send us their profile picture
		public bool SendRequestUserProfile(string serverIPAddress, bool includepic)
		{
			MessageProfileRequest m = new MessageProfileRequest ();
			m.IncludePic = includepic;

			UDPSender<MessageProfileRequest> sender = new UDPSender<MessageProfileRequest> ();
			sender.Send (UDP_REQUEST_PROFILE_MESSAGE, m, serverIPAddress, UPD_PORT_LISTENER);

			if (Logging) {
				Database.Instance().SaveLog("Profile - SendRequestUserProfile() " + serverIPAddress);
			}

			return true;
		}
예제 #31
0
		// Match // // // // // // // // // // // // // // // // // // // // // // // //  // // // // // // // 

		// sends a state (LIKE, NOPE, BLOCK) to the ip address
		public void SendMatch(MessageMatch.eMatch match, string serverIPAddress)
		{
			MessageMatch m = new MessageMatch ();
			m.Guid = MyProfile.Guid;
			m.value = match;

			UDPSender<MessageMatch> sender = new UDPSender<MessageMatch> ();
			sender.Send (UDP_MATCH_MESSAGE, m, serverIPAddress, UPD_PORT_LISTENER);

			if (Logging) {
				Database.Instance().SaveLog("Match - SendMatch() " + serverIPAddress);
			}
							
		}
예제 #32
0
        static void LoadPara(string[] args)
        {
            if (args.Length % 2 != 0)
            {
                Logger.Error.WriteLine("Para Input Error!");
                return;
            }

            Dictionary <string, string> para = new Dictionary <string, string>();

            for (int i = 0; i < args.Length; i += 2)
            {
                para.Add(args[i], args[i + 1]);
            }

            // 不指定参数则尝试加载默认配置
            if (para.Count == 0)
            {
                para.Add("-t", "para.txt");
            }
            // 从配置文件中加载参数
            if (para.ContainsKey("-t"))
            {
                if (File.Exists(para["-t"]))
                {
                    var str = File.ReadAllText(para["-t"]);

                    List <string> buff = new List <string>();
                    args = File.ReadAllText(para["-t"]).Split(" ");
                    for (int i = 0; i < args.Length; i++)
                    {
                        // "\"" 内可能有" "
                        // 需要将其合并
                        if (args[i].Contains("\""))
                        {
                            for (int j = i + 1; j < args.Length; j++)
                            {
                                args[i] += " " + args[j];

                                if (args[j].Contains("\""))
                                {
                                    buff.Add(args[i].Trim('\"'));
                                    i = j;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            buff.Add(args[i]);
                        }
                    }

                    args = buff.ToArray();

                    for (int i = 0; i < args.Length; i += 2)
                    {
                        para.Add(args[i], args[i + 1]);
                    }
                }
                else
                {
                    Logger.Error.WriteLine("No Such ParaFile!");
                    return;
                }
            }

            string[] paths = null;
            // 加载单一文件
            if (para.ContainsKey("-f"))
            {
                if (File.Exists(para["-f"]) && para["-f"].EndsWith(".lcl"))
                {
                    paths = new string[] { para["-f"] };
                }
                else
                {
                    Logger.Error.WriteLine("No Such File!");
                    return;
                }
            }
            // 加载文件夹
            else if (para.ContainsKey("-p"))
            {
                if (Directory.Exists(para["-p"]))
                {
                    paths = Directory.GetFiles(para["-p"], "*.lcl");
                }
                else
                {
                    Logger.Error.WriteLine("No Such Path!");
                    return;
                }
            }
            else
            {
                Logger.Error.WriteLine("No File Path!");
                return;
            }


            // 加载映射关系
            var map = new Dictionary <IPEndPoint, IPEndPoint>();

            if (para.ContainsKey("-m"))
            {
                var ppp = para["-m"].Split(" ");

                foreach (var it in ppp)
                {
                    var pp = it.Split("=>");

                    ParseInputIpPort(pp[0], out string ipO, out ushort portO);
                    ParseInputIpPort(pp[1], out string ipM, out ushort portM);

                    map.Add(new IPEndPoint(IPAddress.Parse(ipO), portO), new IPEndPoint(IPAddress.Parse(ipM), portM));
                }
            }
            else
            {
                Logger.Error.WriteLine("No Map Para!");
            }

            UDPSender sender = new UDPSender();

            core = new Core.ReplayCore(paths);

            // 获取文件 info
            _fInfo = core.FileInfo;

            //Core.ReplayCore.DeleSendHandler sendHandler = (ReadOnlySpan<byte> bytes, IPEndPoint point) =>
            //{
            //    sender.Send(bytes.ToArray(), point);
            //};
            Core.ReplayCore.DeleSendHandler sendHandler = (Core.ReplayCore.SendInfo msg) =>
            {
                sender.Send(msg.bytes.ToArray(), msg.point);
            };
            Core.ReplayCore.DeleInfoHandler infoHandler = (Core.ReplayCore.ReplayInfo info) =>
            {
                Console.WriteLine(info.time + ": " + (100.0 * (double)info.index / ((double)_fInfo.totalIndex - 1)).ToString("f2") + "%" + " " + info.index + " " + info.pkgCostTime);
            };

            // 设置回放的 point map
            // 设置回放的 sendHandler 需要注意此处的委托只能做发送 需要尽可能快的返回
            // 设置回放的 infoHandler 此处是异步触发
            core.Initial(map, sendHandler, infoHandler);

            Logger.Info.WriteLine("TotalIndex: " + _fInfo.totalIndex
                                  + " StartTime: " + _fInfo.time
                                  + " TotalTime: " + _fInfo.totalIndex * _fInfo.timeInterval + "s");

            Logger.Info.WriteLine("Notes: " + _fInfo.notes);

            Logger.Info.WriteLine("Maps: ");
            foreach (var point in _fInfo.points)
            {
                if (map.ContainsKey(point))
                {
                    Logger.Info.WriteLine(point + " => " + map[point]);
                }
                else
                {
                    Logger.Info.WriteLine(point + " => ");
                }
            }
        }
예제 #33
0
        private void oscSenderWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            UDPSender autoDataSender      = null;
            UDPSender heartbeatDataSender = null;
            bool      reinit = true;

            var heartbeatMsg = new OscMessage("/RegisterRequestor");

            while (runThread)
            {
                try
                {
                    if (autoDataSender == null || heartbeatDataSender == null || reinit)
                    {
                        try
                        {
                            try
                            {
                                autoDataSender.Close();
                            }
                            catch (Exception)
                            {
                            }
                            try
                            {
                                heartbeatDataSender.Close();
                            }
                            catch (Exception)
                            {
                            }

                            autoDataSender      = new UDPSender(ROBOT_IP, AUTO_DATA_PORT);
                            heartbeatDataSender = new UDPSender(ROBOT_IP, LOG_DATA_PORT);
                            reinit = false;
                        }
                        catch (Exception)
                        {
                            Console.WriteLine("Couldn't create udp sender");
                        }
                    }

                    int autoStartPositionIndex = -1;
                    int autoModeIndex          = -1;
                    Dispatcher.Invoke(() => autoStartPositionIndex = cboAutoStartSelection.SelectedIndex);
                    Dispatcher.Invoke(() => autoModeIndex          = cboAutoMode.SelectedIndex);

                    var message = new OscMessage("/AutoData",
                                                 (int)autoStartPositionIndex,
                                                 (int)autoModeIndex);
                    autoDataSender.Send(message);

                    if (heartbeatTimer.isTimedOut())
                    {
                        heartbeatDataSender.Send(heartbeatMsg);
                        heartbeatTimer.reset();
                    }

                    Thread.Sleep(100);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                    try
                    {
                        autoDataSender.Close();
                    }
                    catch (Exception)
                    {
                    }
                    try
                    {
                        heartbeatDataSender.Close();
                    }
                    catch (Exception)
                    {
                    }
                    reinit = true;
                }
            }

            autoDataSender.Close();
            heartbeatDataSender.Close();
        }
예제 #34
0
 public override void InitializeAcademy()
 {
     spheres   = new List <GameObject>();
     udpSender = GetComponent <UDPSender>();
     Debug.Log("AcademyInitialize");
 }
예제 #35
0
 public void SendMessage(byte[] data)
 {
     UDPSender.SendMessage(serverIP, data);
 }
예제 #36
0
 void Start()
 {
     counter = 0;
     sender  = GameObject.FindObjectOfType <UDPSender>();
 }