protected Common(EpicTransport transport, EpicOptions options)
        {
            Transport   = transport;
            EpicManager = Transport.EpicManager;
            Options     = options;

            AddNotifyPeerConnectionRequestOptions addNotifyPeerConnectionRequestOptions =
                new AddNotifyPeerConnectionRequestOptions {
                LocalUserId = EpicManager.AccountId.ProductUserId
            };

            _onIncomingConnectionRequest += OnNewConnection;
            _onRemoteConnectionClosed    += OnConnectionFailed;

            _incomingNotificationId = EpicManager.P2PInterface.AddNotifyPeerConnectionRequest(addNotifyPeerConnectionRequestOptions,
                                                                                              null, _onIncomingConnectionRequest);

            AddNotifyPeerConnectionClosedOptions addNotifyPeerConnectionClosedOptions =
                new AddNotifyPeerConnectionClosedOptions
            {
                LocalUserId = EpicManager.AccountId.ProductUserId
            };

            _outgoingNotificationId = EpicManager.P2PInterface.AddNotifyPeerConnectionClosed(addNotifyPeerConnectionClosedOptions,
                                                                                             null, _onRemoteConnectionClosed);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="transport"></param>
        /// <param name="options"></param>
        public Server(EpicTransport transport, EpicOptions options) : base(transport, options)
        {
            Options             = options;
            Transport           = transport;
            _connectedEpicUsers = new Dictionary <ProductUserId, Client>();

            UniTask.Run(ProcessIncomingMessages).Forget();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="transport"></param>
        /// <param name="options"></param>
        /// <param name="serverControlled">Is the data being processed by server or client.</param>
        public Client(EpicTransport transport, EpicOptions options, bool serverControlled) : base(transport, options)
        {
            Options           = options;
            Transport         = transport;
            _serverControlled = serverControlled;
            _initialWait      = !_serverControlled;

            if (serverControlled)
            {
                return;
            }

            SocketName = new SocketId {
                SocketName = Guid.NewGuid().ToString("N").GetHashCode().ToString().Replace("-", string.Empty)
            };

            Debug.Log($"SocketId: {SocketName.SocketName}");

            UniTask.Run(ProcessIncomingMessages).Forget();
        }