Advertisement
imk0tter

OOP Class & Socket

Apr 12th, 2011
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
mIRC 10.62 KB | None | 0 0
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ; Description: This is the base class, which every   ;
  3. ; class inherits from...                             ;
  4. ;                                                    ;
  5. ; Usage: $Class(<uID>,<Params>,...).<Member>         ;
  6. ; Example: var %x $Class                             ;
  7. ; Example: $Class.Delete(%x)                         ;
  8. ; Example: $Class(%x,Name,Some Text).setv            ;
  9. ; Example: $Class(%x,Name).getv                      ;
  10. ; Example: $Class(%x,Name).removev                   ;
  11. ; Example: $Class.Delete(%x)                         ;
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13. ; Public Declarations ;
  14. ;;;;;;;;;;;;;;;;;;;;;;;
  15. alias Class.DELETE.Public
  16. alias Class.GETV.Public
  17. alias Class.SETV.Public
  18. alias Class.REMOVEV.Public
  19.  
  20. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  21. ; Exception Declarations ;
  22. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  23. alias Class.EXCEPTION.Null
  24.  
  25. ;;;;;;;;;;;;;;;
  26. ; Class Alias ;
  27. ;;;;;;;;;;;;;;;
  28. alias Class {
  29.   if (!$prop) goto init
  30.   if ($IsPublic(Class,$prop)) goto $prop
  31.   return $catch(0,MemberErr,$qt($prop) is not a public member of Class)
  32.   :init
  33.   hinc -m Objects ClassObjects
  34.   return $Class.INIT($md5($hget(Objects,ClassObjects)),Class)
  35.   :delete
  36.   return $Class.DELETE($1)
  37.   :getv
  38.   return $Class.GETV($1,$2)
  39.   :setv
  40.   return $Class.SETV($1,$2,$3,$4)
  41.   :removev
  42.   return $Class.REMOVEV($1,$2,$3)
  43. }
  44. ;;;;;;;;;;;;;;;;;
  45. ; Class Methods ;
  46. ;;;;;;;;;;;;;;;;;
  47. alias Class.INIT {
  48.   hadd -m Objects $1.INIT $2
  49.   return $1
  50. }
  51. alias Class.SETV {
  52.   var %x $hget($1,$2)
  53.   hadd -m $1 $2 $3
  54.   if $4 { $Object(%x).delete }
  55.   return %x
  56. }
  57. alias Class.GETV {
  58.   return $hget($1,$2)
  59. }
  60. alias Class.REMOVEV {
  61.   var %x $hget($1,$2)
  62.   hdel $1 $2
  63.   if $3 {
  64.     $Object(%x).delete
  65.   }
  66. }
  67. alias Class.DELETE {
  68.   ;;;;;;;;;;;;;;;;;;;;;;
  69.   ; Do Destroying here ;
  70.   ;;;;;;;;;;;;;;;;;;;;;;
  71.   var %x 1
  72.   while $hget($1,%x).data {
  73.     var %y $v1
  74.     if $isinstance(%y) { $Object(%y).delete }
  75.     inc %x
  76.   }
  77.   if $hget($1) { hfree $1 }
  78.   hdel -w Objects $1*
  79.   return
  80. }
  81. ;;;;;;;;;;;;;
  82. ; End Class ;
  83. ;;;;;;;;;;;;;
  84. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  85. ; Description: Returns whether or not a class member ;
  86. ; is public.                                         ;
  87. ;                                                    ;
  88. ; Usage: $IsPublic(<Class>,<Member>)                 ;
  89. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  90. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  91. alias IsPublic return $isalias($+($1.,$2.,Public))
  92.  
  93. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  94. ; Description: Called from the class constructor to  ;
  95. ; let the object know that the specified object      ;
  96. ; inherits from the specified class                  ;
  97. ;                                                    ;
  98. ; Usage: $InheritsFrom(<Object>,<Class>)             ;
  99. ; Example: $InheritsFrom(%instance,Player)           ;
  100. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  101. alias InheritsFrom hadd -m Objects $+($1.,INIT) $2 $hget(Objects,$+($1.,INIT))
  102.  
  103. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  104. ; Description: Returns whether or not an instance is ;
  105. ; an instance of the specified class                 ;
  106. ;                                                    ;
  107. ; Usage: $IsInstanceOf(<Instance>,<Class>)           ;
  108. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  109. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  110. alias IsInstanceOf return $findtok($hget(Objects,$1.INIT),$2,0,32)
  111.  
  112.  
  113. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  114. ; Description: Returns whether or not an instance    ;
  115. ; exists in memory                                   ;
  116. ;                                                    ;
  117. ; Usage: $IsInstance(<Instance>)                     ;
  118. ; Example: if (!$IsInstance(%x)) %x = $Player        ;
  119. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  120. alias IsInstance return $token($hget(Objects, $1.INIT),1,32)
  121.  
  122. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  123. ; Description: Called when ever an error is caught   ;
  124. ;                                                    ;
  125. ; Usage: $catch(<Instance>,<Error>,<Message>)        ;
  126. ; Example: if (!$IsInstanceOf(%Player,Player)) {     ;
  127. ; $catch(%Player,InstanceErr,Object %player is not   ;
  128. ;  an instance of class Player)                      ;
  129. ; }                                                  ;
  130. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  131. alias Catch {
  132.   var %error $2,%message $3,%instance $1
  133.   if $window(@Debug) { echo @Debug Caught $qt(%error) exception: %message }
  134.   if %instance {
  135.     var %x 1
  136.     while $token($hget(Objects,$+(%instance,.INIT)),%x,32) {
  137.       var %y $+($v1,.Exception.,%error)
  138.       if $isalias(%y) {
  139.         return $($+($,%y,$chr(40),%instance,$chr(44),%message,$chr(41)),2)
  140.       }
  141.       inc %x
  142.     }
  143.   }
  144. }
  145. ;;;;;;;;;;;;;
  146. ; End Catch ;
  147. ;;;;;;;;;;;;;
  148.  
  149. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  150. ; Description: Used to call the first found method   ;
  151. ; associated with an objects inheritance tree...     ;
  152. ;                                                    ;
  153. ; Usage: $Object(<Instance>,..).<Method>             ;
  154. ; Example: $Object(%stack,$2).add                    ;
  155. ; Equivelent: $List(%stack,$2).add                   ;
  156. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  157. alias Object {
  158.   var %x 1,%y $hget(Objects,$1.INIT),%a ,,
  159.   while $token(%y,%x,32) {
  160.     var %z $v1
  161.     if $isalias(%z $+ . $+ $prop $+ .Public) {
  162.       return $($ $+ %z $+ $chr(40) $+ $1 %a $2 %a $3 %a $4 %a $5 %a $6 %a $7 %a $8 %a $9 %a $+ $chr(41) $+ . $+ $prop,2)
  163.     }
  164.     inc %x
  165.   }
  166.   return $catch($1,MemberErr,$prop is not a public member of $isinstance($1))
  167. }
  168. ;;;;;;;;;;;;;;
  169. ; End Object ;
  170. ;;;;;;;;;;;;;;
  171.  
  172.  
  173.  
  174. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  175. ; Description: This is a Socket class which contains   ;
  176. ; the basic structure of a class                       ;
  177. ; Usage: $Socket(<Instance>,<Params>,..).<Method>      ;
  178. ; Example: var %x $Socket(127.0.0.1,1337,LocalSock)    ;
  179. ; Example: $Socket(%x,SockOpenAlias).sockopen          ;
  180. ; Example: $Socket(%x,SockReadAlias).sockread          ;
  181. ; Example: $Socket(%x).connect                         ;
  182. ; Example: $Socket(%x).close                           ;
  183. ; Example: $Socket(%x).delete                          ;
  184. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  185. ; Public Declarations ;
  186. ;;;;;;;;;;;;;;;;;;;;;;;
  187. alias Socket.DELETE.Public
  188. alias Socket.PORT.Public
  189. alias Socket.IP.Public
  190. alias Socket.OPEN.Public
  191. alias Socket.CONNECT.Public
  192. alias Socket.LISTEN.Public
  193. alias Socket.CLOSE.Public
  194. alias Socket.SOCKREAD.Public
  195. alias Socket.SOCKOPEN.Public
  196. alias Socket.SOCKCLOSE.Public
  197. alias Socket.SOCKACCEPT.Public
  198. alias Socket.TAG.Public
  199. alias Socket.SETTAG.Public
  200. alias Socket.SETIP.Public
  201. alias Socket.SETPORT.Public
  202. alias Socket.WRITE.Public
  203. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  204. ; Exception Declarations ;
  205. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  206. alias Socket.EXCEPTION.SockErr {
  207.   $Class($1,SockErr).getv $1-
  208.   return $iif($bvar(&SockErr,0),$bvar(&SockErr,1-).text)
  209. }
  210. ;;;;;;;;;;;;;;;;
  211. ; Socket Alias ;
  212. ;;;;;;;;;;;;;;;;
  213. alias Socket {
  214.   if (!$prop) goto init
  215.   if ($IsPublic(Socket,$prop)) goto $prop
  216.   return $catch($1,MemberErr, $qt($prop) is not a public member of Socket)
  217.   :init
  218.   return $Socket.INIT($1,$2,$3)
  219.   :delete
  220.   return $Socket.DELETE($1)
  221.   :open
  222.   :connect
  223.   if ($sock($1).status) $catch($1,SockOpenErr,Socket $1 is already open)
  224.   sockopen $1 $Class($1,IP).getv $Class($1,PORT).getv
  225.   return
  226.   :close
  227.   if ($sock($1).status) sockclose $1
  228.   else return $catch($1,SockCloseErr,Sock $1 was not open)
  229.   return
  230.   :listen
  231.   if ($sock($1).status) $catch($1,SockOpenErr,Socket $1 is already open)
  232.   var %x $iif($Class($1,IP).getv,$v1),%y $iif(%x != $null,-d)
  233.   socklisten %y %x $1 $Class($1,PORT).getv
  234.   return
  235.   :sockclose
  236.   return $Class($1,CLOSE,$2).setv
  237.   :sockopen
  238.   return $Class($1,OPEN,$2).setv
  239.   :sockaccept
  240.   return $Class($1,ACCEPT,$2).setv
  241.   :sockread
  242.   return $Class($1,READ,$2).setv
  243.   :settag
  244.   $Class($1,Tag,$2).setv
  245.   :tag
  246.   return $Class($1,Tag).getv
  247.   :setip
  248.   return $Class($1,IP,$2).setv
  249.   :setport
  250.   return $Class($1,PORT,$2).setv
  251.   :ip
  252.   return $Class($1,IP).getv
  253.   :port
  254.   return $Class($1,PORT).getv
  255.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  256.   ; Put your own method handlers here ;
  257.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  258.   :write
  259.   if ($sock($1).status != active) return $catch($1,SockErr,Socket $1 is not connected)
  260.   sockwrite $1 $2
  261.   return
  262.   :MethodHandler
  263. }
  264.  
  265. ;;;;;;;;;;;;;;;;;;
  266. ; Socket Methods ;
  267. ;;;;;;;;;;;;;;;;;;
  268. alias Socket.INIT {
  269.   var %instance $Class
  270.   $inheritsFrom(%instance,Socket)
  271.   $Class(%instance,IP,$1).setv
  272.   $Class(%instance,PORT,$2).setv
  273.   $Class(%instance,OPEN,Socket.DefaultSockOpen).setv
  274.   $Class(%instance,CLOSE,Socket.DefaultSockClose).setv
  275.   $Class(%instance,ACCEPT,Socket.DefaultSockAccept).setv
  276.   $Class(%instance,READ,Socket.DefaultSockRead).setv
  277.   $Class(%instance,SockErr,Socket.DefaultSockErr).setv
  278.   $Class(%instance,Tag,$iif($isinstance($3),$3,$3)).setv
  279.   ;;;;;;;;;;;;;;;;;;;;;;;;
  280.   ; Do Initializing here ;
  281.   ;;;;;;;;;;;;;;;;;;;;;;;;
  282.   return %instance
  283. }
  284. alias Socket.DELETE {
  285.   ;;;;;;;;;;;;;;;;;;;;;;
  286.   ; Do Destroying here ;
  287.   ;;;;;;;;;;;;;;;;;;;;;;
  288.   if ($sock($1).status) sockclose $1
  289.   return $Class($1).DELETE
  290. }
  291. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  292. ; Default Event Handlers ;
  293. ;;;;;;;;;;;;;;;;;;;;;;;;;;
  294. alias Socket.DefaultSockOpen {
  295.   if ($Window(@Debug)) echo @Debug Successfully $iif($sock($sockname).status != Active,dis) $+ connected to $sock($sockname).ip $+ : $+ $sock($sockname).port
  296. }
  297. alias Socket.DefaultSockClose {
  298.   if ($Window(@Debug)) echo @Debug Successfully disconnected from $sock($sockname).ip $+ : $+ $sock($sockname).port
  299.   $Socket($1).delete
  300. }
  301. alias Socket.DefaultSockRead {
  302.   sockread %temp
  303.   if ($window(@Debug)) echo @Debug %temp
  304. }
  305. alias Socket.DefaultSockAccept {
  306.   var %x $sockname $+ 
  307.   /sockaccept %x
  308.   var %y $sock(%x).ip,%z $sock(%x).port, %a $socket(%y,%x)
  309.   sockrename %x %a $+ 
  310.   if ($window(@Debug)) echo @Debug Socket accepted from  $+ %y $+  on port  $+ %z $+ : Handle = %a
  311. }
  312. alias Socket.DefaultSockErr {
  313.   sockclose $1
  314. }
  315. alias SockErr {
  316.   bset -t &SockErr $1-
  317. }
  318. ;;;;;;;;;;;;;;;;;;;;
  319. ; Trigger Handlers ;
  320. ;;;;;;;;;;;;;;;;;;;;
  321. on 1:sockopen:*: $Class($left($sockname,-1),OPEN).getv $left($sockname,-1)
  322. on 1:sockclose:*: $Class($left($sockname,-1),CLOSE).getv $left($sockname,-1)
  323. on 1:socklisten:*: $Class($left($sockname,-1),ACCEPT).getv $left($sockname,-1)
  324. on 1:sockread:*: $Class($left($sockname,-1),READ).getv $left($sockname,-1)
  325. ;;;;;;;;;;;;;;
  326. ; End Socket ;
  327. ;;;;;;;;;;;;;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement