private void ProcessConnection(object state) { if (!NetworkManager.Instance.IsShutdown) { ConnectionTask task = (ConnectionTask)state; try { task.NetworkStream = null; Synapse.NetworkStream stream = NetworkManager.Instance.InternalNetworkManager.Connect(task.EndPoint); // dobhat hibát stream.SendBufferSize = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelSocketSendBufferSize; stream.ReceiveBufferSize = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelSocketReceiveBufferSize; stream.NoDelay = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelNoDelay; task.NetworkStream = stream; NetworkPeerRemote result = NetworkManager.Instance.ProcessConnection(stream, task.ConnectionTimeout, true, !NetworkManager.Instance.InternalConfiguration.Settings.EnableMultipleConnectionWithNetworkPeers); if (result == null) { if (task.ReconnectOnFailure) { // újra időzítés QueueToReconnect(task); } else { lock (mConnectionTasks) { mConnectionTasks.Remove(task); } } } } catch (Exception ex) { // failed to resolve host if (LOGGER.IsErrorEnabled) { LOGGER.Error(string.Format("CONNECTION_MANAGER, failed to establish connection to a remote host. Reason: {0}", ex.Message)); } if (task.ReconnectOnFailure) { // újra időzítés QueueToReconnect(task); } else { lock (mConnectionTasks) { mConnectionTasks.Remove(task); } } } } }
/// <summary> /// Gets the stream. /// </summary> /// <returns> /// Network Stream instance /// </returns> /// <exception cref="System.InvalidOperationException">Socket not connected.</exception> public Synapse.NetworkStream GetStream() { DoDisposeCheck(); if (!this.mClient.Connected) { throw new InvalidOperationException("Socket not connected."); } if (mStream == null) { mStream = new Synapse.NetworkStream(mClient); } return(mStream); }
/// <summary> /// Networks the connection_ disconnect. /// </summary> /// <param name="stream">The stream.</param> internal void NetworkConnection_Disconnect(Synapse.NetworkStream stream) { foreach (ConnectionTask task in mConnectionTasks) { if (task.NetworkStream != null && task.NetworkStream.Equals(stream)) { // ez a kapcsolat ment szét if (task.ReconnectOnFailure) { // újra időzítés QueueToReconnect(task); } else { lock (mConnectionTasks) { mConnectionTasks.Remove(task); } } } } }
private static void ConnectionTask(object state) { UdpBroadcastMessage message = (UdpBroadcastMessage)state; if (LOGGER.IsDebugEnabled) { LOGGER.Debug(string.Format("BROADCAST_SERVER, processing message of sender, id: {0}", message.SenderId)); } if (message.TCPServers != null && message.TCPServers.Length > 0) { foreach (AddressEndPoint ep in message.TCPServers) { if (ep.AddressFamily == AddressFamily.InterNetwork || (ep.AddressFamily == AddressFamily.InterNetworkV6 && NetworkManager.Instance.InternalConfiguration.Settings.EnableIPV6)) { try { if (LOGGER.IsInfoEnabled) { LOGGER.Info(string.Format("BROADCAST_SERVER, connecting to [{0}] with address [{1}] and port {2}.", message.SenderId, ep.Host, ep.Port)); } Synapse.NetworkStream stream = NetworkManager.Instance.InternalNetworkManager.Connect(ep); stream.SendBufferSize = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelSocketSendBufferSize; stream.ReceiveBufferSize = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelSocketReceiveBufferSize; stream.NoDelay = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelNoDelay; NetworkPeerRemote remotePeer = NetworkManager.Instance.ProcessConnection(stream, NetworkManager.Instance.InternalConfiguration.Settings.DefaultConnectionTimeoutInMS, true, !NetworkManager.Instance.InternalConfiguration.Settings.EnableMultipleConnectionWithNetworkPeers); if (NetworkManager.Instance.IsShutdown) { stream.Close(); break; } if (remotePeer != null && remotePeer.Id.Equals(message.SenderId)) { // létrejött a kapcsolat, tovább nem próbálkozunk if (LOGGER.IsInfoEnabled) { LOGGER.Info(string.Format("BROADCAST_SERVER, successfully connected to '{0}' on TCP server.", message.SenderId)); } break; } } catch (Exception ex) { if (LOGGER.IsErrorEnabled) { LOGGER.Error(string.Format("BROADCAST_SERVER, failed to connect to [{0}] with address [{1}] and port {2}. Reason: {3}", message.SenderId, ep.Host, ep.Port, ex.Message)); } } } else { if (LOGGER.IsInfoEnabled) { LOGGER.Info(string.Format("BROADCAST_SERVER, connecting to [{0}] with address [{1}] not allowed. IPV6 protocol disabled.", message.SenderId, ep.Host)); } } } } INetworkPeerRemote peer = NetworkPeerContext.GetNetworkPeerById(message.SenderId); if (peer == null || (peer != null && peer.Distance != 1)) { if (message.NATGateways != null && message.NATGateways.Length > 0) { foreach (AddressEndPoint ep in message.NATGateways) { if (ep.AddressFamily == AddressFamily.InterNetwork || (ep.AddressFamily == AddressFamily.InterNetworkV6 && NetworkManager.Instance.InternalConfiguration.Settings.EnableIPV6)) { try { if (LOGGER.IsInfoEnabled) { LOGGER.Info(string.Format("BROADCAST_SERVER, connecting to [{0}] with NAT address [{1}] and port {2}.", message.SenderId, ep.Host, ep.Port)); } Synapse.NetworkStream stream = NetworkManager.Instance.InternalNetworkManager.Connect(ep); stream.SendBufferSize = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelSocketSendBufferSize; stream.ReceiveBufferSize = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelSocketReceiveBufferSize; stream.NoDelay = NetworkManager.Instance.InternalConfiguration.Settings.DefaultLowLevelNoDelay; NetworkPeerRemote remotePeer = NetworkManager.Instance.ProcessConnection(stream, NetworkManager.Instance.InternalConfiguration.Settings.DefaultConnectionTimeoutInMS, true, !NetworkManager.Instance.InternalConfiguration.Settings.EnableMultipleConnectionWithNetworkPeers); if (NetworkManager.Instance.IsShutdown) { stream.Close(); break; } if (remotePeer != null && remotePeer.Id.Equals(message.SenderId)) { // létrejött a kapcsolat, tovább nem próbálkozunk if (LOGGER.IsInfoEnabled) { LOGGER.Info(string.Format("BROADCAST_SERVER, successfully connected to '{0}' on NAT address.", message.SenderId)); } break; } } catch (Exception ex) { if (LOGGER.IsErrorEnabled) { LOGGER.Error(string.Format("BROADCAST_SERVER, failed to connect to [{0}] with address [{1}] and port {2}. Reason: {3}", message.SenderId, ep.Host, ep.Port, ex.Message)); } } } else { if (LOGGER.IsInfoEnabled) { LOGGER.Info(string.Format("BROADCAST_SERVER, connecting to [{0}] with address [{1}] not allowed. IPV6 protocol disabled.", message.SenderId, ep.Host)); } } } } } }