FECipherVit.FECipherVit.ConnectionRenew C# (CSharp) Method

ConnectionRenew() public method

public ConnectionRenew ( ) : void
return void
        public void ConnectionRenew()
        {
            //异步建立连接回调
            AccessAction = () =>
            {
                Invoke((MethodInvoker)delegate ()
                {
                    try
                    {
                        String friendIP = socket.communicateSocket.RemoteEndPoint.ToString();
                        if (MyAccessCharacter == AccessCharater.Host || MyAccessCharacter == AccessCharater.HostWatcher)
                        {
                            ServerSocket serversocket = (ServerSocket)socket;
                            Socket communicateSocket = serversocket.communicateSockets.Last();
                            friendIP = communicateSocket.RemoteEndPoint.ToString();
                            Thread thread = new Thread(new ThreadStart(delegate ()
                            {
                                serversocket.Receive(ReceiveAction, communicateSocket);
                            }));
                            thread.Start();

                            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                            //本机预使用的IP和端口
                            int port;
                            if (!Int32.TryParse(connection.textBox_Port.Text, out port))
                            {
                                port = 9050 + SocketFunc.ReConnectCount;
                                SocketFunc.ReConnectCount++;
                            }
                            else
                            {
                                port += SocketFunc.ReConnectCount;
                                SocketFunc.ReConnectCount++;
                            }
                            IPEndPoint serverIP = new IPEndPoint(IPAddress.Any, port);
                            //绑定服务端设置的IP
                            serverSocket.Bind(serverIP);
                            //设置监听个数
                            serverSocket.Listen(1);
                            //异步接收连接请求
                            serverSocket.BeginAccept(ar =>
                            {
                                serversocket.communicateSockets.Add(serverSocket.EndAccept(ar));
                                AccessAction();
                            }, null);
                            if (MyAccessCharacter == AccessCharater.Host)
                            {
                                if (Language == Language.Chinese)
                                {
                                    connection.labelConnectStatus.Text = "已连接。 空闲端口号:" + port.ToString();
                                }
                                else
                                {
                                    connection.labelConnectStatus.Text = "Connected. Valid port number: " + port.ToString();
                                }
                                connection.Portusing = port;
                                if (serversocket.communicateSockets.Count == 1)
                                {
                                    connection.connected = true;
                                    connection.Close();
                                    msgProcessor.SendSecret("MyName", new List<string> { Version.ToString(), DatabaseVer.ToString(), PlayerName }, "");
                                }
                                else
                                {
                                    msgProcessor.SendSecret("SetWatcher", new List<string> { Version.ToString(), DatabaseVer.ToString(), PlayerName, RivalName }, "");
                                }
                            }
                            else
                            {
                                connection.Portusing = port;
                                if (serversocket.communicateSockets.Count == 1)
                                {
                                    connection.connected = true;
                                    connection.Close();
                                    connection.labelConnectStatus.Text = "已有1位玩家连接。 空闲端口号:" + port.ToString();
                                    msgProcessor.SendSecret("SetPlayer1", new List<string> { Version.ToString(), DatabaseVer.ToString() }, "");
                                }
                                else if (serversocket.communicateSockets.Count == 2)
                                {
                                    msgProcessor.SendSecret("SetPlayer2", new List<string> { Version.ToString(), DatabaseVer.ToString(), ClientsNames[serversocket.communicateSockets[0]] }, "");
                                    connection.labelConnectStatus.Text = "中继连接中。 空闲端口号:" + port.ToString();
                                }
                                else
                                {
                                    msgProcessor.SendSecret("SetWatcher", new List<string> { Version.ToString(), DatabaseVer.ToString(), ClientsNames[serversocket.communicateSockets[0]], ClientsNames[serversocket.communicateSockets[1]] }, "");
                                    connection.labelConnectStatus.Text = "中继连接中。 空闲端口号:" + port.ToString();
                                }
                            }
                        }
                        else
                        {
                            ClientSocket serversocket = (ClientSocket)socket;
                            Socket communicateSocket = serversocket.communicateSocket;
                            friendIP = communicateSocket.RemoteEndPoint.ToString();
                            serversocket.Receive(ReceiveAction, communicateSocket);
                            TryConnect = true;
                        }
                    }
                    catch (Exception exp)
                    {
                        connection.Disconnect();
                        if (socket == null)
                        {
                            if (Language == Language.Chinese)
                            {
                                MessageBox.Show("无法连接到对手,请确认您输入的IP地址是否正确。\r\n如果您确定IP地址正确,请输入对手的端口号。", "无法连接");
                            }
                            else
                            {
                                MessageBox.Show("Please check your opponent's IP Address and port number.", "Connection failed.");
                            }
                        }
                        else
                        {
                            if (Language == Language.Chinese)
                            {
                                MessageBox.Show(exp.Message, "错误");
                            }
                            else
                            {
                                MessageBox.Show(exp.Message, "Error");
                            }
                        }
                        return;
                    }
                });
            };
            //异步接收消息回调
            ReceiveAction = (code, source) =>
            {
                textBoxMsgRcv.Invoke((MethodInvoker)delegate ()
                {
                    msgProcessor.Receive(code, source);
                });

            };
        }
FECipherVit