protected void CheckConnections(DisconnectAction Action) { var activeConnections = IPGlobalProperties. GetIPGlobalProperties(). GetActiveTcpConnections(). Where(x => x.LocalEndPoint.Equals(localEndPoint)); //CONTINUE: try { for (var index = 0; index < usersOnline.Count; index++) { var user = usersOnline[index]; var tcpConnections = (activeConnections as TcpConnectionInformation[]) ?? activeConnections.ToArray(); var item = tcpConnections.SingleOrDefault(x => x.LocalEndPoint.Equals(user.Client.Client.LocalEndPoint) && x.RemoteEndPoint.Equals(user.Client.Client.RemoteEndPoint)); //Строго !(item.State == TcpState.Established), TcpState.Closed работает совершенно иначе (как???) if (item == null || item.State != TcpState.Established) { Action(user); } } } catch (Exception e) { if (e.Message == "Collection was modified; enumeration operation may not execute.") { //goto CONTINUE; } } }
//-------------------------------------------------- //UBA END //-------------------------------------------------- public void Close() { // writer.Write("x"); if (IsConnected == true) { DisconnectAction?.Invoke("Disconnect happened"); Close_Self(); } }
public void ExecuteDisconnectAction(DisconnectAction disconnectAction) { try { switch (disconnectAction) { case DisconnectAction.None: { this.Peer = new PhotonPeer(listeners[GameState.Master], ConnectionProtocol.Udp); #if LOCAL this.Peer.Connect("192.168.1.28:5105", "Master"); #else this.Peer.Connect("52.10.78.38:5105", "Master"); #endif ClientApplication.SetGameState(GameState.Master); break; } case DisconnectAction.ConnectToLoginServer: { var server = ClientApplication.Servers.GetServer(ServerType.login); this.Peer = new PhotonPeer(listeners[GameState.Login], ConnectionProtocol.Udp); this.Peer.Connect(server.IpAddress + ":" + server.Port, "Login"); ClientApplication.SetGameState(GameState.Login); break; } case DisconnectAction.ConnectToSelectCharacterServer: { var server = ClientApplication.Servers.GetServer(ServerType.character); this.Peer = new PhotonPeer(listeners[GameState.SelectCharacter], ConnectionProtocol.Udp); this.Peer.Connect(server.IpAddress + ":" + server.Port, "SelectCharacter"); ClientApplication.SetGameState(GameState.SelectCharacter); break; } } }catch (Exception ex) { Console.WriteLine(ex.Message); } }
public static void ResetDisconnectAction() { disconnectAction = DisconnectAction.None; }
public static void SetDisconnectAction(DisconnectAction onDisconnect) { disconnectAction = onDisconnect; }