1 /* coded by Ketmar // Invisible Vector <ketmar@ketmar.no-ip.org>
2 * Understanding is not required. Only obedience.
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 import std
.concurrency
;
31 // ////////////////////////////////////////////////////////////////////////// //
32 void startRPCServer () {
33 srvsk
.create(AmperRPCSocket
);
35 servertid
= spawn(&rpcServerThread
, thisTid
);
39 void stopRPCServer () {
41 sk
.connect(AmperRPCSocket
);
42 sk
.writeNum
!ushort(RPCommand
.Err
);
46 // ////////////////////////////////////////////////////////////////////////// //
48 __gshared Tid servertid
;
49 __gshared UDSocket srvsk
;
52 void rpcServerThread (Tid ownerTid
) {
53 rpcRegisterEndpoint
!amperGetSongVisTitle(delegate () { return (ampMain
!is null ? ampMain
.wtitle
.title
: ""); });
54 rpcRegisterEndpoint
!amperScanDir(delegate (string path
, bool append
) { concmdf
!"scan_dir \"%s\" %s"(path
, append ?
"tan" : "ona"); });
55 rpcRegisterEndpoint
!amperPlay(delegate () { concmd("song_play"); });
56 rpcRegisterEndpoint
!amperStop(delegate () { concmd("song_stop"); });
57 rpcRegisterEndpoint
!amperTogglePause(delegate () { concmd("song_pause_toggle"); });
58 rpcRegisterEndpoint
!amperClearPlaylist(delegate () { concmd("pl_clear"); });
59 rpcRegisterEndpoint
!amperConsoleCommand(delegate (string cmd
) { concmd(cmd
); });
61 //conwriteln(rpcEndpointNames);
64 receiveTimeout(Duration
.min
,
65 (Variant v
) { conwriteln("FUUUUUU"); },
68 auto cl
= srvsk
.accept();
69 auto cmd
= cl
.readNum
!ushort;
70 if (cmd
!= RPCommand
.Call
) {
71 if (cmd
!= RPCommand
.Err
) conwriteln("invalid command");
74 //conwriteln("connection comes!");