internal RemoteDatabase(IRemoteEndpoint parent, string name) { _parent = parent; _adminRemoteUri = parent.AdminUri.AppendPath(name); _remoteUri = parent.RegularUri.AppendPath(name); var handler = new HttpClientHandler { Credentials = new NetworkCredential("jim", "borden") }; handler.PreAuthenticate = true; _httpClient = new HttpClient(handler, true); Name = name; }
/// <summary> /// Sets incoming connection. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param> public virtual void OnIncomingCallAccepted(object sender, EventArgs e) { _callInfo.StartDate = StaticTime.CurrentTime; PortState = PortState.Busy; IPort remotePort = sender as IPort; if (remotePort != null) { _currentRemoteEndpoint = remotePort; IncomingCallAcceptedEvent -= remotePort.OnIncomingCallAccepted; } }
/// <summary> /// Clears all events. /// </summary> public void ClearAllEvents() { if (_terminal != null) { _terminal.OutgoingCallEvent -= OnTerminalOutgoingCall; _terminal.PrepareOutgoingCallEvent -= OnTerminalPrepareOutgoingCall; _terminal.DropEvent -= OnTerminalDrop; _terminal.AnswerEvent -= OnTerminalAnswer; _terminal = null; } if (_currentRemoteEndpoint != null) { _currentRemoteEndpoint.DropCallEvent -= OnRemoteDrop; _currentRemoteEndpoint.OnOutgoingCallEvent -= OnIncomingCall; IncomingCallAcceptedEvent -= _currentRemoteEndpoint.OnIncomingCallAccepted; DropCallEvent -= _currentRemoteEndpoint.OnRemoteDrop; _currentRemoteEndpoint = null; } OnPortStateChangedEvent -= PortStateChanged; }
/// <summary> /// Gets incoming call. /// </summary> /// <param name="sender">The sender.</param> /// <param name="number">The number.</param> public virtual void OnIncomingCall(object sender, string number) { if (sender is IPort) { IPort remotePort = sender as IPort; remotePort.OnOutgoingCallEvent -= OnIncomingCall; if (PortState == PortState.Free) { _currentRemoteEndpoint = remotePort; _currentRemoteNumber = number; PortState = PortState.IncomingCall; _terminal.IncomingCall(number); IncomingCallAcceptedEvent += _currentRemoteEndpoint.OnIncomingCallAccepted; _currentRemoteEndpoint.DropCallEvent += OnRemoteDrop; _callInfo = new CallInfo(number, CallType.Ingoing); } else { OnPortStateChangedEvent += PortStateChanged; _incomingNumbers.Add(new KeyValuePair <string, IPort>(number, sender as IPort)); } } }
/// <summary> /// Changes state. /// </summary> /// <param name="sender">The sender.</param> /// <param name="state">The state.</param> protected virtual void PortStateChanged(object sender, PortState state) { if (state == PortState.Free) { OnPortStateChangedEvent -= PortStateChanged; if (_currentRemoteEndpoint != null) { _currentRemoteEndpoint.DropCallEvent -= OnRemoteDrop; _currentRemoteEndpoint.OnOutgoingCallEvent -= OnIncomingCall; IncomingCallAcceptedEvent -= _currentRemoteEndpoint.OnIncomingCallAccepted; } if (_incomingNumbers.Count > 0) { KeyValuePair <string, IPort> keyValue = _incomingNumbers.FirstOrDefault(); _currentRemoteNumber = keyValue.Key; _currentRemoteEndpoint = keyValue.Value; _incomingNumbers.Remove(keyValue); IncomingCallAcceptedEvent += _currentRemoteEndpoint.OnIncomingCallAccepted; _currentRemoteEndpoint.DropCallEvent += OnRemoteDrop; PortState = PortState.IncomingCall; _terminal.IncomingCall(_currentRemoteNumber); _callInfo = new CallInfo(_currentRemoteNumber, CallType.Ingoing); } else { if (FinishedEvent != null) { FinishedEvent(this, null); } } } }