public void SendMidiMessage(MidiMessage message, long timestamp) { sequenceNumber++; long currentTimeIn100Microseconds = RtpMidiSession.GetCurrentTimestamp(); int rtpTimestamp = ((int)currentTimeIn100Microseconds); RtpHeader rtpHeader = new RtpHeader((byte)2, false, false, (byte)0, false, (byte)97, sequenceNumber, rtpTimestamp, Ssrc); Log.Debug("RtpMidi", "Sending RTP-Header: {}", rtpHeader); bool b = message.Length > 15; MidiCommandHeader midiCommandHeader = new MidiCommandHeader(b, false, false, false, (short)message.Length, rtpHeader); var commandCol = new List <MidiTimestampPair>(); commandCol.Add(new MidiTimestampPair(0, message)); RtpMidiMessage rtpMidiMessage = new RtpMidiMessage(midiCommandHeader, commandCol); try { RtpMidiMessageSender.Send(rtpMidiMessage, RtpMidiServer); } catch (IOException e) { Log.Error("RtpMidi", "Error sending MidiMessage to {}", RtpMidiServer, e); } }
public RtpMidiSessionConnection(RtpMidiSession rtpMidiSession, model.RtpMidiServer rtpMidiServer, int ssrc, IRtpMidiMessageSender rtpMidiMessageSender) { RtpMidiSession = rtpMidiSession; RtpMidiServer = rtpMidiServer; Ssrc = ssrc; RtpMidiMessageSender = rtpMidiMessageSender; }
/** * Remove the {@link AppleMidiSession} from this server * * @param session The session to be removed */ public void RemoveRtpMidiSession(RtpMidiSession session) { sessions.RemoveLast(/*session*/); foreach (var entry in currentSessions) { if (entry.Value.RtpMidiSession.Equals(session)) { int ssrc = entry.Key; currentSessions.Remove(ssrc); NotifyMaxNumberOfSessions(); } } }
public void OnEndSession(RtpMidiEndSession rtpMidiEndSession, model.RtpMidiServer rtpMidiServer) { Log.Info("RtpMidi", "Session end from: {}", rtpMidiServer); RtpMidiSessionConnection midiServer = currentSessions.GetValueOrDefault(rtpMidiEndSession.Ssrc); if (midiServer != null) { RtpMidiSession RtpMidiSession = midiServer.RtpMidiSession; RtpMidiSession.Sender = null; RtpMidiSession.OnEndSession(rtpMidiEndSession, rtpMidiServer); } currentSessions.Remove(rtpMidiEndSession.Ssrc); RtpMidiSessionConnection sessionTuple = currentSessions.GetValueOrDefault(rtpMidiEndSession.Ssrc); if (sessionTuple != null) { sessions.AddLast(sessionTuple.RtpMidiSession); NotifyMaxNumberOfSessions(); } }
public void OnMidiInvitation(RtpMidiInvitationRequest invitation, model.RtpMidiServer rtpMidiServer) { Log.Info("RtpMidi", "MIDI invitation from: {}", rtpMidiServer); if (GetSessionServerState() == State.ACCEPT_INVITATIONS) { SendMidiInvitationAnswer(rtpMidiServer, "accept", new RtpMidiInvitationAccepted(invitation.ProtocolVersion, invitation.InitiatorToken, Ssrc, Name)); RtpMidiSession rtpMidiSession = sessions.Last; // Pop() RtpMidiSessionConnection connection = new RtpMidiSessionConnection(rtpMidiSession, rtpMidiServer, Ssrc, this); rtpMidiSession.Sender = connection; currentSessions.Add(invitation.Ssrc, connection); NotifyMaxNumberOfSessions(); } else { SendMidiInvitationAnswer(rtpMidiServer, "decline", new RtpMidiInvitationDeclined(invitation.ProtocolVersion, invitation.InitiatorToken, Ssrc, Name)); } }
/** * Add a new {@link AppleMidiSession} to this server * * @param session The session to be added */ public void AddRtpMidiSession(RtpMidiSession session) { sessions.AddLast(session); NotifyMaxNumberOfSessions(); }