Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: This is the base class, which every ;
- ; class inherits from... ;
- ; ;
- ; Usage: $Class(<uID>,<Params>,...).<Member> ;
- ; Example: var %x $Class ;
- ; Example: $Class.Delete(%x) ;
- ; Example: $Class(%x,Name,Some Text).setv ;
- ; Example: $Class(%x,Name).getv ;
- ; Example: $Class(%x,Name).removev ;
- ; Example: $Class.Delete(%x) ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Public Declarations ;
- ;;;;;;;;;;;;;;;;;;;;;;;
- alias Class.DELETE.Public
- alias Class.GETV.Public
- alias Class.SETV.Public
- alias Class.REMOVEV.Public
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Exception Declarations ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Class.EXCEPTION.Null
- ;;;;;;;;;;;;;;;
- ; Class Alias ;
- ;;;;;;;;;;;;;;;
- alias Class {
- if (!$prop) goto init
- if ($IsPublic(Class,$prop)) goto $prop
- return $catch(0,MemberErr,$qt($prop) is not a public member of Class)
- :init
- hinc -m Objects ClassObjects
- return $Class.INIT($md5($hget(Objects,ClassObjects)),Class)
- :delete
- return $Class.DELETE($1)
- :getv
- return $Class.GETV($1,$2)
- :setv
- return $Class.SETV($1,$2,$3,$4)
- :removev
- return $Class.REMOVEV($1,$2,$3)
- }
- ;;;;;;;;;;;;;;;;;
- ; Class Methods ;
- ;;;;;;;;;;;;;;;;;
- alias Class.INIT {
- hadd -m Objects $1.INIT $2
- return $1
- }
- alias Class.SETV {
- var %x $hget($1,$2)
- hadd -m $1 $2 $3
- if $4 { $Object(%x).delete }
- return %x
- }
- alias Class.GETV {
- return $hget($1,$2)
- }
- alias Class.REMOVEV {
- var %x $hget($1,$2)
- hdel $1 $2
- if $3 {
- $Object(%x).delete
- }
- }
- alias Class.DELETE {
- ;;;;;;;;;;;;;;;;;;;;;;
- ; Do Destroying here ;
- ;;;;;;;;;;;;;;;;;;;;;;
- var %x 1
- while $hget($1,%x).data {
- var %y $v1
- if $isinstance(%y) { $Object(%y).delete }
- inc %x
- }
- if $hget($1) { hfree $1 }
- hdel -w Objects $1*
- return
- }
- ;;;;;;;;;;;;;
- ; End Class ;
- ;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not a class member ;
- ; is public. ;
- ; ;
- ; Usage: $IsPublic(<Class>,<Member>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsPublic return $isalias($+($1.,$2.,Public))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Called from the class constructor to ;
- ; let the object know that the specified object ;
- ; inherits from the specified class ;
- ; ;
- ; Usage: $InheritsFrom(<Object>,<Class>) ;
- ; Example: $InheritsFrom(%instance,Player) ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias InheritsFrom hadd -m Objects $+($1.,INIT) $2 $hget(Objects,$+($1.,INIT))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not an instance is ;
- ; an instance of the specified class ;
- ; ;
- ; Usage: $IsInstanceOf(<Instance>,<Class>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsInstanceOf return $findtok($hget(Objects,$1.INIT),$2,0,32)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not an instance ;
- ; exists in memory ;
- ; ;
- ; Usage: $IsInstance(<Instance>) ;
- ; Example: if (!$IsInstance(%x)) %x = $Player ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsInstance return $token($hget(Objects, $1.INIT),1,32)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Called when ever an error is caught ;
- ; ;
- ; Usage: $catch(<Instance>,<Error>,<Message>) ;
- ; Example: if (!$IsInstanceOf(%Player,Player)) { ;
- ; $catch(%Player,InstanceErr,Object %player is not ;
- ; an instance of class Player) ;
- ; } ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Catch {
- var %error $2,%message $3,%instance $1
- if $window(@Debug) { echo @Debug Caught $qt(%error) exception: %message }
- if %instance {
- var %x 1
- while $token($hget(Objects,$+(%instance,.INIT)),%x,32) {
- var %y $+($v1,.Exception.,%error)
- if $isalias(%y) {
- return $($+($,%y,$chr(40),%instance,$chr(44),%message,$chr(41)),2)
- }
- inc %x
- }
- }
- }
- ;;;;;;;;;;;;;
- ; End Catch ;
- ;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Used to call the first found method ;
- ; associated with an objects inheritance tree... ;
- ; ;
- ; Usage: $Object(<Instance>,..).<Method> ;
- ; Example: $Object(%stack,$2).add ;
- ; Equivelent: $List(%stack,$2).add ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Object {
- var %x 1,%y $hget(Objects,$1.INIT)
- while $token(%y,%x,32) {
- var %z $v1
- if $isalias(%z $+ . $+ $prop $+ .Public) {
- return $($+($,%z,( $regsubex($mid($str($chr(44),$0),2),//g,$\n) ).,$prop),2)
- }
- inc %x
- }
- return $catch($1,MemberErr,$prop is not a public member of $isinstance($1))
- }
- ;;;;;;;;;;;;;;
- ; End Object ;
- ;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: This is a Socket class which contains ;
- ; the basic structure of a class ;
- ; Usage: $Socket(<Instance>,<Params>,..).<Method> ;
- ; Example: var %x $Socket(127.0.0.1,1337,LocalSock) ;
- ; Example: $Socket(%x,SockOpenAlias).sockopen ;
- ; Example: $Socket(%x,SockReadAlias).sockread ;
- ; Example: $Socket(%x).connect ;
- ; Example: $Socket(%x).close ;
- ; Example: $Socket(%x).delete ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Public Declarations ;
- ;;;;;;;;;;;;;;;;;;;;;;;
- alias Socket.DELETE.Public
- alias Socket.PORT.Public
- alias Socket.IP.Public
- alias Socket.OPEN.Public
- alias Socket.CONNECT.Public
- alias Socket.LISTEN.Public
- alias Socket.CLOSE.Public
- alias Socket.SOCKREAD.Public
- alias Socket.SOCKOPEN.Public
- alias Socket.SOCKCLOSE.Public
- alias Socket.SOCKACCEPT.Public
- alias Socket.TAG.Public
- alias Socket.SETTAG.Public
- alias Socket.SETIP.Public
- alias Socket.SETPORT.Public
- alias Socket.WRITE.Public
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Exception Declarations ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Socket.EXCEPTION.SockErr {
- $Class($1,SockErr).getv $1-
- return $iif($bvar(&SockErr,0),$bvar(&SockErr,1-).text)
- }
- ;;;;;;;;;;;;;;;;
- ; Socket Alias ;
- ;;;;;;;;;;;;;;;;
- alias Socket {
- if (!$prop) goto init
- if ($IsPublic(Socket,$prop)) goto $prop
- return $catch($1,MemberErr, $qt($prop) is not a public member of Socket)
- :init
- return $Socket.INIT($1,$2,$3)
- :delete
- return $Socket.DELETE($1)
- :open
- :connect
- if ($sock($1).status) $catch($1,SockOpenErr,Socket $1 is already open)
- sockopen $1 $Class($1,IP).getv $Class($1,PORT).getv
- return
- :close
- if ($sock($1).status) sockclose $1
- else return $catch($1,SockCloseErr,Sock $1 was not open)
- return
- :listen
- if ($sock($1).status) $catch($1,SockOpenErr,Socket $1 is already open)
- var %x $iif($Class($1,IP).getv,$v1),%y $iif(%x != $null,-d)
- socklisten %y %x $1 $Class($1,PORT).getv
- return
- :sockclose
- return $Class($1,CLOSE,$2).setv
- :sockopen
- return $Class($1,OPEN,$2).setv
- :sockaccept
- return $Class($1,ACCEPT,$2).setv
- :sockread
- return $Class($1,READ,$2).setv
- :settag
- $Class($1,Tag,$2).setv
- :tag
- return $Class($1,Tag).getv
- :setip
- return $Class($1,IP,$2).setv
- :setport
- return $Class($1,PORT,$2).setv
- :ip
- return $Class($1,IP).getv
- :port
- return $Class($1,PORT).getv
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Put your own method handlers here ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- :write
- if ($sock($1).status != active) return $catch($1,SockErr,Socket $1 is not connected)
- sockwrite $1 $2
- return
- :MethodHandler
- }
- ;;;;;;;;;;;;;;;;;;
- ; Socket Methods ;
- ;;;;;;;;;;;;;;;;;;
- alias Socket.INIT {
- var %instance $Class
- $inheritsFrom(%instance,Socket)
- $Class(%instance,IP,$1).setv
- $Class(%instance,PORT,$2).setv
- $Class(%instance,OPEN,Socket.DefaultSockOpen).setv
- $Class(%instance,CLOSE,Socket.DefaultSockClose).setv
- $Class(%instance,ACCEPT,Socket.DefaultSockAccept).setv
- $Class(%instance,READ,Socket.DefaultSockRead).setv
- $Class(%instance,SockErr,Socket.DefaultSockErr).setv
- $Class(%instance,Tag,$iif($isinstance($3),$3,$3)).setv
- ;;;;;;;;;;;;;;;;;;;;;;;;
- ; Do Initializing here ;
- ;;;;;;;;;;;;;;;;;;;;;;;;
- return %instance
- }
- alias Socket.DELETE {
- ;;;;;;;;;;;;;;;;;;;;;;
- ; Do Destroying here ;
- ;;;;;;;;;;;;;;;;;;;;;;
- if ($sock($1).status) sockclose $1
- return $Class($1).DELETE
- }
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Default Event Handlers ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias Socket.DefaultSockOpen {
- if ($Window(@Debug)) echo @Debug Successfully $iif($sock($sockname).status != Active,dis) $+ connected to $sock($sockname).ip $+ : $+ $sock($sockname).port
- }
- alias Socket.DefaultSockClose {
- if ($Window(@Debug)) echo @Debug Successfully disconnected from $sock($sockname).ip $+ : $+ $sock($sockname).port
- $Socket($1).delete
- }
- alias Socket.DefaultSockRead {
- sockread %temp
- if ($window(@Debug)) echo @Debug %temp
- }
- alias Socket.DefaultSockAccept {
- var %x $sockname $+
- /sockaccept %x
- var %y $sock(%x).ip,%z $sock(%x).port, %a $socket(%y,%x)
- sockrename %x %a $+
- if ($window(@Debug)) echo @Debug Socket accepted from $+ %y $+ on port $+ %z $+ : Handle = %a
- }
- alias Socket.DefaultSockErr {
- sockclose $1
- }
- alias SockErr {
- bset -t &SockErr $1-
- }
- ;;;;;;;;;;;;;;;;;;;;
- ; Trigger Handlers ;
- ;;;;;;;;;;;;;;;;;;;;
- on 1:sockopen:*: $Class($left($sockname,-1),OPEN).getv $left($sockname,-1)
- on 1:sockclose:*: $Class($left($sockname,-1),CLOSE).getv $left($sockname,-1)
- on 1:socklisten:*: $Class($left($sockname,-1),ACCEPT).getv $left($sockname,-1)
- on 1:sockread:*: $Class($left($sockname,-1),READ).getv $left($sockname,-1)
- ;;;;;;;;;;;;;;
- ; End Socket ;
- ;;;;;;;;;;;;;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement