Exemplo n.º 1
0
        private async void receiveingUDPPacket()
        {
            while (true)
            {
                var result = await udpClient.ReceiveAsync();

                string receiveStr = Encoding.UTF8.GetString(result.Buffer);
                if (result.RemoteEndPoint.Port == 37654)
                {
                    if (receiveStr.Contains("ID: ") && receiveStr.Contains(", Name: "))
                    {
                        string IDstr   = receiveStr.Split(',')[0].Substring(4);
                        string Namestr = receiveStr.Split(',')[1].Substring(7);
                        if (IDstr != id.ToString())
                        {
                            Dispatcher.BeginInvokeOnMainThread(() =>
                            {
                                EPButton btn = null;
                                foreach (var v in EPButtons.Children)
                                {
                                    EPButton b = v as EPButton;
                                    if (b.PeerID == ulong.Parse(IDstr))
                                    {
                                        btn = b;
                                    }
                                }
                                if (btn == null)
                                {
                                    btn        = new EPButton();
                                    btn.PeerID = ulong.Parse(IDstr);
                                    EPButtons.Children.Add(btn);
                                    btn.Clicked += BTNPeer_Clicked;
                                }
                                btn.Text    = Namestr;
                                btn.PeerIP  = result.RemoteEndPoint.Address;
                                btn.Timeout = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds() + 10;
                            });
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        protected void BTNPeer_Clicked(object sender, EventArgs args)
        {
            TcpClient tcpClient = new TcpClient();
            EPButton  btn       = sender as EPButton;

            try
            {
                tcpClient.Connect(btn.PeerIP, 37654);
                int trying = 0;
                do
                {
                    string telegram = string.Format("ID: {0}, Name: {1}, To: {2}", id.ToString(),
                                                    (EntryPlayerName.Text != "") ? EntryPlayerName.Text : defaultName, btn.PeerID.ToString());
                    tcpClient.GetStream().Write(Encoding.UTF8.GetBytes(telegram), 0, Encoding.UTF8.GetByteCount(telegram));

                    byte[] buffer = new byte[2048];
                    tcpClient.GetStream().Read(buffer, 0, buffer.Length);
                    string response = Encoding.UTF8.GetString(buffer);
                    response = response.Trim('\0');
                    if (response.Contains("OK.., Name: "))
                    {
                        string peerName = response.Split(',')[1].Substring(7);
                        Dispatcher.BeginInvokeOnMainThread(() =>
                        {
                            Navigation.PopModalAsync();
                            Navigation.PushModalAsync(new NetworkPlayPage(tcpClient, id ^ btn.PeerID, peerName, false));
                        });
                        break;
                    }
                    else
                    {
                        trying++;
                    }
                } while (trying < 5);
            }
            catch
            {
                EPButtons.Children.Remove(btn);
            }
        }
Exemplo n.º 3
0
        private void backgroundFunc()
        {
            while (!cancelingBackground)
            {
                System.Threading.Thread.Sleep(200);
                string newTitle = "配對";

                for (int i = 0; i < titleLabelDotAnimation; i++)
                {
                    newTitle += ".";
                }
                titleLabelDotAnimation++;
                titleLabelDotAnimation %= 7;

                Dispatcher.BeginInvokeOnMainThread(() =>
                {
                    LabelTitle.Text          = newTitle;
                    List <EPButton> toRemove = new List <EPButton>();
                    foreach (var v in EPButtons.Children)
                    {
                        EPButton b = v as EPButton;
                        if (b.Timeout < ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds())
                        {
                            toRemove.Add(b);
                        }
                    }
                    foreach (var v in toRemove)
                    {
                        v.Clicked -= BTNPeer_Clicked;
                        EPButtons.Children.Remove(v);
                    }
                });

                string telegram = string.Format("ID: {0}, Name: {1}", id.ToString(), (EntryPlayerName.Text != "") ? EntryPlayerName.Text : defaultName);
                udpClient.SendAsync(Encoding.UTF8.GetBytes(telegram), Encoding.UTF8.GetByteCount(telegram), new IPEndPoint(IPAddress.Broadcast, 37654));
            }
        }