Distributed programming/AutoHotkey: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
No edit summary
Line 1:
{{libheader|WinSock2.ahk}}
 
WinSock2 library created by derRaphael. Basic code structure created by Trikster. Untested.Everything Ifelse someonecreated readingby thisB hasR two computers and AutoHotkey installed(skylord5816 on both, please test. My other computers are all in states of semi-decayIRC).
<div style="clear:both;width:full;overflow:scroll"><lang autohotkey>#Include WinSock2.ahk
#Persistent
#SingleInstance, force
#Include, WinSock2.ahk ; derRaphaels WinSock Rewrite
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%
Line 13:
Gui, Add, DropDownList, vDDL1 gDDL1, Select something!||One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten
Gui, Add, Button, gB3, Click me!
 
Server := "irc.freenode.net"
Port := "6667"
 
Channel := "#UIHjbfilgbafLIEfbAIJCICBGncaiJBHiwehFIUHEIbnjKCINJEhiUAHEJcKLACuiaokjf" ; Choose something long and random - a channel sure to be deserted.
 
Nick := "somenickaokjfONE" ; Register this! You can drop it later if you want, but register it!
Pass := "somepassaokjfONE" ; It can be any nick and any pass.
 
Name := "distributed program"
 
BotCmd := "!"
OtherBotCmd := "~"
 
OnExit, CleanUp
WS2_CleanUp()
Line 33:
MsgBox, 16, Error!, An error occured wilist connecting to %Connection%
}
 
; Set OnMessage function
WS2_AsyncSelect(Socket, "DataProcess")
; Send AUTH info to the server
; USER A-trivial-nickname a-domain-like-google.com some-trivial-stuff :your-real-name
WS2_SendData(Socket, "USER " . Nick . " google.com AHKBOT :" . Name . "`n") ; All data send to the server must be
; followed by a newline.
; PASS A-trivial-pass
WS2_SendData(Socket, "PASS " . Pass . "`n")
; NICK A-trivial-nick
WS2_SendData(Socket, "NICK " . Nick . "`n")
; Join channel
; JOIN A-trivial-channel
WS2_SendData(Socket, "JOIN " . Channel . "`n")
Gui, Show
Return
 
DataProcess(Socket, Data) ; OnMessage function
{
Line 62:
StringReplace, Command, Param5, % Chr(10),, All
StringReplace, Command, Command, % Chr(13),, All
If (Param1 == "PING")
WS2_SendData(Socket, "PONG " . Param2 . "`n")
Else If (RegExMatch(Data, ":\" . BotCMD . " "))
{
If (Command == "B1")
MsgBox, The other person pressed Button Number One
Else If (Command == "B2E1E1B2")
{
out :=
MsgBox, The other person typed in Edit One then pressed Button Two
Loop
{
If (A_Index <= 6)
continue
If Param%A_Index%
Line 81:
break
}
MsgBoxStringTrimRight, Theout, other person typed:%out%, 1
MsgBox, The other person typed in Edit One then pressed Button Two:`n%out%
}
Else If (Command == "DDL1")
MsgBox, The other person selected %Param6% %Param7% in the drop-down-list.
Else If (Command == "B3")
MsgBox, The other person clicked Button Three.
Line 91 ⟶ 92:
}
B1:
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B1`n")
return
B2:
Gui, Submit, NoHide
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B2E1E1B2 " . E1 . " | `n" . B2)
return
DDL1:
Gui, Submit, NoHide
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " DDL1 " . DDL1 . "`n")
return
B3:
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B3" . "`n")
return
CleanUp:
Line 113 ⟶ 114:
#Persistent
#SingleInstance, force
#Include WinSock2.ahk ; derRaphaels WinSock Rewrite
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%
Line 121 ⟶ 122:
Gui, Add, DropDownList, vDDL1 gDDL1, Select something!||One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten
Gui, Add, Button, gB3, Click me!
 
Server := "irc.freenode.net"
Port := "6667"
 
Channel := "#UIHjbfilgbafLIEfbAIJCICBGncaiJBHiwehFIUHEIbnjKCINJEhiUAHEJcKLACuiaokjf" ; Choose something long and random - a channel sure to be deserted.
 
Nick := "someothernickaokjfTWO" ; Register this! You can drop it later if you want, but register it!
Pass := "someotherpassaokjfTWO" ; It can be any nick and any pass.
 
Name := "distributed program"
 
BotCmd := "~"
OtherBotCmd := "!"
 
OnExit, CleanUp
WS2_CleanUp()
Line 141 ⟶ 142:
MsgBox, 16, Error!, An error occured wilist connecting to %Connection%
}
 
; Set OnMessage function
WS2_AsyncSelect(Socket, "DataProcess")
; Send AUTH info to the server
; USER A-trivial-nickname a-domain-like-google.com some-trivial-stuff :your-real-name
WS2_SendData(Socket, "USER " . Nick . " google.com AHKBOT :" . Name . "`n") ; All data send to the server must be
; followed by a newline.
; PASS A-trivial-pass
WS2_SendData(Socket, "PASS " . Pass . "`n")
; NICK A-trivial-nick
WS2_SendData(Socket, "NICK " . Nick . "`n")
; Join channel
; JOIN A-trivial-channel
WS2_SendData(Socket, "JOIN " . Channel . "`n")
Gui, Show
Return
 
DataProcess(Socket, Data) ; OnMessage function
{
Line 170 ⟶ 171:
StringReplace, Command, Param5, % Chr(10),, All
StringReplace, Command, Command, % Chr(13),, All
If (Param1 == "PING")
WS2_SendData(Socket, "PONG " . Param2 . "`n")
Else If (RegExMatch(Data, ":\" . BotCMD . " "))
{
If (Command == "B1")
MsgBox, The other person pressed Button Number One
Else If (Command == "B2E1E1B2")
{
out :=
MsgBox, The other person typed in Edit One then pressed Button Two
Loop
{
If (A_Index <= 6)
continue
If Param%A_Index%
Line 189 ⟶ 190:
break
}
MsgBoxStringTrimRight, Theout, other person typed:%out%, 1
MsgBox, The other person typed in Edit One then pressed Button Two:`n%out%
}
Else If (Command == "DDL1")
MsgBox, The other person selected %Param6% %Param7% in the drop-down-list.
Else If (Command == "B3")
MsgBox, The other person clicked Button Three.
Line 199 ⟶ 201:
}
B1:
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B1`n")
return
B2:
Gui, Submit, NoHide
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B2E1E1B2 " . E1 . " | `n" . B2)
return
DDL1:
Gui, Submit, NoHide
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " DDL1 " . DDL1 . "`n")
return
B3:
WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B3" . "`n")
return
CleanUp:

Revision as of 01:38, 10 September 2009

Library: WinSock2.ahk

WinSock2 library created by derRaphael. Basic code structure created by Trikster. Everything else created by B R (skylord5816 on IRC).

<lang autohotkey>#Include WinSock2.ahk
  1. Persistent
  2. SingleInstance, force
  3. Include, WinSock2.ahk

SetBatchLines, -1 SetWorkingDir, %A_ScriptDir% Gui, Add, Button, gB1, Button number One! Gui, Add, Edit, vE1, Type in me! Gui, Add, Button, gB2, Press me after you're done typing! Gui, Add, DropDownList, vDDL1 gDDL1, Select something!||One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten Gui, Add, Button, gB3, Click me!

Server  := "irc.freenode.net" Port  := "6667"

Channel := "#aokjf" ; Choose something long and random - a channel sure to be deserted.

Nick := "aokjfONE"  ; Register this! You can drop it later if you want, but register it! Pass := "aokjfONE"  ; It can be any nick and any pass.

Name := "distributed program"

BotCmd := "!" OtherBotCmd := "~"

OnExit, CleanUp WS2_CleanUp() If (!Socket := WS2_Connect(Connection := Server . ":" . Port)) {

  MsgBox, 16, Error!, An error occured wilist connecting to %Connection%

}

  ; Set OnMessage function
  WS2_AsyncSelect(Socket, "DataProcess")

  ; Send AUTH info to the server
  ; USER A-trivial-nickname a-domain-like-google.com some-trivial-stuff :your-real-name
  WS2_SendData(Socket, "USER " . Nick . " google.com AHKBOT :" . Name . "`n") ; All data send to the server must be
                                                                              ; followed by a newline.

  ; PASS A-trivial-pass
  WS2_SendData(Socket, "PASS " . Pass . "`n")

  ; NICK A-trivial-nick
  WS2_SendData(Socket, "NICK " . Nick . "`n")

  ; Join channel
  ; JOIN A-trivial-channel
  WS2_SendData(Socket, "JOIN " . Channel . "`n")

  Gui, Show

Return

DataProcess(Socket, Data) ; OnMessage function {

  global Server,Port,Channel,Nick,Pass,Name,BotCMD
  StringSplit, Param, Data, %A_Space%
  Name := SubStr(Data, 2, InStr(Data, "!")-2)
  StringReplace, Command, Param5, % Chr(10),, All
  StringReplace, Command, Command, % Chr(13),, All

  If (Param1 == "PING")
     WS2_SendData(Socket, "PONG " . Param2 . "`n")
  Else If (RegExMatch(Data, ":\" . BotCMD . " "))
  {
     If (Command == "B1")
        MsgBox, The other person pressed Button Number One
     Else If (Command == "E1B2")
     {
        out :=
        Loop
        {
           If (A_Index < 6)
              continue
           If Param%A_Index%
              out := out . " " . Param%A_Index%
           Else
              break
        }
        StringTrimRight, out, out, 1
        MsgBox, The other person typed:`n%out%
     }
     Else If (Command == "DDL1")
        MsgBox, The other person selected %Param6% %Param7% in the drop-down-list.
     Else If (Command == "B3")
        MsgBox, The other person clicked Button Three.
  }
  return

} B1: WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B1`n") return B2: Gui, Submit, NoHide WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " E1B2 " . E1 . "`n") return DDL1: Gui, Submit, NoHide WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " DDL1 " . DDL1 . "`n") return B3: WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B3" . "`n") return CleanUp: GuiClose: WS2_CleanUp()

ExitApp</lang>

Put the above on one computer, and run it. Then put the below on a different computer (no need for a network, just add Internet!) and run it.

<lang autohotkey>#Include WinSock2.ahk
  1. Persistent
  2. SingleInstance, force
  3. Include WinSock2.ahk

SetBatchLines, -1 SetWorkingDir, %A_ScriptDir% Gui, Add, Button, gB1, Button number One! Gui, Add, Edit, vE1, Type in me! Gui, Add, Button, gB2, Press me after you're done typing! Gui, Add, DropDownList, vDDL1 gDDL1, Select something!||One|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten Gui, Add, Button, gB3, Click me!

Server  := "irc.freenode.net" Port  := "6667"

Channel := "#aokjf" ; Choose something long and random - a channel sure to be deserted.

Nick := "aokjfTWO"  ; Register this! You can drop it later if you want, but register it! Pass := "aokjfTWO"  ; It can be any nick and any pass.

Name := "distributed program"

BotCmd := "~" OtherBotCmd := "!"

OnExit, CleanUp WS2_CleanUp() If (!Socket := WS2_Connect(Connection := Server . ":" . Port)) {

  MsgBox, 16, Error!, An error occured wilist connecting to %Connection%

}

  ; Set OnMessage function
  WS2_AsyncSelect(Socket, "DataProcess")

  ; Send AUTH info to the server
  ; USER A-trivial-nickname a-domain-like-google.com some-trivial-stuff :your-real-name
  WS2_SendData(Socket, "USER " . Nick . " google.com AHKBOT :" . Name . "`n") ; All data send to the server must be
                                                                              ; followed by a newline.

  ; PASS A-trivial-pass
  WS2_SendData(Socket, "PASS " . Pass . "`n")

  ; NICK A-trivial-nick
  WS2_SendData(Socket, "NICK " . Nick . "`n")

  ; Join channel
  ; JOIN A-trivial-channel
  WS2_SendData(Socket, "JOIN " . Channel . "`n")

  Gui, Show

Return

DataProcess(Socket, Data) ; OnMessage function {

  global Server,Port,Channel,Nick,Pass,Name,BotCMD
  StringSplit, Param, Data, %A_Space%
  Name := SubStr(Data, 2, InStr(Data, "!")-2)
  StringReplace, Command, Param5, % Chr(10),, All
  StringReplace, Command, Command, % Chr(13),, All

  If (Param1 == "PING")
     WS2_SendData(Socket, "PONG " . Param2 . "`n")
  Else If (RegExMatch(Data, ":\" . BotCMD . " "))
  {
     If (Command == "B1")
        MsgBox, The other person pressed Button Number One
     Else If (Command == "E1B2")
     {
        out :=
        Loop
        {
           If (A_Index < 6)
              continue
           If Param%A_Index%
              out := out . " " . Param%A_Index%
           Else
              break
        }
        StringTrimRight, out, out, 1
        MsgBox, The other person typed:`n%out%
     }
     Else If (Command == "DDL1")
        MsgBox, The other person selected %Param6% %Param7% in the drop-down-list.
     Else If (Command == "B3")
        MsgBox, The other person clicked Button Three.
  }
  return

} B1: WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B1`n") return B2: Gui, Submit, NoHide WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " E1B2 " . E1 . "`n") return DDL1: Gui, Submit, NoHide WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " DDL1 " . DDL1 . "`n") return B3: WS2_SendData(Socket, "PRIVMSG " . Channel . " :" . OtherBotCmd . " B3" . "`n") return CleanUp: GuiClose: WS2_CleanUp()

ExitApp</lang>