Пример #1
0
        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);
            }
        }
Пример #2
0
 public RtpMidiSessionConnection(RtpMidiSession rtpMidiSession, model.RtpMidiServer rtpMidiServer, int ssrc, IRtpMidiMessageSender rtpMidiMessageSender)
 {
     RtpMidiSession       = rtpMidiSession;
     RtpMidiServer        = rtpMidiServer;
     Ssrc                 = ssrc;
     RtpMidiMessageSender = rtpMidiMessageSender;
 }
Пример #3
0
 /**
  * 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();
         }
     }
 }
Пример #4
0
        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();
            }
        }
Пример #5
0
 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));
     }
 }
Пример #6
0
 /**
  * Add a new {@link AppleMidiSession} to this server
  *
  * @param session The session to be added
  */
 public void AddRtpMidiSession(RtpMidiSession session)
 {
     sessions.AddLast(session);
     NotifyMaxNumberOfSessions();
 }