]> cgit.babelmonkeys.de Git - mpdbot.git/commitdiff
Move MPD connection in a separate class
authorFlorian Zeitz <florob@babelmonkeys.de>
Thu, 28 Jul 2011 19:46:09 +0000 (21:46 +0200)
committerFlorian Zeitz <florob@babelmonkeys.de>
Thu, 28 Jul 2011 19:46:09 +0000 (21:46 +0200)
src/MPDConnection.h [new file with mode: 0644]
src/MPDConnection.m [new file with mode: 0644]
src/PEPThread.h
src/PEPThread.m

diff --git a/src/MPDConnection.h b/src/MPDConnection.h
new file mode 100644 (file)
index 0000000..e776e6e
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2011, Florian Zeitz <florob@babelmonkeys.de>
+ *
+ * http://cgit.babelmonkeys.de/cgit.cgi/mpdbot/
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice is present in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+@interface MPDConnection: OFObject
+OFTCPSocket *sock;
+OFString *mpd_host;
+uint16_t mpd_port;
+
+- (void)connect;
+- (OFMutableDictionary*)response;
+- (void)send: (OFString*)message;
+- (void)idle;
+- initWithHost: (OFString*)host
+         port: (uint16_t)port;
+@end
diff --git a/src/MPDConnection.m b/src/MPDConnection.m
new file mode 100644 (file)
index 0000000..8c610aa
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2011, Florian Zeitz <florob@babelmonkeys.de>
+ *
+ * http://cgit.babelmonkeys.de/cgit.cgi/mpdbot/
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice is present in all copies.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import <ObjFW/ObjFW.h>
+
+#import "MPDConnection.h"
+
+@implementation MPDConnection: OFObject
+- initWithHost: (OFString*)host
+         port: (uint16_t)port
+{
+       self = [super init];
+
+       mpd_host = [host copy];
+       mpd_port = port;
+
+       return self;
+}
+
+- (void)dealloc
+{
+       [sock release];
+       [mpd_host release];
+
+       [super dealloc];
+}
+
+- (void)connect
+{
+       int64_t pause = 1;
+       while(1) {
+               @try {
+                       [sock release];
+                       sock = [[OFTCPSocket alloc] init];
+                       [sock connectToHost: mpd_host
+                                      port: mpd_port];
+                       [self response];
+                       return;
+               } @catch (id e) {
+                       [of_stderr writeFormat: @"Connection failed, retrying"
+                               @" in %" PRIi64 @" seconds\n", pause];
+                       [OFThread sleepForTimeInterval: pause];
+                       if (pause < 120)
+                               pause *= 2;
+                       [e release];
+               }
+       }
+}
+
+- (void)send: (OFString*)message
+{
+       [sock writeLine: message];
+}
+
+- (void)idle
+{
+       [sock writeLine: @"idle player"];
+       [self response];
+}
+
+- (OFMutableDictionary*)response
+{
+       OFString *answer;
+       OFMutableDictionary *response = [OFMutableDictionary dictionary];
+       while ((answer = [sock readLine]) && ![answer hasPrefix: @"OK"]) {
+               size_t index;
+               index = [answer indexOfFirstOccurrenceOfString: @":"];
+               if (index == OF_INVALID_INDEX)
+                       continue;
+               [response setObject: [answer substringFromIndex: index + 2
+                                                       toIndex: answer.length]
+                            forKey: [answer substringFromIndex: 0
+                                                       toIndex: index]];
+       }
+
+       return response;
+}
+@end
index b483fc289f9348591569917ac25c650fc5f78859..049c4d913a9126e7c127b074ee0edc02770e0772 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-@interface PEPThread: OFThread
-- (void)MPD_connect;
-- (OFMutableDictionary*)MPD_responseFromSocket: (OFTCPSocket*)sock;
+#import "MPDConnection.h"
 
-OFTCPSocket *sock;
-OFString *mpd_host;
-uint16_t mpd_port;
+@interface PEPThread: OFThread
+MPDConnection *conn;
 @end
index cd13eb382ca57452cf979da8426fc777f83c4131..80577e100fc73e19977a51b39b8e8f842f318f36 100644 (file)
 @implementation PEPThread: OFThread
 - (void)dealloc
 {
-       [sock release];
+       [conn release];
 
        [super dealloc];
 }
 
-- (void)MPD_connect
-{
-       int64_t pause = 1;
-       while(1) {
-               @try {
-                       [sock release];
-                       sock = [[OFTCPSocket alloc] init];
-                       [sock connectToHost: mpd_host
-                                      port: mpd_port];
-                       return;
-               } @catch (id e) {
-                       [of_stderr writeFormat: @"Connection failed, retrying"
-                               @" in %" PRIi64 @" seconds\n", pause];
-                       [OFThread sleepForTimeInterval: pause];
-                       if (pause < 120)
-                               pause *= 2;
-                       [e release];
-               }
-       }
-}
-
-- (OFMutableDictionary*)MPD_responseFromSocket: (OFTCPSocket*)sock_
-{
-       OFString *answer;
-       OFMutableDictionary *response = [OFMutableDictionary dictionary];
-       while ((answer = [sock_ readLine]) && ![answer hasPrefix: @"OK"]) {
-               size_t index;
-               index = [answer indexOfFirstOccurrenceOfString: @":"];
-               if (index == OF_INVALID_INDEX)
-                       continue;
-               [response setObject: [answer substringFromIndex: index + 2
-                                                       toIndex: answer.length]
-                            forKey: [answer substringFromIndex: 0
-                                                       toIndex: index]];
-       }
-
-       return response;
-}
-
 - (id)main
 {
+       OFString *mpd_host;
+       uint16_t mpd_port;
        OFDictionary *environment = [OFApplication environment];
        OFString *mpd_port_string;
        mpd_host = [environment objectForKey: @"MPD_HOST"];
@@ -87,8 +50,9 @@
                mpd_port = (uint16_t) [mpd_port_string decimalValue];
        else
                mpd_port = 6600;
-       [self MPD_connect];
-       [self MPD_responseFromSocket: sock];
+       conn = [[MPDConnection alloc] initWithHost: mpd_host
+                                             port: mpd_port];
+       [conn connect];
        while (1) {
                OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
                @try {
                        tune = [OFXMLElement elementWithName: @"tune"
                                                   namespace: NS_TUNE];
                        [item addChild: tune];
-                       [sock writeLine: @"status"];
-                       response = [self MPD_responseFromSocket: sock];
+                       [conn send: @"status"];
+                       response = [conn response];
                        if ([[response objectForKey: @"state"]
                            isEqual: @"play"]) {
-                               [sock writeLine: @"currentsong"];
-                               response = [self MPD_responseFromSocket: sock];
+                               [conn send: @"currentsong"];
+                               response = [conn response];
                                if ((answer =
                                    [response objectForKey: @"Artist"]))
                                        [tune addChild: [OFXMLElement
                                                stringValue: answer]];
                        }
                        [object sendStanza: tuneIQ];
-                       [sock writeLine: @"idle player"];
-                       [self MPD_responseFromSocket: sock];
+                       [conn idle];
                } @catch (id e) {
-                       [self MPD_connect];
-                       [self MPD_responseFromSocket: sock];
+                       [conn connect];
                        [e release];
                }
                [pool release];