using System; using System.Collections.Generic; using System.Xml; using System.Xml.Serialization; namespace OpenMetaverse.Voice { public partial class VoiceGateway { #region Enums public enum LoginState { LoggedOut = 0, LoggedIn = 1, Error = 4 } public enum SessionState { Idle = 1, Answering = 2, InProgress = 3, Connected = 4, Disconnected = 5, Hold = 6, Refer = 7, Ringing = 8 } public enum ParticipantState { Idle = 1, Pending = 2, Incoming = 3, Answering = 4, InProgress = 5, Ringing = 6, Connected = 7, Disconnecting = 8, Disconnected = 9 } public enum ParticipantType { User = 0, Moderator = 1, Focus = 2 } #endregion Enums #region Logging public class VoiceLoggingSettings { /// Enable logging public bool Enabled; /// The folder where any logs will be created public string Folder; /// This will be prepended to beginning of each log file public string FileNamePrefix; /// The suffix or extension to be appended to each log file public string FileNameSuffix; /// /// 0: NONE - No logging /// 1: ERROR - Log errors only /// 2: WARNING - Log errors and warnings /// 3: INFO - Log errors, warnings and info /// 4: DEBUG - Log errors, warnings, info and debug /// public int LogLevel; /// /// Constructor for default logging settings /// public VoiceLoggingSettings() { Enabled = false; Folder = String.Empty; FileNamePrefix = "Connector"; FileNameSuffix = ".log"; LogLevel = 0; } } #endregion Logging #region Session Delegates /// Response to Session.Create request public delegate void SessionCreateResponseCallback(int ReturnCode, int StatusCode, string StatusString, string SessionHandle, VoiceRequest Request); /// Response to Session.Connect request public delegate void SessionConnectResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); /// Response to Session.RenderAudioStart request public delegate void SessionRenderAudioStartResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); /// Response to Session.RenderAudioStop request public delegate void SessionRenderAudioStopResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); /// Response to Session.Terminate request public delegate void SessionTerminateResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); /// Response to Session.SetParticipantVolumeForMe request public delegate void SessionSetParticipantVolumeForMeResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void SessionNewEventCallback(string AccountHandle, string SessionHandle, string URI, bool IsChannel, string Name, string AudioMedia); public delegate void SessionStateChangeEventCallback(string SessionHandle, int StatusCode, string StatusString, SessionState State, string URI, bool IsChannel, string ChannelName); public delegate void SessionParticipantStateChangeEventCallback(string SessionHandle, int StatusCode, string StatusString, ParticipantState State, string ParticipantURI, string AccountName, string DisplayName, ParticipantType ParticipantType); public delegate void SessionParticipantPropertiesEventCallback(string SessionHandle, string ParticipantURI, bool IsLocallyMuted, bool IsModeratorMuted, bool IsSpeaking, int Volume, float Energy); public delegate void SessionMediaEventCallback(string SessionHandle, bool HasText, bool HasAudio, bool HasVideo, bool Terminated); #endregion Session Delegates #region Connector Delegates public delegate void ConnectorCreateResponseCallback(int ReturnCode, string VersionID, int StatusCode, string StatusString, string ConnectorHandle, VoiceRequest Request); public delegate void ConnectorInitiateShutdownResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void ConnectorMuteLocalMicResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void ConnectorMuteLocalSpeakerResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void ConnectorSetLocalMicVolumeResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void ConnectorSetLocalSpeakerVolumeResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); #endregion Connector Delegates #region Aux Delegates public delegate void AuxGetCaptureDevicesResponseCallback(int ReturnCode, int StatusCode, string StatusString, List CaptureDevices, string CurrentCaptureDevice, VoiceRequest Request); public delegate void AuxGetRenderDevicesResponseCallback(int ReturnCode, int StatusCode, string StatusString, List RenderDevices, string CurrentRenderDevice, VoiceRequest Request); public delegate void AuxSetRenderDeviceResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void AuxSetCaptureDeviceResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void AuxCaptureAudioStartResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void AuxCaptureAudioStopResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void AuxSetMicLevelResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void AuxSetSpeakerLevelResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); /// /// Audio Properties Events are sent after audio capture is started. These events are used to display a microphone VU meter /// /// True if voice is detected on the microphone /// audio energy, from 0 to 1 /// current mic volume /// currently unimplemented, and always 0 public delegate void AuxAudioPropertiesEventCallback(bool MicIsActive, float MicEnergy, float MicVolume, float SpeakerVolume); // FIXME: Should MicVolume and SpeakerVolume be ints? #endregion Aux Delegates #region Account Delegates public delegate void AccountLoginResponseCallback(int ReturnCode, int StatusCode, string StatusString, string AccountHandle, VoiceRequest Request); public delegate void AccountLogoutResponseCallback(int ReturnCode, int StatusCode, string StatusString, VoiceRequest Request); public delegate void AccountLoginStateChangeEventCallback(string AccountHandle, int StatusCode, string StatusString, LoginState State); #endregion Account Delegates #region Session Events /// Response to Session.Create request public event SessionCreateResponseCallback OnSessionCreateResponse; /// Response to Session.Connect request public event SessionConnectResponseCallback OnSessionConnectResponse; /// Response to Session.RenderAudioStart request public event SessionRenderAudioStartResponseCallback OnSessionRenderAudioStartResponse; /// Response to Session.RenderAudioStop request public event SessionRenderAudioStopResponseCallback OnSessionRenderAudioStopResponse; /// Response to Session.Terminate request public event SessionTerminateResponseCallback OnSessionTerminateResponse; /// Response to Session.SetParticipantVolumeForMe request public event SessionSetParticipantVolumeForMeResponseCallback OnSessionSetParticipantVolumeForMeResponse; /// Sent when an incoming session occurs public event SessionNewEventCallback OnSessionNewEvent; /// Sent for specific Session state changes (connected, disconnected) public event SessionStateChangeEventCallback OnSessionStateChangeEvent; /// Sent for specific Participant state changes (new participants, dropped participants) public event SessionParticipantStateChangeEventCallback OnSessionParticipantStateChangeEvent; /// Sent for specific Participant Property changes (IsSpeaking, Volume, Energy, etc.) public event SessionParticipantPropertiesEventCallback OnSessionParticipantPropertiesEvent; /// public event SessionMediaEventCallback OnSessionMediaEvent; #endregion Session Events #region Connector Events /// Response to Connector.Create request public event ConnectorCreateResponseCallback OnConnectorCreateResponse; /// Response to Connector.InitiateShutdown request public event ConnectorInitiateShutdownResponseCallback OnConnectorInitiateShutdownResponse; /// Response to Connector.MuteLocalMic request public event ConnectorMuteLocalMicResponseCallback OnConnectorMuteLocalMicResponse; /// Response to Connector.MuteLocalSpeaker request public event ConnectorMuteLocalSpeakerResponseCallback OnConnectorMuteLocalSpeakerResponse; /// Response to Connector.SetLocalMicVolume request public event ConnectorSetLocalMicVolumeResponseCallback OnConnectorSetLocalMicVolumeResponse; /// Response to Connector.SetLocalSpeakerVolume request public event ConnectorSetLocalSpeakerVolumeResponseCallback OnConnectorSetLocalSpeakerVolumeResponse; #endregion Connector Events #region Aux Events /// Response to Aux.GetCaptureDevices request public event AuxGetCaptureDevicesResponseCallback OnAuxGetCaptureDevicesResponse; /// Response to Aux.GetRenderDevices request public event AuxGetRenderDevicesResponseCallback OnAuxGetRenderDevicesResponse; /// Response to Aux.SetRenderDevice request public event AuxSetRenderDeviceResponseCallback OnAuxSetRenderDeviceResponse; /// Response to Aux.SetCaptureDevice request public event AuxSetCaptureDeviceResponseCallback OnAuxSetCaptureDeviceResponse; /// Response to Aux.CaptureAudioStart request public event AuxCaptureAudioStartResponseCallback OnAuxCaptureAudioStartResponse; /// Response to Aux.CaptureAudioStop request public event AuxCaptureAudioStopResponseCallback OnAuxCaptureAudioStopResponse; /// Response to Aux.SetMicLevel request public event AuxSetMicLevelResponseCallback OnAuxSetMicLevelResponse; /// Response to Aux.SetSpeakerLevel request public event AuxSetSpeakerLevelResponseCallback OnAuxSetSpeakerLevelResponse; /// Audio Properties Events are sent after audio capture is started. /// These events are used to display a microphone VU meter public event AuxAudioPropertiesEventCallback OnAuxAudioPropertiesEvent; #endregion Aux Events #region Account Events /// Response to Account.Login request public event AccountLoginResponseCallback OnAccountLoginResponse; /// Response to Account.Logout request public event AccountLogoutResponseCallback OnAccountLogoutResponse; /// This event message is sent whenever the login state of the /// particular Account has transitioned from one value to another public event AccountLoginStateChangeEventCallback OnAccountLoginStateChangeEvent; #endregion Account Events #region XML Serialization Classes private XmlSerializer EventSerializer = new XmlSerializer(typeof(VoiceEvent)); private XmlSerializer ResponseSerializer = new XmlSerializer(typeof(VoiceResponse)); [XmlRoot("Event")] public class VoiceEvent { [XmlAttribute("type")] public string Type; public string AccountHandle; public string StatusCode; public string StatusString; public string State; public string SessionHandle; public string URI; public string IsChannel; public string Name; public string AudioMedia; public string ChannelName; public string ParticipantURI; public string AccountName; public string DisplayName; public string ParticipantType; public string IsLocallyMuted; public string IsModeratorMuted; public string IsSpeaking; public string Volume; public string Energy; public string MicIsActive; public string MicEnergy; public string MicVolume; public string SpeakerVolume; public string HasText; public string HasAudio; public string HasVideo; public string Terminated; } [XmlRoot("Response")] public class VoiceResponse { [XmlAttribute("requestId")] public string RequestId; [XmlAttribute("action")] public string Action; public string ReturnCode; public VoiceResponseResults Results; public VoiceInputXml InputXml; } public class CaptureDevice { public string Device; } public class RenderDevice { public string Device; } public class VoiceResponseResults { public string VersionID; public string StatusCode; public string StatusString; public string ConnectorHandle; public string AccountHandle; public string SessionHandle; public List CaptureDevices; public CaptureDevice CurrentCaptureDevice; public List RenderDevices; public RenderDevice CurrentRenderDevice; } public class VoiceInputXml { public VoiceRequest Request; } [XmlRoot("Request")] public class VoiceRequest { [XmlAttribute("requestId")] public string RequestId; [XmlAttribute("action")] public string Action; public string RenderDeviceSpecifier; public string CaptureDeviceSpecifier; public string Duration; public string Level; public string ClientName; public string AccountManagementServer; public string MinimumPort; public string MaximumPort; public VoiceLoggingSettings Logging; public string ConnectorHandle; public string Value; public string AccountName; public string AccountPassword; public string AudioSessionAnswerMode; public string AccountURI; public string ParticipantPropertyFrequency; public string EnableBuddiesAndPresence; public string URI; public string Name; public string Password; public string JoinAudio; public string JoinText; public string PasswordHashAlgorithm; public string SoundFilePath; public string Loop; public string SessionHandle; public string OrientationType; public VoicePosition SpeakerPosition; public VoicePosition ListenerPosition; public string ParticipantURI; public string Volume; } public class VoicePosition { /// Positional vector of the users position public Vector3d Position; /// Velocity vector of the position public Vector3d Velocity; /// At Orientation (X axis) of the position public Vector3d AtOrientation; /// Up Orientation (Y axis) of the position public Vector3d UpOrientation; /// Left Orientation (Z axis) of the position public Vector3d LeftOrientation; } #endregion XML Serialization Classes } }