mono/Elements.cs
changeset 84 7ae7b690aa89
parent 59 ef952e8c114d
equal deleted inserted replaced
83:9c89653e79a1 84:7ae7b690aa89
       
     1 using System;
       
     2 using System.Runtime.InteropServices;
       
     3 
     1 namespace Loudmouth {
     4 namespace Loudmouth {
     2     using System;
     5 
     3     using System.Runtime.InteropServices;
     6     public class Element  {
     4     public class Element : Object {
     7 	protected IntPtr _obj;
       
     8 	
     5 	public enum ElementType {
     9 	public enum ElementType {
     6 	    MESSAGE,
    10 	    MESSAGE,
     7 	    PRESENCE,
    11 	    PRESENCE,
     8 	    IQ,
    12 	    IQ,
     9 	    STREAM,
    13 	    STREAM,
    10 	    STREAM_ERROR,
    14 	    STREAM_ERROR,
    11 	    UNKNOWN
    15 	    UNKNOWN
    12 	}
    16 	}
    13 	
    17 	
    14 	public enum ElementSubType {
    18 	public enum ElementSubType {
    15 	    NOT_SET = -1,
    19 	    NOT_SET = -10,
    16 	    CHAT = 0,
    20 	    AVAILABLE = -1,
       
    21 	    NORMAL = 0,
       
    22 	    CHAT,
    17 	    GROUPCHAT,
    23 	    GROUPCHAT,
    18 	    HEADLINE,
    24 	    HEADLINE,
    19 	    AVAILABLE,
       
    20 	    UNAVAILABLE,
    25 	    UNAVAILABLE,
    21 	    PROBE,
    26 	    PROBE,
    22 	    SUBSCRIBE,
    27 	    SUBSCRIBE,
    23 	    UNSUBSCRIBE,
    28 	    UNSUBSCRIBE,
    24 	    SUBSCRIBED,
    29 	    SUBSCRIBED,
    33 	    get {
    38 	    get {
    34 		return (ElementType) lm_message_get_type(this._obj);
    39 		return (ElementType) lm_message_get_type(this._obj);
    35 	    }
    40 	    }
    36 	}
    41 	}
    37 	
    42 	
    38 	private Element () {}
       
    39 	
       
    40 	protected Element (IntPtr obj) : base (obj) {
       
    41 	}
       
    42 	
       
    43 	[DllImport ("libloudmouth.so")]
       
    44 	    private static extern int lm_message_get_type (IntPtr obj);
       
    45 
       
    46 	[DllImport ("libloudmouth.so")]
       
    47 	    private static extern IntPtr lm_message_new (string to, ElementType type);
       
    48 	
       
    49 	protected Element (string to, ElementType type) {
       
    50 	    _obj = lm_message_new (to, type);
       
    51 	}
       
    52 	
       
    53 	[DllImport ("libloudmouth.so")]
       
    54 	    private static extern IntPtr lm_message_new_with_sub_type (string to, ElementType type, ElementSubType sub);
       
    55 	
       
    56 	protected Element (string to, ElementType type, ElementSubType sub) {
       
    57 	    _obj = lm_message_new_with_sub_type(to, type, sub);
       
    58 	}
       
    59 	
       
    60 	[DllImport ("libloudmouth.so")]
       
    61 	    private static extern ElementSubType lm_message_get_sub_type (IntPtr obj);
       
    62 
       
    63 	protected ElementSubType GetElementSubType () {
       
    64 	    return lm_message_get_sub_type(this._obj);
       
    65 	}
       
    66 
       
    67 	[DllImport ("libloudmouth.so")]
       
    68 	    private static extern IntPtr lm_message_get_node (IntPtr obj);
       
    69 
       
    70 	public ElementNode GetNode () {
       
    71 	    return new ElementNode(lm_message_get_node (this._obj));
       
    72 	}
       
    73 
       
    74 	public string this[string data] {
    43 	public string this[string data] {
    75 	    get {
    44 	    get {
    76 		ElementNode node = this.GetNode();
    45 		ElementNode node = this.GetNode ();
    77 		return node[data];
    46 		return node[data];
    78 	    }
    47 	    }
    79 	    set {
    48 	    set {
    80 		ElementNode node = this.GetNode();
    49 		ElementNode node = this.GetNode();
    81 		node[data] = value;
    50 		node[data] = value;
    82 	    }
    51 	    }
    83 	}
    52 	}
    84 	
    53 	
    85 	public override string ToString () {
    54 	protected Element (IntPtr obj) 
       
    55 	{
       
    56 	    this._obj = obj;
       
    57 	}
       
    58 
       
    59 	protected Element (string to, ElementType type) 
       
    60 	{
       
    61 	    _obj = lm_message_new (to, type);
       
    62 	}
       
    63 	
       
    64 	protected Element (string to, ElementType type, ElementSubType sub) 
       
    65 	{
       
    66 	    _obj = lm_message_new_with_sub_type (to, type, sub);
       
    67 	}
       
    68 	
       
    69 	protected ElementSubType GetElementSubType () 
       
    70 	{
       
    71 	    return lm_message_get_sub_type (this._obj);
       
    72 	}
       
    73 
       
    74 	public ElementNode GetNode () 
       
    75 	{
       
    76 	    return new ElementNode(lm_message_get_node (this._obj));
       
    77 	}
       
    78 
       
    79 	public IntPtr GetObject ()
       
    80 	{
       
    81 	    return _obj;
       
    82 	}
       
    83 	
       
    84 	public override string ToString () 
       
    85 	{
    86 	    return "<Element: " + this.Kind + ":" + this.GetElementSubType() + ">";
    86 	    return "<Element: " + this.Kind + ":" + this.GetElementSubType() + ">";
    87 	}
    87 	}
    88 
    88 
    89 	public static Element CreateElement (IntPtr obj) {
    89 	public static Element CreateElement (IntPtr obj)
       
    90 	{
    90 	    switch (lm_message_get_type(obj)) {
    91 	    switch (lm_message_get_type(obj)) {
    91 		case (int)Element.ElementType.MESSAGE:
    92 		case (int)Element.ElementType.MESSAGE:
    92 		    return new Message(obj);
    93 		    return new Message(obj);
    93 		case (int)Element.ElementType.PRESENCE:
    94 		case (int)Element.ElementType.PRESENCE:
    94 		    return new Presence(obj);
    95 		    return new Presence(obj);
    95 		case (int)Element.ElementType.IQ:
    96 		case (int)Element.ElementType.IQ:
    96 		    return new IQ(obj);
    97 		    return new IQ(obj);
    97 	    }
    98 	    }
    98 	    return null;
    99 	    return null;
    99 	}
   100 	}
   100     }
   101  
       
   102 	[DllImport ("libloudmouth-1.so")]
       
   103 	    private static extern int lm_message_get_type (IntPtr obj);
       
   104 	[DllImport ("libloudmouth-1.so")]
       
   105 	    private static extern IntPtr lm_message_new (string to, ElementType type);
       
   106 	[DllImport ("libloudmouth-1.so")]
       
   107 	    private static extern IntPtr lm_message_new_with_sub_type (string to, ElementType type, ElementSubType sub);
       
   108 	[DllImport ("libloudmouth-1.so")]
       
   109 	    private static extern ElementSubType lm_message_get_sub_type (IntPtr obj);
       
   110 	[DllImport ("libloudmouth-1.so")]
       
   111 	    private static extern IntPtr lm_message_get_node (IntPtr obj);
       
   112    }
   101   
   113   
   102     public class Message : Element {
   114     public class Message : Element {
   103 	public MessageType Type {
   115 	public MessageType Type {
   104 	    get {
   116 	    get {
   105 		return (MessageType) this.GetElementSubType ();
   117 		return (MessageType) this.GetElementSubType ();
   123 	    CHAT       = Element.ElementSubType.CHAT,
   135 	    CHAT       = Element.ElementSubType.CHAT,
   124 	    GROUPCHAT  = Element.ElementSubType.GROUPCHAT,
   136 	    GROUPCHAT  = Element.ElementSubType.GROUPCHAT,
   125 	    HEADLINE   = Element.ElementSubType.HEADLINE
   137 	    HEADLINE   = Element.ElementSubType.HEADLINE
   126 	}
   138 	}
   127 
   139 
   128 	public Message (IntPtr obj) :
   140 	public Message (IntPtr obj) : base (obj) 
   129 	    base (obj) {
   141 	{
   130 	    }
   142 	}
   131 	
   143 	
   132 	public Message (string to) :
   144 	public Message (string to) : base (to, Element.ElementType.MESSAGE, Element.ElementSubType.NOT_SET) 
   133 	    base (to, Element.ElementType.MESSAGE, Element.ElementSubType.NOT_SET) {
   145 	{
   134 	    }
   146 	}
   135 	
   147 	
   136 	public Message (string to, MessageType type) : 
   148 	public Message (string to, MessageType type) : base (to, Element.ElementType.MESSAGE, (Element.ElementSubType) type) 
   137 	    base (to, Element.ElementType.MESSAGE, (Element.ElementSubType) type) {
   149 	{
   138 	}
   150 	}
   139     }
   151     }
   140 
   152 
   141     public class Presence : Element {
   153     public class Presence : Element {
   142 	public enum PresenceType {
   154 	public enum PresenceType {
   147 	    UNSUBSCRIBE  = Element.ElementSubType.UNSUBSCRIBE,
   159 	    UNSUBSCRIBE  = Element.ElementSubType.UNSUBSCRIBE,
   148 	    SUBSCRIBED   = Element.ElementSubType.SUBSCRIBED,
   160 	    SUBSCRIBED   = Element.ElementSubType.SUBSCRIBED,
   149 	    UNSUBSCRIBED = Element.ElementSubType.UNSUBSCRIBED, 
   161 	    UNSUBSCRIBED = Element.ElementSubType.UNSUBSCRIBED, 
   150 	}
   162 	}
   151 
   163 
   152 	public Presence (IntPtr obj) : base (obj) {
   164 	public Presence (IntPtr obj) : base (obj) 
   153 	}
   165 	{
   154 
   166 	}
   155 	public Presence () : base (null, Element.ElementType.PRESENCE, Element.ElementSubType.AVAILABLE) {}
   167 
       
   168 	public Presence () : base (null, Element.ElementType.PRESENCE, Element.ElementSubType.AVAILABLE) 
       
   169 	{
       
   170 	}
   156 		    
   171 		    
   157 	public Presence (PresenceType type) : base (null, Element.ElementType.PRESENCE, (Element.ElementSubType) type) {}
   172 	public Presence (PresenceType type) : base (null, Element.ElementType.PRESENCE, (Element.ElementSubType) type) 
   158 	
   173 	{
   159 	public Presence (string to) :
   174 	}
   160 	    base (to, Element.ElementType.PRESENCE) {
   175 	
   161 	}
   176 	public Presence (string to) : base (to, Element.ElementType.PRESENCE) 
   162 	
   177 	{
   163 	public Presence (string to, PresenceType type) :
   178 	}
   164 	    base (to, Element.ElementType.PRESENCE, (Element.ElementSubType) type) {
   179 	
       
   180 	public Presence (string to, PresenceType type) : base (to, Element.ElementType.PRESENCE, (Element.ElementSubType) type) 
       
   181 	{
   165 	}
   182 	}
   166     }
   183     }
   167 
   184 
   168     public class IQ : Element {
   185     public class IQ : Element {
   169 
   186 
   189 	    GET    = Element.ElementSubType.GET,
   206 	    GET    = Element.ElementSubType.GET,
   190 	    SET    = Element.ElementSubType.SET,
   207 	    SET    = Element.ElementSubType.SET,
   191 	    RESULT = Element.ElementSubType.RESULT
   208 	    RESULT = Element.ElementSubType.RESULT
   192 	}
   209 	}
   193 
   210 
   194 	public IQ (IntPtr obj) : base (obj) {
   211 	public IQ (IntPtr obj) : base (obj) 
   195 	}
   212 	{
   196 
   213 	}
   197 	public IQ () :
   214 
   198 	    base (null, Element.ElementType.IQ, Element.ElementSubType.GET) {}
   215 	public IQ () : base (null, Element.ElementType.IQ, Element.ElementSubType.GET) 
   199 	
   216 	{
   200 	public IQ (string to) :
   217 	}
   201 	    base (to, Element.ElementType.IQ, Element.ElementSubType.GET) {}
   218 	
   202 
   219 	public IQ (string to) : base (to, Element.ElementType.IQ, Element.ElementSubType.GET) 
   203 	public IQ (string to, IQType type) :
   220 	{
   204 	    base (to, Element.ElementType.IQ, (Element.ElementSubType) type) {}
   221 	}
   205 
   222 	
   206 	public IQ (IQType type) : 
   223 	public IQ (string to, IQType type) : base (to, Element.ElementType.IQ, (Element.ElementSubType) type) 
   207 	    base (null, Element.ElementType.IQ, (Element.ElementSubType) type) {}
   224 	{
       
   225 	}
       
   226 
       
   227 	public IQ (IQType type) : base (null, Element.ElementType.IQ, (Element.ElementSubType) type) 
       
   228 	{
       
   229 	}
   208     }
   230     }
   209 }
   231 }