Public Class GlobalResources
Public Enum MessageType
PRIVMSG
NS
End Enum
Public Structure Message
Dim Type As MessageType
Dim Nick As String
Dim User As String
Dim Host As String
Dim Target As String
Dim Message As String
Dim Owner As String
Dim Server As String
Dim BotNick As String
Dim Raw As String
Public Sub New(ByVal _Type As MessageType, _
ByVal _Nick As String, _
ByVal _User As String, _
ByVal _Host As String, _
ByVal _Target As String, _
ByVal _Message As String, _
ByVal _Owner As String, _
ByVal _Server As String, _
ByVal _BotNick As String, _
ByVal _Raw As String)
Type = _Type
Nick = _Nick
User = _User
Host = _Host
Target = _Target
Message = _Message
Owner = _Owner
Server = _Server
End Sub
Public Sub New(ByVal RawMessage As String, ByVal _Owner As String, ByVal _Server As String, _BotNick As String)
Raw = RawMessage
Owner = _Owner
Server = _Server
BotNick = _BotNick
If RawMessage.StartsWith(":") Then
Dim PreInfo As String = RawMessage.Remove(0, 1).Split(" ")(0)
If RawMessage.Split(" ")(1) = "PRIVMSG" Then
Try
Type = MessageType.PRIVMSG
Nick = PreInfo.Split("!")(0)
User = PreInfo.Split("!")(1).Split("@")(0)
Host = PreInfo.Split("@")(1).Split(" ")(0)
Target = RawMessage.Split(" ")(2)
Message = RawMessage.Substring(Nick.Length + _
User.Length + _
Host.Length + _
Target.Length + 14)
Catch ex As Exception
Type = MessageType.NS
End Try
Else
Type = MessageType.NS
End If
End If
If Type = MessageType.PRIVMSG Then
If Nick = Nothing Or _
User = Nothing Or _
Host = Nothing Or _
Target = Nothing Or _
Message = Nothing Then
Type = MessageType.NS
End If
End If
End Sub
End Structure
Public Structure ResourceElement
Dim Type As String
Dim Name As String
Dim Value As Object
Public Sub New(ByVal Type As String, ByVal Name As String, ByVal Value As Object)
Me.Type = Type
Me.Name = Name
Me.Value = Value
End Sub
End Structure
Public Structure Resource
Dim Origin As String
Dim Resources As List(Of ResourceElement)
Public Sub New(ByVal Origin As String, ByVal Resources As ResourceElement)
Me.Origin = Origin
Me.Resources = New List(Of ResourceElement)
Me.Resources.Add(Resources)
End Sub
Public Sub New(ByVal Origin As String, Optional ByVal Resources() As ResourceElement = Nothing)
Me.Origin = Origin
If Resources Is Nothing Then Me.Resources = New List(Of ResourceElement) Else Me.Resources = Resources.ToList
End Sub
End Structure
Public Shared SharedResources As New List(Of Resource)
Public Shared Function GetToSend() As String
Dim crntsnd As String = String.Empty
SyncLock SharedResources(0).Resources(1).Value
If SharedResources(0).Resources(1).Value.count > 0 Then
crntsnd = SharedResources(0).Resources(1).Value(0)
SharedResources(0).Resources(1).Value.RemoveAt(0)
End If
End SyncLock
Return crntsnd
End Function
Public Shared Function GetRecvMsg(Optional ByVal RemoveOnGet As Boolean = True) As String
Dim Holding As String = String.Empty
SyncLock SharedResources(0).Resources(0).Value
If SharedResources(0).Resources(0).Value.count > 0 Then
Holding = SharedResources(0).Resources(0).Value(0)
If RemoveOnGet Then SharedResources(0).Resources(0).Value.RemoveAt(0)
End If
End SyncLock
Return Holding
End Function
Public Shared Function GetConsoleMsg(Optional ByVal RemoveOnGet As Boolean = True) As String
Dim Holding As String = String.Empty
SyncLock SharedResources(0).Resources(6).Value
If SharedResources(0).Resources(6).Value.count > 0 Then
Holding = SharedResources(0).Resources(6).Value(0)
If RemoveOnGet Then SharedResources(0).Resources(6).Value.RemoveAt(0)
End If
End SyncLock
Return Holding
End Function
Public Shared Function ParseMessage(ByRef sourceInfo As Message, ByVal Input As String) As String
On Error Resume Next
ParseMessage = Input.Replace("<HOST>", sourceInfo.Host)
ParseMessage = ParseMessage.Replace("<MESSAGE>", sourceInfo.Message)
ParseMessage = ParseMessage.Replace("<NICK>", sourceInfo.Nick)
ParseMessage = ParseMessage.Replace("<OWNER>", sourceInfo.Owner)
ParseMessage = ParseMessage.Replace("<RAW>", sourceInfo.Raw)
ParseMessage = ParseMessage.Replace("<SERVER>", sourceInfo.Server)
ParseMessage = ParseMessage.Replace("<TARGET>", sourceInfo.Target)
End Function
Public Shared Sub AddResource(ByVal newResource As Resource)
SyncLock SharedResources
SharedResources.Add(newResource)
End SyncLock
End Sub
Public Shared Sub AddResource(ByVal newResourceOrigin As String)
SyncLock SharedResources
SharedResources.Add(New Resource(newResourceOrigin))
End SyncLock
End Sub
Public Shared Sub RemoveResource(ByVal Origin As String)
SyncLock SharedResources
For i = 0 To SharedResources.Count - 1
If SharedResources(i).Origin = Origin Then
SharedResources.RemoveAt(i)
Exit For
End If
Next
End SyncLock
End Sub
Public Shared Sub RemoveResourceAt(ByVal index As Integer)
If index < 0 Then Exit Sub
SyncLock SharedResources
If index < SharedResources.Count Then
SharedResources.RemoveAt(index)
End If
End SyncLock
End Sub
Public Shared Sub AddResourceElement(ByVal ResourceIndex As Integer, ByVal Type As String, ByVal Name As String, ByVal Value As Object)
SyncLock SharedResources(ResourceIndex).Resources
SharedResources(ResourceIndex).Resources.Add(New ResourceElement(Type, Name, Value))
End SyncLock
End Sub
Public Shared Sub AddResourceElement(ByVal ResourceOrigin As String, ByVal Type As String, ByVal Name As String, ByVal Value As Object)
Dim OriginIndex As Integer = GetResourceIndexOfOrigin(ResourceOrigin)
AddResourceElement(OriginIndex, Type, Name, Value)
End Sub
Public Shared Sub RemoveResourceElementAt(ByVal ResourceIndex As Integer, ByVal ElementIndex As Integer)
If ElementIndex < 0 Then Exit Sub
SyncLock SharedResources(ResourceIndex).Resources
If ElementIndex < SharedResources(ResourceIndex).Resources.Count Then
SharedResources(ResourceIndex).Resources.RemoveAt(ElementIndex)
End If
End SyncLock
End Sub
Public Shared Sub RemoveResourceElement(ByVal ResourceOrigin As String, ByVal Name As String)
Dim OriginIndex As Integer = GetResourceIndexOfOrigin(ResourceOrigin)
Dim NameIndex As Integer = GetElementIndexOfName(OriginIndex, Name)
RemoveResourceElementAt(OriginIndex, NameIndex)
End Sub
Public Shared Sub SetResourceElement(ByVal ResourceIndex As Integer, ByVal ElementIndex As Integer, ByVal Value As Object)
Dim sameType, sameName As String
SyncLock SharedResources(ResourceIndex).Resources
sameType = SharedResources(ResourceIndex).Resources(ElementIndex).Type
sameName = SharedResources(ResourceIndex).Resources(ElementIndex).Name
SharedResources(ResourceIndex).Resources(ElementIndex) = New ResourceElement(sameType, sameName, Value)
End SyncLock
End Sub
Public Shared Function GetResourceElement(ByVal ResourceIndex As Integer, ByVal ElementIndex As Integer)
SyncLock SharedResources(ResourceIndex).Resources
Return SharedResources(ResourceIndex).Resources(ElementIndex).Value
End SyncLock
End Function
Public Shared Sub AddToSend(ByVal msg As String)
SyncLock SharedResources(0).Resources(1).Value
SharedResources(0).Resources(1).Value.add(msg)
End SyncLock
End Sub
Public Shared Sub AddToRecv(ByVal msg As String)
SyncLock SharedResources(0).Resources(0).Value
SharedResources(0).Resources(0).Value.add(msg)
End SyncLock
End Sub
Public Shared Sub AddToConsole(ByVal msg As String)
SyncLock SharedResources(0).Resources(6).Value
SharedResources(0).Resources(6).Value.add(msg)
End SyncLock
End Sub
Public Shared Sub SetCurrentChan(ByVal newChan As String)
SetResourceElement(0, 7, newChan)
End Sub
Public Shared Function GetCurrentChan() As String
On Error Resume Next
SyncLock SharedResources(0).Resources(7).Value
Return SharedResources(0).Resources(7).Value
End SyncLock
End Function
Public Shared Function GetResourceIndexOfOrigin(ByVal Origin As String) As Integer
SyncLock SharedResources
For i = 0 To SharedResources.Count - 1
If SharedResources(i).Origin = Origin Then Return i
Next
End SyncLock
Return -1
End Function
Public Shared Function GetElementIndexOfName(ByVal Name As String) As Integer()
SyncLock SharedResources
For i = 0 To SharedResources.Count - 1
For x = 0 To SharedResources(i).Resources.Count - 1
If SharedResources(i).Resources(x).Name = Name Then Return {i, x}
Next
Next
End SyncLock
Return {-1, -1}
End Function
Public Shared Function GetElementIndexOfName(ByVal ResourceIndex As Integer, ByVal Name As String) As Integer
SyncLock SharedResources(ResourceIndex).Resources
For i = 0 To SharedResources(ResourceIndex).Resources.Count - 1
If SharedResources(ResourceIndex).Resources(i).Name = Name Then Return i
Next
End SyncLock
Return -1
End Function
Public Shared Sub StopPluginManager()
SyncLock SharedResources(0).Resources(3).Value
SharedResources(0).Resources(3).Value.Close()
End SyncLock
End Sub
Public Shared Sub StartPluginManager(ByVal Owner As String, ByVal Server As String, ByVal BotNick As String)
SyncLock SharedResources(0).Resources(3).Value
SharedResources(0).Resources(3).Value.Start(Owner, Server, BotNick)
End SyncLock
End Sub
Public Shared Sub StopConnectionClient()
SharedResources(0).Resources(4).Value.Close()
End Sub
Public Shared Function StartConnectionClient(ByVal Server As String, ByVal Port As String, ByVal Nick As String, ByVal Channel As String, ByVal Pass As String, ByVal JoinMsg As String) As Boolean
SyncLock SharedResources(0).Resources(4).Value
Return SharedResources(0).Resources(4).Value.StartConnection(Server, Port, Nick, Channel, Pass, JoinMsg)
End SyncLock
End Function
Public Shared Function ConnectionStatus() As Boolean
Try
Return SharedResources(0).Resources(4).Value.ConnectionStatus
Catch ex As Exception
Return False
End Try
End Function
End Class
Public Interface Plgn
ReadOnly Property Name() As String
Function ProcessMessage(ByVal InputMessage As GlobalResources.Message) As Boolean
Sub Config()
End Interface