diff --git a/doc/report b/doc/report index aad268d..0031285 160000 --- a/doc/report +++ b/doc/report @@ -1 +1 @@ -Subproject commit aad268d03a3c23de917cfecf767d583d3cb32633 +Subproject commit 00312859714bef6e9a4fdb9931a41fef56eeb89a diff --git a/games/Pong/Pong.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/games/Pong/Pong.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..2c44ce8 --- /dev/null +++ b/games/Pong/Pong.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/games/Pong/Pong.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate b/games/Pong/Pong.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..7578947 --- /dev/null +++ b/games/Pong/Pong.xcodeproj/project.xcworkspace/xcuserdata/jeena.xcuserdatad/UserInterfaceState.xcuserstate @@ -0,0 +1,2937 @@ + + + + + $archiver + NSKeyedArchiver + $objects + + $null + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 2 + + + CF$UID + 3 + + + NS.objects + + + CF$UID + 4 + + + CF$UID + 100 + + + + IDEWorkspaceDocument + C791B696-0817-4083-8D95-684ACD41BA88 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 5 + + + CF$UID + 6 + + + CF$UID + 7 + + + CF$UID + 8 + + + CF$UID + 9 + + + CF$UID + 10 + + + CF$UID + 11 + + + CF$UID + 12 + + + CF$UID + 13 + + + CF$UID + 14 + + + NS.objects + + + CF$UID + 15 + + + CF$UID + 16 + + + CF$UID + 48 + + + CF$UID + 49 + + + CF$UID + 54 + + + CF$UID + 57 + + + CF$UID + 90 + + + CF$UID + 91 + + + CF$UID + 15 + + + CF$UID + 15 + + + + BreakpointsActivated + DefaultEditorStatesForURLs + DebuggingWindowBehavior + ActiveRunDestination + ActiveScheme + LastCompletedPersistentSchemeBasedActivityReport + DocumentWindows + RecentEditorDocumentURLs + AppFocusInMiniDebugging + MiniDebuggingConsole + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 17 + + + NS.objects + + + CF$UID + 18 + + + + Xcode.IDEKit.EditorDocument.SourceCode + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 19 + + + CF$UID + 23 + + + CF$UID + 25 + + + CF$UID + 27 + + + NS.objects + + + CF$UID + 29 + + + CF$UID + 38 + + + CF$UID + 42 + + + CF$UID + 45 + + + + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 20 + + + + $class + + CF$UID + 21 + + NS.string + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/GGSNetwork.h + + + $classes + + NSMutableString + NSString + NSObject + + $classname + NSMutableString + + + $classes + + NSURL + NSObject + + $classname + NSURL + + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 24 + + + + $class + + CF$UID + 21 + + NS.string + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/GGSNetwork.m + + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 26 + + + + $class + + CF$UID + 21 + + NS.string + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/PongAppDelegate.m + + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 28 + + + + $class + + CF$UID + 21 + + NS.string + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/PongAppDelegate.h + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 30 + + + CF$UID + 31 + + + CF$UID + 32 + + + CF$UID + 33 + + + NS.objects + + + CF$UID + 34 + + + CF$UID + 35 + + + CF$UID + 15 + + + CF$UID + 36 + + + + PrimaryDocumentTimestamp + PrimaryDocumentVisibleCharacterRange + HideAllIssues + PrimaryDocumentSelectedCharacterRange + 322646167.29056698 + {0, 910} + {0, 0} + + $classes + + NSMutableDictionary + NSDictionary + NSObject + + $classname + NSMutableDictionary + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 30 + + + CF$UID + 31 + + + CF$UID + 32 + + + CF$UID + 33 + + + NS.objects + + + CF$UID + 39 + + + CF$UID + 40 + + + CF$UID + 15 + + + CF$UID + 41 + + + + 322690356.257366 + {369, 1381} + {207, 0} + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 30 + + + CF$UID + 31 + + + CF$UID + 32 + + + CF$UID + 33 + + + NS.objects + + + CF$UID + 43 + + + CF$UID + 44 + + + CF$UID + 15 + + + CF$UID + 36 + + + + 322646166.07745898 + {1704, 1033} + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 30 + + + CF$UID + 31 + + + CF$UID + 32 + + + CF$UID + 33 + + + NS.objects + + + CF$UID + 46 + + + CF$UID + 47 + + + CF$UID + 15 + + + CF$UID + 36 + + + + 322646160.93821901 + {0, 455} + 0 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 50 + + + CF$UID + 51 + + + NS.objects + + + CF$UID + 52 + + + CF$UID + 53 + + + + IDEDeviceLocation + IDEDeviceArchitecture + dvtdevice-iphonesimulator:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk-iPhone + i386 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 55 + + + NS.objects + + + CF$UID + 56 + + + + IDENameString + Pong + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 58 + + + CF$UID + 59 + + + CF$UID + 60 + + + NS.objects + + + CF$UID + 61 + + + CF$UID + 89 + + + CF$UID + 68 + + + + IDEActivityReportCompletionSummaryStringSegments + IDEActivityReportOptions + IDEActivityReportTitle + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 62 + + + CF$UID + 69 + + + CF$UID + 73 + + + CF$UID + 78 + + + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 63 + + + CF$UID + 64 + + + CF$UID + 65 + + + NS.objects + + + CF$UID + 66 + + + CF$UID + 67 + + + CF$UID + 68 + + + + IDEActivityReportStringSegmentPriority + IDEActivityReportStringSegmentBackSeparator + IDEActivityReportStringSegmentStringValue + 2 + + Build + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 63 + + + CF$UID + 64 + + + CF$UID + 65 + + + NS.objects + + + CF$UID + 70 + + + CF$UID + 71 + + + CF$UID + 72 + + + + 4 + : + Pong + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 63 + + + CF$UID + 64 + + + CF$UID + 65 + + + NS.objects + + + CF$UID + 74 + + + CF$UID + 75 + + + CF$UID + 76 + + + + 1 + + + $class + + CF$UID + 77 + + NS.data + + YnBsaXN0MDDUAQIDBAUGOzxYJHZlcnNpb25YJG9iamVjdHNZJGFy + Y2hpdmVyVCR0b3ASAAGGoK0HCA8QGhscJCUrMTQ3VSRudWxs0wkK + CwwNDlxOU0F0dHJpYnV0ZXNWJGNsYXNzWE5TU3RyaW5ngAOADIAC + WVN1Y2NlZWRlZNMKERITFBdXTlMua2V5c1pOUy5vYmplY3RzgAui + FRaABIAFohgZgAaACVZOU0ZvbnRXTlNDb2xvctQKHR4fICEiI1ZO + U05hbWVWTlNTaXplWE5TZkZsYWdzgAiAByNAJgAAAAAAABENEF8Q + EUx1Y2lkYUdyYW5kZS1Cb2xk0iYnKClaJGNsYXNzbmFtZVgkY2xh + c3Nlc1ZOU0ZvbnSiKCpYTlNPYmplY3TTCiwtLi8wXE5TQ29sb3JT + cGFjZVdOU1doaXRlgAoQA0IwANImJzIzV05TQ29sb3KiMirSJic1 + NlxOU0RpY3Rpb25hcnmiNSrSJic4OV8QEk5TQXR0cmlidXRlZFN0 + cmluZ6I6Kl8QEk5TQXR0cmlidXRlZFN0cmluZ18QD05TS2V5ZWRB + cmNoaXZlctE9PlRyb290gAEACAARABoAIwAtADIANwBFAEsAUgBf + AGYAbwBxAHMAdQB/AIYAjgCZAJsAngCgAKIApQCnAKkAsAC4AMEA + yADPANgA2gDcAOUA6AD8AQEBDAEVARwBHwEoAS8BPAFEAUYBSAFL + AVABWAFbAWABbQFwAXUBigGNAaIBtAG3AbwAAAAAAAACAQAAAAAA + AAA/AAAAAAAAAAAAAAAAAAABvg== + + + + $classes + + NSMutableData + NSData + NSObject + + $classname + NSMutableData + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 63 + + + CF$UID + 79 + + + CF$UID + 80 + + + CF$UID + 65 + + + CF$UID + 81 + + + CF$UID + 82 + + + NS.objects + + + CF$UID + 83 + + + CF$UID + 84 + + + CF$UID + 85 + + + CF$UID + 87 + + + CF$UID + 84 + + + CF$UID + 84 + + + + IDEActivityReportStringSegmentType + IDEActivityReportStringSegmentDate + IDEActivityReportStringSegmentDateStyle + IDEActivityReportStringSegmentTimeStyle + 3 + 1 + + $class + + CF$UID + 86 + + NS.time + 322656379.44809198 + + + $classes + + NSDate + NSObject + + $classname + NSDate + + Today at 11:46 + + $classes + + NSMutableArray + NSArray + NSObject + + $classname + NSMutableArray + + 106 + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 3 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 92 + + + CF$UID + 94 + + + CF$UID + 96 + + + CF$UID + 98 + + + + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 93 + + + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/GGSNetwork.m + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 95 + + + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/GGSNetwork.h + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 97 + + + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/PongAppDelegate.m + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 99 + + + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/PongAppDelegate.h + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 101 + + + CF$UID + 102 + + + CF$UID + 103 + + + CF$UID + 104 + + + CF$UID + 105 + + + CF$UID + 106 + + + NS.objects + + + CF$UID + 107 + + + CF$UID + 274 + + + CF$UID + 116 + + + CF$UID + 101 + + + CF$UID + 275 + + + CF$UID + 3 + + + + IDEWorkspaceTabController_C37A21B0-D59C-4189-B137-7086EEE960F1 + IDEOrderedWorkspaceTabControllers + IDEWindowToolbarIsVisible + IDEActiveWorkspaceTabController + IDEWindowFrame + IDEWorkspaceWindowControllerUniqueIdentifier + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 108 + + + CF$UID + 109 + + + CF$UID + 110 + + + CF$UID + 111 + + + CF$UID + 112 + + + CF$UID + 113 + + + CF$UID + 114 + + + CF$UID + 115 + + + NS.objects + + + CF$UID + 48 + + + CF$UID + 116 + + + CF$UID + 117 + + + CF$UID + 118 + + + CF$UID + 129 + + + CF$UID + 171 + + + CF$UID + 15 + + + CF$UID + 180 + + + + AssistantEditorsLayout + IDEShowNavigator + IDETabLabel + IDEWorkspaceTabControllerUtilityAreaSplitView + IDENavigatorArea + IDEWorkspaceTabControllerDesignAreaSplitView + IDEShowUtilities + IDEEditorArea + + GGSNetwork.m + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 119 + + + NS.objects + + + CF$UID + 120 + + + + DVTSplitViewItems + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 121 + + + CF$UID + 127 + + + + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 124 + + + CF$UID + 125 + + + + DVTIdentifier + DVTViewMagnitude + + 478 + + $classes + + NSDictionary + NSObject + + $classname + NSDictionary + + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 124 + + + CF$UID + 128 + + + + 224 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 130 + + + CF$UID + 131 + + + CF$UID + 132 + + + NS.objects + + + CF$UID + 133 + + + CF$UID + 132 + + + CF$UID + 151 + + + + Xcode.IDEKit.Navigator.Issues + SelectedNavigator + Xcode.IDEKit.Navigator.Structure + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 134 + + + CF$UID + 135 + + + CF$UID + 136 + + + CF$UID + 137 + + + CF$UID + 138 + + + CF$UID + 139 + + + CF$UID + 140 + + + CF$UID + 141 + + + CF$UID + 142 + + + CF$UID + 143 + + + NS.objects + + + CF$UID + 15 + + + CF$UID + 144 + + + CF$UID + 145 + + + CF$UID + 147 + + + CF$UID + 148 + + + CF$UID + 15 + + + CF$UID + 15 + + + CF$UID + 149 + + + CF$UID + 15 + + + CF$UID + 150 + + + + IDEErrorFilteringEnabled + IDEVisibleRect + IDECollapsedFiles + IDEExpandedIssues + IDESelectedNavigables + IDEShowsByType + IDESchemeFilteringEnabled + IDECollapsedTypes + IDERecentFilteringEnabled + IDECollapsedGroups + {{0, 0}, {259, 636}} + + $class + + CF$UID + 146 + + NS.objects + + + + $classes + + NSMutableSet + NSSet + NSObject + + $classname + NSMutableSet + + + $class + + CF$UID + 146 + + NS.objects + + + + $class + + CF$UID + 88 + + NS.objects + + + + $class + + CF$UID + 146 + + NS.objects + + + + $class + + CF$UID + 146 + + NS.objects + + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 152 + + + CF$UID + 153 + + + CF$UID + 154 + + + CF$UID + 155 + + + CF$UID + 156 + + + CF$UID + 157 + + + CF$UID + 158 + + + NS.objects + + + CF$UID + 159 + + + CF$UID + 15 + + + CF$UID + 160 + + + CF$UID + 15 + + + CF$UID + 15 + + + CF$UID + 162 + + + CF$UID + 168 + + + + IDEVisibleRect + IDEUnsavedDocumentFilteringEnabled + IDENavigatorExpandedItemsBeforeFilteringSet + IDERecentDocumentFilteringEnabled + IDESCMStatusFilteringEnabled + IDESelectedObjects + IDEExpandedItemsSet + {{0, 0}, {259, 658}} + + $class + + CF$UID + 161 + + NS.objects + + + + $classes + + NSSet + NSObject + + $classname + NSSet + + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 163 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 164 + + + CF$UID + 165 + + + CF$UID + 166 + + + + Pong + Classes + GGSNetwork.m + + $classes + + NSArray + NSObject + + $classname + NSArray + + + $class + + CF$UID + 161 + + NS.objects + + + CF$UID + 169 + + + CF$UID + 170 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 164 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 164 + + + CF$UID + 165 + + + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 119 + + + NS.objects + + + CF$UID + 172 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 173 + + + CF$UID + 175 + + + CF$UID + 177 + + + + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 112 + + + CF$UID + 174 + + + + 260 + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 115 + + + CF$UID + 176 + + + + 1016 + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 178 + + + CF$UID + 179 + + + + IDEUtilitiesArea + 260 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 181 + + + CF$UID + 182 + + + CF$UID + 183 + + + CF$UID + 184 + + + CF$UID + 185 + + + CF$UID + 186 + + + CF$UID + 187 + + + CF$UID + 188 + + + NS.objects + + + CF$UID + 189 + + + CF$UID + 206 + + + CF$UID + 239 + + + CF$UID + 116 + + + CF$UID + 48 + + + CF$UID + 265 + + + CF$UID + 273 + + + CF$UID + 116 + + + + layoutTree + IDEEditorMode_Standard + IDEEDitorArea_DebugArea + IDEShowEditor + EditorMode + DebuggerSplitView + DefaultPersistentRepresentations + ShowDebuggerArea + + $class + + CF$UID + 205 + + geniusEditorContextNode + + CF$UID + 0 + + primaryEditorContextNode + + CF$UID + 190 + + rootLayoutTreeNode + + CF$UID + 202 + + + + $class + + CF$UID + 204 + + children + + CF$UID + 0 + + contentType + 1 + documentArchivableRepresentation + + CF$UID + 191 + + orientation + 0 + parent + + CF$UID + 202 + + + + $class + + CF$UID + 201 + + DocumentLocation + + CF$UID + 199 + + DomainIdentifier + + CF$UID + 192 + + IdentifierPath + + CF$UID + 193 + + IndexOfDocumentIdentifier + + CF$UID + 48 + + + Xcode.IDENavigableItemDomain.WorkspaceStructure + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 194 + + + CF$UID + 196 + + + CF$UID + 197 + + + + + $class + + CF$UID + 195 + + Identifier + + CF$UID + 166 + + + + $classes + + IDEArchivableStringIndexPair + NSObject + + $classname + IDEArchivableStringIndexPair + + + $class + + CF$UID + 195 + + Identifier + + CF$UID + 165 + + + + $class + + CF$UID + 195 + + Identifier + + CF$UID + 198 + + + Pong + + $class + + CF$UID + 200 + + documentURL + + CF$UID + 24 + + timestamp + + CF$UID + 0 + + + + $classes + + DVTDocumentLocation + NSObject + + $classname + DVTDocumentLocation + + + $classes + + IDENavigableItemArchivableRepresentation + NSObject + + $classname + IDENavigableItemArchivableRepresentation + + + $class + + CF$UID + 204 + + children + + CF$UID + 203 + + contentType + 0 + documentArchivableRepresentation + + CF$UID + 0 + + orientation + 0 + parent + + CF$UID + 0 + + + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 190 + + + + + $classes + + IDEWorkspaceTabControllerLayoutTreeNode + NSObject + + $classname + IDEWorkspaceTabControllerLayoutTreeNode + + + $classes + + IDEWorkspaceTabControllerLayoutTree + NSObject + + $classname + IDEWorkspaceTabControllerLayoutTree + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 207 + + + NS.objects + + + CF$UID + 208 + + + + EditorLayout_PersistentRepresentation + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 209 + + + NS.objects + + + CF$UID + 210 + + + + Main + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 211 + + + CF$UID + 212 + + + CF$UID + 213 + + + NS.objects + + + CF$UID + 214 + + + CF$UID + 48 + + + CF$UID + 237 + + + + EditorLayout_StateSavingStateDictionaries + EditorLayout_Selected + EditorLayout_Geometry + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 215 + + + + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 216 + + + CF$UID + 217 + + + CF$UID + 218 + + + CF$UID + 219 + + + CF$UID + 220 + + + CF$UID + 221 + + + CF$UID + 222 + + + NS.objects + + + CF$UID + 223 + + + CF$UID + 224 + + + CF$UID + 230 + + + CF$UID + 234 + + + CF$UID + 166 + + + CF$UID + 17 + + + CF$UID + 235 + + + + FileDataType + ArchivableRepresentation + EditorState + NavigableItemName + DocumentNavigableItemName + DocumentExtensionIdentifier + DocumentURL + public.objective-c-source + + $class + + CF$UID + 201 + + DocumentLocation + + CF$UID + 199 + + DomainIdentifier + + CF$UID + 192 + + IdentifierPath + + CF$UID + 225 + + IndexOfDocumentIdentifier + + CF$UID + 48 + + + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 226 + + + CF$UID + 227 + + + CF$UID + 228 + + + + + $class + + CF$UID + 195 + + Identifier + + CF$UID + 166 + + + + $class + + CF$UID + 195 + + Identifier + + CF$UID + 165 + + + + $class + + CF$UID + 195 + + Identifier + + CF$UID + 229 + + + Pong + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 30 + + + CF$UID + 31 + + + CF$UID + 32 + + + CF$UID + 33 + + + NS.objects + + + CF$UID + 231 + + + CF$UID + 232 + + + CF$UID + 15 + + + CF$UID + 233 + + + + 322690356.25804502 + {369, 1381} + {207, 0} + @implementation GGSNetwork + + $class + + CF$UID + 22 + + NS.base + + CF$UID + 0 + + NS.relative + + CF$UID + 236 + + + file://localhost/Users/jeena/Student/GGS/games/Pong/Classes/GGSNetwork.m + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 238 + + + + {{0, 0}, {1016, 565}} + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 240 + + + CF$UID + 241 + + + CF$UID + 242 + + + CF$UID + 243 + + + CF$UID + 244 + + + CF$UID + 245 + + + NS.objects + + + CF$UID + 84 + + + CF$UID + 246 + + + CF$UID + 248 + + + CF$UID + 84 + + + CF$UID + 251 + + + CF$UID + 259 + + + + LayoutFocusMode + console + variables + LayoutMode + IDEDebugArea_SplitView + IDEDebuggerAreaSplitView + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 247 + + + NS.objects + + + CF$UID + 48 + + + + ConsoleFilterMode + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 249 + + + NS.objects + + + CF$UID + 250 + + + + DBGVariablesViewFilterMode + 2 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 119 + + + NS.objects + + + CF$UID + 252 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 253 + + + CF$UID + 256 + + + + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 254 + + + CF$UID + 255 + + + + VariablesView + 298 + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 257 + + + CF$UID + 258 + + + + ConsoleArea + 717 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 119 + + + NS.objects + + + CF$UID + 260 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 261 + + + CF$UID + 263 + + + + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 254 + + + CF$UID + 262 + + + + 298 + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 257 + + + CF$UID + 264 + + + + 717 + + $class + + CF$UID + 37 + + NS.keys + + + CF$UID + 119 + + + NS.objects + + + CF$UID + 266 + + + + + $class + + CF$UID + 88 + + NS.objects + + + CF$UID + 267 + + + CF$UID + 270 + + + + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 268 + + + CF$UID + 269 + + + + IDEEditor + 587 + + $class + + CF$UID + 126 + + NS.keys + + + CF$UID + 122 + + + CF$UID + 123 + + + NS.objects + + + CF$UID + 271 + + + CF$UID + 272 + + + + IDEDebuggerArea + 115 + + $class + + CF$UID + 37 + + NS.keys + + NS.objects + + + + $class + + CF$UID + 167 + + NS.objects + + + CF$UID + 101 + + + + {{0, 0}, {1276, 778}} + + $top + + State + + CF$UID + 1 + + + $version + 100000 + + diff --git a/games/Pong/Pong.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/Pong.xcscheme b/games/Pong/Pong.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/Pong.xcscheme new file mode 100644 index 0000000..5ff41ee --- /dev/null +++ b/games/Pong/Pong.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/Pong.xcscheme @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/games/Pong/Pong.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/xcschememanagement.plist b/games/Pong/Pong.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..5bd0d76 --- /dev/null +++ b/games/Pong/Pong.xcodeproj/xcuserdata/jeena.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + Pong.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 1D6058900D05DD3D006BFB54 + + primary + + + + + diff --git a/python_client b/python_client index 10feefd..50e8dbd 100755 --- a/python_client +++ b/python_client @@ -60,7 +60,8 @@ while True: s.close() -""" +time.sleep(2) + HOST = 'localhost' # The remote host PORT = int(sys.argv[1]) # The same port as used by the server s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -81,4 +82,3 @@ print "Token:", token print "Data: ", ' '.join(data.split(" ")[1:]) s.close() -""" diff --git a/python_client_reconnect b/python_client_reconnect new file mode 100755 index 0000000..2a41b70 --- /dev/null +++ b/python_client_reconnect @@ -0,0 +1,23 @@ +#!/usr/bin/env python + +import sys, time, socket + +HOST = 'localhost' # The remote host +PORT = int(sys.argv[1]) # The same port as used by the server +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +s.connect((HOST, PORT)) +# Call that function! + +print "Calling myFun" +s.send( +"Token: %s\n\ +Server-Command: call\n\ +Content-Type: text\n\ +Content-Length: 6\n\ +\n\ +myFun" % raw_input("Token >> ")) +fs = s.makefile() +data = fs.readline() +print "Data: ", ' '.join(data.split(" ")[1:]) + +s.close() diff --git a/src/ggs_protocol.erl b/src/ggs_protocol.erl index d61dfc0..11cb2d0 100644 --- a/src/ggs_protocol.erl +++ b/src/ggs_protocol.erl @@ -25,7 +25,6 @@ create_message(Cmd, Enc, Acc, Data) -> Data, Msg. - %% Internal helpers do_parse(Data, ParsedMessage) -> NewLinePos = string:chr(Data, $\n), diff --git a/src/ggs_server.erl b/src/ggs_server.erl new file mode 100644 index 0000000..833feac --- /dev/null +++ b/src/ggs_server.erl @@ -0,0 +1,141 @@ +-module(ggs_server). +-behaviour(gen_server). + +%% API +-export([start_link/1, + start_link/0, + stop/0 + ]). + +%% gen_server callbacks +-export([init/1, handle_call/3, handle_cast/2, + handle_info/2, terminate/2, code_change/3]). + + +-define(SERVER, ?MODULE). +-define(DEFAULT_PORT, 1055). + +-record(state, {port, lsock, client_vm_map = []}). + +%%%==================================================== +%%% API +%%%==================================================== + +%%----------------------------------------------------- +%% @doc Starts the server +%% @end +%%----------------------------------------------------- +start_link(Port) -> + gen_server:start_link({local, ?SERVER}, ?MODULE, [Port], []). + +start_link() -> + start_link(?DEFAULT_PORT). + +%%----------------------------------------------------- +%% @doc Stops the server. +%% @spec stop() -> ok +%% @end +%%----------------------------------------------------- +stop() -> + gen_server:cast(?SERVER, stop). + +%%----------------------------------------------------- +%% gen_server callbacks +%%----------------------------------------------------- + +init([Port]) -> + case gen_server:call(ggs_backup, get_backup) of + {backup_state, not_initialized} -> + {ok, LSock} = gen_tcp:listen(Port, [{active, true}, + {reuseaddr, true}]), + {ok, #state{port = Port, lsock = LSock}, 0}; + {backup_state, State} -> + {ok, LSock} = gen_tcp:listen(Port, [{active, true}, + {reuseaddr, true}]), + {ok, State#state{lsock = LSock}, 0} + end. + +handle_call({backup_state, OldState}, _From, State) -> + io:format("Received old state from backup~n"), + {noreply, OldState}. + + +handle_info({tcp, Socket, RawData}, State) -> + ggs_protocol:parse(RawData), + {noreply, State#state{lsock = Socket}}; + +handle_info({tcp_closed, Socket}, State) -> + gen_tcp:close(Socket), + {stop, "Client closed socket", State}; + +handle_info(timeout, #state{lsock = LSock} = State) -> + {ok, _Sock} = gen_tcp:accept(LSock), + {noreply, State}; + +handle_info(Other, State) -> + erlang:display(Other). + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%----------------------------------------------------- +%% Internal functions +%%----------------------------------------------------- +handle_cast(stop, State) -> + {stop, normal, State}; + +% Handle javascript defines +handle_cast({srv_cmd, "define", Headers, Data}, State) -> + Token = ggs_protocol:getToken(Headers), + GameVM = getJSVM(Token, State), + ggs_vm_runner:define(GameVM, Data), + send(State#state.lsock, "Token", "Okay, defined that for you!"), + {noreply, State}; + +% Handle javascript calls +handle_cast({srv_cmd, "call", Headers, Data}, State) -> + Token = ggs_protocol:getToken(Headers), + io:format("Got call request: ~p~n", [Data]), + GameVM = getJSVM(Token, State), + Ret = ggs_vm_runner:user_command(GameVM, "User", Data, []), + send(State#state.lsock, Token, "JS says:", binary_to_list(Ret)), + {noreply, State}; + +% Set the new state to the reference generated, and JSVM associated +%handle_cast({server, hello, Headers}, State) -> +handle_cast({srv_cmd, "hello", Headers, Data}, State) -> + GameToken = case proplist:get_value(game_token, Headers) of -> + undefined -> getNewToken(); + GT -> GT; + end, + ClientToken = getNewToken(), + OldMap = State#state.client_vm_map, + NewState = State#state{client_vm_map = OldMap ++ [{ClientToken, GameVM, GameToken}]}, + gen_server:cast(ggs_backup, {set_backup, NewState}), + {noreply, NewState}. + + +%%----------------------------------------------------- +%% Helpers +%%----------------------------------------------------- +getNewToken() -> + string:strip(os:cmd("uuidgen"), right, $\n ). + +getJSVM(ClientToken, State) -> + VMs = State#state.client_vm_map, + {value, {_,VM}} = lists:keysearch(ClientToken, 1, VMs), + VM. + +getGameVMByGameToken(GameToken, State) -> + VMs = State#state.client_vm_map, + {value, {_,VM}} = lists:keysearch(GameToken, 3, VMs), + VM. + +send(Socket, RefID, String) -> + gen_tcp:send(Socket, string:join([RefID,String,"\n"], " ")). + +send(Socket, RefID, String1, String2) -> + gen_tcp:send(Socket, string:join([RefID,String1, String2,"\n"], " ")). diff --git a/src/ggs_vm_runner.erl b/src/ggs_vm_runner.erl new file mode 100644 index 0000000..e149c51 --- /dev/null +++ b/src/ggs_vm_runner.erl @@ -0,0 +1,42 @@ +-module(ggs_vm_runner). +-export([start_link/0, define/2, user_command/4]). + +%Mattias +start_link() -> + erlang_js:start(), + PortPid = spawn_link( fun() -> + process_flag(trap_exit, true), + {ok, Port} = js_driver:new(), + js:define(Port, <<"function userCommand(user, command, args){return 'Hello world';}">>), + loop(Port) + end ), + PortPid. + + +loop(Port) -> + receive + {define, SourceCode} -> + ok = js:define(Port, list_to_binary(SourceCode)), + loop(Port); + {user_command, User, Command, Args, From, Ref} -> + {ok, Ret} = js:call(Port, <<"userCommand">>, + [ list_to_binary(User), + list_to_binary(Command), + list_to_binary(Args) + ]), + From ! {Ref, Ret}, + loop(Port) + end. + + +define(GameVM, SourceCode) -> + GameVM ! {define,SourceCode}. + +user_command(GameVM, User, Command, Args) -> + Ref = make_ref(), + GameVM ! {user_command, User, Command, Args, self(), Ref}, + receive + {Ref, RetVal} -> + RetVal; + Other -> Other + end.