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
}
}