private void Call_BridgedCallDisconnected(object sender, CallStateEventArgs e) { //lock (locker) { if (LastState.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL) == false || State.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL) == false) { return; } e.Call.CallStateChange -= Call_BridgedCallDisconnected; if (!BridgedCalls.ContainsKey(e.Call.ID)) { BridgedCalls.Remove(e.Call.ID); } if (LastState.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL) || State.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL)) { return; } if (!e.Call.BridgedCalls.ContainsKey(ID)) { e.Call.BridgedCalls.Remove(ID); } } }
public Call unbridge(Call call) { if (call == this) { return(this); } lock (locker) { if (!BridgedCalls.ContainsKey(call.ID)) { BridgedCalls.Remove(call.ID); } if (!call.BridgedCalls.ContainsKey(ID)) { call.BridgedCalls.Remove(ID); } var call1 = getAudioMedia(); var call2 = call.getAudioMedia(); if (call1 == null || call2 == null) { return(this); } call1.stopTransmit(call2); call2.stopTransmit(call1); return(this); } }
public Call bridge(Call call) { if (call == this) { return(this); } lock (locker) { if (State.In(pjsip_inv_state.PJSIP_INV_STATE_NULL, pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED)) { return(this); } if (call.State.In(pjsip_inv_state.PJSIP_INV_STATE_NULL, pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED)) { return(this); } if (!BridgedCalls.ContainsKey(call.ID)) { BridgedCalls.Add(call.ID, call); } if (!call.BridgedCalls.ContainsKey(ID)) { call.BridgedCalls.Add(ID, this); } var call1 = getAudioMedia(); var call2 = call.getAudioMedia(); if (call1 == null || call2 == null) { return(this); } call.CallStateChange += Call_BridgedCallDisconnected; CallStateChange += Call_BridgedCallDisconnected; call1.startTransmit(call2); call2.startTransmit(call1); return(this); } }