Procházet zdrojové kódy

Remove old chatroom example

Joeri Exelmans před 5 roky
rodič
revize
28355d7393

+ 0 - 18
examples/chatroom/chatclient.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<diagram author="Yentl Van Tendeloo" name="Chat window - Tkinter version">
-    <description>
-        Tkinter chat client, with some fault-tolerance when the server goes down.
-    </description>
-    <top>
-        import socket
-        import json
-        import httplib
-    </top>
-
-    <inport name="tkinter_input"/>
-    <inport name="socket_in"/>
-    <outport name="socket_out"/>
-
-    <class src="classes/model.xml" default="true"/>
-    <class src="classes/networkclient.xml"/>
-</diagram>

+ 0 - 16
examples/chatroom/chatserver.xml

@@ -1,16 +0,0 @@
-<?xml version="1.0"?>
-<diagram author="Yentl Van Tendeloo" name="Chat Server">
-    <description>
-    </description>
-
-    <top>
-        import sys
-    </top>
-
-    <inport name="socket_in"/>
-    <outport name="socket_out"/>
-
-    <class src="classes/chatserver.xml" default="true"/>
-    <class src="classes/networkserver.xml"/>
-    <class src="classes/networkserversocket.xml"/>
-</diagram>

+ 0 - 32
examples/chatroom/chatwindowGUI.py

@@ -1,32 +0,0 @@
-import Tkinter as tk
-import scrollable_frame
-
-class ChatWindowGUI(tk.Tk):
-	def __init__(self, keypress):
-		tk.Tk.__init__(self)
-		self.resizable(width=tk.FALSE, height=tk.FALSE)
-		self.width = 230
-		self.height = 100
-		self.labelwidth = 30
-
-		self.frame = tk.Frame(self)
-		self.frame.focus_set()
-		self.frame.bind('<Key>', keypress)
-		self.chat_field = scrollable_frame.VerticalScrolledFrame(self.frame, bd='2', height=self.height, width=self.width, relief=tk.RIDGE)
-		tk.Label(self.chat_field.interior, text='SCCD Chat Client -- Tk version', justify=tk.LEFT, anchor=tk.NW, width=self.labelwidth).pack()
-		self.tk_buffer = tk.StringVar()
-		input_frame = tk.Frame(self.frame, bd='2', height=100, width=self.width, relief=tk.RIDGE)
-		self.input_text = tk.Label(input_frame, textvar=self.tk_buffer, anchor=tk.NW, justify=tk.LEFT, wraplength=self.width, width=self.labelwidth, background='grey')
-		self.chat_field.pack(anchor=tk.NW)
-		input_frame.pack(anchor=tk.NW, fill=tk.X)
-		self.input_text.pack(anchor=tk.NW, fill=tk.X)
-		self.frame.pack(anchor=tk.NW)
-	
-	def redraw_buffer(self, text):
-		self.tk_buffer.set(text)
-	
-	def setColor(self, color):
-		self.input_text.configure(background=color)
-		
-	def addMessage(self, msg, color):
-		tk.Label(self.chat_field.interior, text=msg, anchor=tk.NW, justify=tk.LEFT, foreground=color, wraplength=230, width=30).pack(anchor=tk.NW)

+ 0 - 122
examples/chatroom/classes/chatserver.xml

@@ -1,122 +0,0 @@
-<class name="ChatServer">
-    <relationships>
-        <association name="server" class="NetworkServer"/>
-    </relationships>
-
-    <constructor>
-        <parameter name="port"/>
-        <body>
-            <![CDATA[
-            self.room2clients = {}
-            self.client2room = {}
-            self.serverinstance = None
-            self.queue = []
-            self.port = port
-
-            self.tmp_sendlist = []
-            self.tmp_data = None
-            ]]>
-        </body>
-    </constructor>
-
-    <scxml>
-        <parallel id="server">
-            <state id="processor" initial="init">
-                <state id="init">
-                    <onentry>
-                        <raise scope="cd" event="create_instance">
-                            <parameter expr="'server'"/>
-                            <parameter expr="'NetworkServer'"/>
-                            <parameter expr="self.port"/>
-                        </raise>
-                    </onentry>
-                    <transition event="instance_created" target="../main">
-                        <parameter name="instancename"/>
-                        <script>
-                            self.serverinstance = instancename
-                        </script>
-                        <raise scope="narrow" event="set_association_name" target="instancename">
-                            <parameter expr="instancename"/>
-                        </raise>
-                        <raise scope="cd" event="start_instance">
-                            <parameter expr="instancename"/>
-                        </raise>
-                    </transition>
-                </state>
-                <state id="main">
-                    <transition cond="len(self.queue) > 0 and self.queue[0][1].startswith('ACK ')" target="."/>
-                    <transition cond="len(self.queue) > 0 and self.queue[0][1].startswith('MSG ')" target="../forwarding">
-                        <script>
-                            socket, data = self.queue.pop(0)
-                            roomnumber = self.client2room[socket]
-                            self.tmp_sendlist = set(self.room2clients[roomnumber])
-                            # Don't send to the original sender
-                            # This also prevents infinite propagation to the other server
-                            self.tmp_sendlist.remove(socket)
-                            self.tmp_sendlist = list(self.tmp_sendlist)
-                            self.tmp_data = data
-                        </script>
-                        <raise scope="broad" event="server_input">
-                            <parameter expr="socket"/>
-                            <parameter expr="'ACK MSG'"/>
-                        </raise>
-                    </transition>
-                    <transition cond="len(self.queue) > 0 and self.queue[0][1].startswith('POLL')" target=".">
-                        <script>
-                            socket, data = self.queue.pop(0)
-                        </script>
-                        <raise scope="broad" event="server_input">
-                            <parameter expr="socket"/>
-                            <parameter expr="'ALIVE'"/>
-                        </raise>
-                    </transition>
-                    <transition cond="len(self.queue) > 0 and self.queue[0][1].startswith('JOIN ')" target=".">
-                        <script>
-                            socket, data = self.queue.pop(0)
-                            roomnumber = int(data[5:])
-                            self.room2clients.setdefault(roomnumber, set()).add(socket)
-                            self.client2room[socket] = roomnumber
-                        </script>
-                        <raise scope="broad" event="server_input">
-                            <parameter expr="socket"/>
-                            <parameter expr="'ACK JOIN %i' % roomnumber"/>
-                        </raise>
-                    </transition>
-                    <transition cond="len(self.queue) > 0 and self.queue[0][1].startswith('LEAVE')" target=".">
-                        <script>
-                            socket, data = self.queue.pop(0)
-                            roomnumber = self.client2room[socket]
-                            self.room2clients[roomnumber].remove(socket)
-                            del self.client2room[socket]
-                        </script>
-                        <raise scope="broad" event="server_input">
-                            <parameter expr="socket"/>
-                            <parameter expr="'ACK LEAVE'"/>
-                        </raise>
-                    </transition>
-                </state>
-                <state id="forwarding">
-                    <transition cond="len(self.tmp_sendlist) > 0" target=".">
-                        <raise scope="broad" event="server_input">
-                            <parameter expr="self.tmp_sendlist.pop()"/>
-                            <parameter expr="self.tmp_data"/>
-                        </raise>
-                    </transition>
-                    <transition cond="len(self.tmp_sendlist) == 0" target="../main"/>
-                </state>
-            </state>
-
-            <state id="receiver">
-                <state id="queue">
-                    <transition event="server_output" target=".">
-                        <parameter name="socket"/>
-                        <parameter name="data"/>
-                        <script>
-                            self.queue.append((socket, data))
-                        </script>
-                    </transition>
-                </state>
-            </state>
-        </parallel>
-    </scxml>
-</class>

+ 0 - 255
examples/chatroom/classes/model.xml

@@ -1,255 +0,0 @@
-<class name="ChatWindow" default="true">
-	<relationships>
-		<association name="client" class="NetworkClient"/>
-	</relationships>
-	<method name="ChatWindow">
-		<parameter name="my_controller"/>
-	<body><![CDATA[
-self.colors = {'service': 'black', 'me': 'red', 'other': 'blue'}
-self.numbers = set([str(c) for c in range(10)])
-self.characters = set([chr(c) for c in range(32,126)])
-self.server_list = [('localhost', 8000), ('localhost', 8001)]
-self.connecting_server = 0
-self.buffer = ''
-self.my_controller = my_controller
-try:
-	data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlight","args":{}}'})
-	headers = {'Content-Type': 'text/plain'}
-	conn = httplib.HTTPConnection('127.0.0.1:8124')
-	conn.request('PUT', '/GET/console?wid=5', data, headers)
-	conn.getresponse()
-	conn.close()
-except:
-	pass
-	]]></body>
-	</method>
-	<method name="add_message">
-		<parameter name="msg"/>
-		<parameter name="color"/>
-	<body><![CDATA[
-self.my_controller.addMessage(msg, color)
-	]]></body>
-	</method>
-	<method name="append_to_buffer">
-		<parameter name="character"/>
-	<body><![CDATA[
-self.buffer = ''.join([self.buffer, character])
-self.my_controller.redraw_buffer(self.buffer)
-	]]></body>
-	</method>
-	<method name="remove_last_in_buffer">
-	<body><![CDATA[
-self.buffer = self.buffer[:-1]
-self.my_controller.redraw_buffer(self.buffer)
-	]]></body>
-	</method>
-	<method name="clear_input">
-	<body><![CDATA[
-self.buffer = ''
-self.my_controller.redraw_buffer(self.buffer)
-	]]></body>
-	</method>
-	<method name="input_join">
-	<body><![CDATA[self.my_controller.setColor('green')
-	]]></body>
-	</method>
-	<method name="input_msg">
-	<body><![CDATA[self.my_controller.setColor('white')
-	]]></body>
-	</method>
-	<method name="input_command">
-	<body><![CDATA[self.my_controller.setColor('grey')
-	]]></body>
-	</method>
-	<method name="get_buffer">
-	<body><![CDATA[return self.buffer
-	]]></body>
-	</method>
-<scxml initial="init_network" priority="source_child">
-<state id="connecting">
-<transition event="connected" target="./../connected" >
-</transition>
-<onentry>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_highlightState","args":{"asid":"232","followCrossFormalismLinks":"*"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-<raise event="connect" scope="broad">
-<parameter expr="'localhost'"/>
-<parameter expr="8000"/>
-</raise>
-</onentry>
-<onexit>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlightState","args":{"asid":"232"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-</onexit>
-</state>
-<state id="leaving">
-<transition event="left" target="./../left" >
-</transition>
-<onentry>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_highlightState","args":{"asid":"233","followCrossFormalismLinks":"*"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-self.add_message('leaving', self.colors['service'])]]></script>
-<raise event="leave" scope="broad">
-</raise>
-</onentry>
-<onexit>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlightState","args":{"asid":"233"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-</onexit>
-</state>
-<state id="joined">
-<transition event="input" cond="character == 'k'" port="tkinter_input" target="./../leaving" >
-<parameter name="character"/>
-</transition>
-<transition after="10.0" target="./../leaving" >
-</transition>
-<onentry>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_highlightState","args":{"asid":"228","followCrossFormalismLinks":"*"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-self.add_message('joined room', self.colors['service'])]]></script>
-</onentry>
-<onexit>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlightState","args":{"asid":"228"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-</onexit>
-</state>
-<state id="left">
-<onentry>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_highlightState","args":{"asid":"229","followCrossFormalismLinks":"*"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-self.add_message('left room', self.colors['service'])]]></script>
-</onentry>
-<onexit>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlightState","args":{"asid":"229"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-</onexit>
-</state>
-<state id="connected">
-<transition event="joined" target="./../joined" >
-</transition>
-<onentry>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_highlightState","args":{"asid":"230","followCrossFormalismLinks":"*"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-self.add_message('joining room 1', self.colors['service'])]]></script>
-<raise event="join" scope="broad">
-<parameter expr="1"/>
-</raise>
-</onentry>
-<onexit>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlightState","args":{"asid":"230"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-</onexit>
-</state>
-<state id="init_network">
-<transition event="instance_created" target="./../connecting" >
-<parameter name="association_name"/>
-<raise event="start_instance" scope="cd">
-<parameter expr="association_name"/>
-</raise>
-</transition>
-<onentry>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_highlightState","args":{"asid":"226","followCrossFormalismLinks":"*"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-<raise event="create_instance" scope="cd">
-<parameter expr="'client'"/>
-</raise>
-</onentry>
-<onexit>
-<script><![CDATA[try:
- data = json.dumps({'text':'CLIENT_BDAPI :: {"func":"_unhighlightState","args":{"asid":"226"}}'})
- headers = {'Content-Type': 'text/plain'}
- conn = httplib.HTTPConnection('127.0.0.1:8124')
- conn.request('PUT', '/GET/console?wid=5', data, headers)
- conn.getresponse()
- conn.close()
-except:
- pass
-]]></script>
-</onexit>
-</state>
-</scxml>
-</class>

+ 0 - 216
examples/chatroom/classes/networkclient.xml

@@ -1,216 +0,0 @@
-<class name="NetworkClient">
-    <constructor>
-        <body>
-            self.socket = None
-            self.host = None
-            self.received_data = ""
-            self.send_data = ""
-            self.parsing_data = ""
-            self.queue = []
-        </body>
-    </constructor>
-
-    <scxml>
-        <parallel id="parallel">
-        <state id="client" initial="wait_for_destination">
-            <transition event="connect" cond="self.socket is not None" target="close">
-                <parameter name="hostname"/>
-                <parameter name="port"/>
-                <script>
-                    self.host = (hostname, port)
-                </script>
-            </transition>
-            <transition event="connect" cond="self.socket is None" target="init">
-                <parameter name="hostname"/>
-                <parameter name="port"/>
-                <script>
-                    self.host = (hostname, port)
-                </script>
-            </transition>
-
-            <state id="wait_for_destination"/>
-
-            <state id="init">
-                <onentry>
-                    <raise scope="output" event="create_socket" output="socket_out"/>
-                </onentry>
-                <transition port="socket_in" event="created_socket" target="../connecting">
-                    <parameter name="socket"/>
-                    <script>
-                        self.socket = socket
-                    </script>
-                </transition>
-            </state>
-
-            <state id="connecting">
-                <onentry>
-                    <raise scope="output" event="connect_socket" output="socket_out">
-                        <parameter expr="self.socket"/>
-                        <parameter expr="self.host"/>
-                    </raise>
-                </onentry>
-                <transition event="connected_socket" port="socket_in" target="../connected">
-                    <raise scope="broad" event="connected"/>
-                </transition>
-            </state>
-
-            <parallel id="connected">
-                <!-- We explicitly use the fact that there is no threading -->
-                <state id="processing" initial="processing">
-                    <state id="processing">
-                        <transition cond="'\0' in self.received_data" target="../parse">
-                            <script>
-                                self.parsing_data, self.received_data = self.received_data.split('\0', 1)
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="parse">
-                        <transition cond="self.parsing_data.startswith('MSG ')" target="../processing">
-                            <raise scope="broad" event="receive_message">
-                                <parameter expr="self.parsing_data[4:]"/>
-                            </raise>
-                        </transition>
-                        <transition cond="self.parsing_data.startswith('ACK MSG')" target="../processing"/>
-                        <transition cond="self.parsing_data.startswith('ACK JOIN')" target="../processing">
-                            <raise scope="broad" event="joined">
-                                <parameter expr="self.parsing_data.split(' ')[2]"/>
-                            </raise>
-                        </transition>
-                        <transition cond="self.parsing_data.startswith('ALIVE')" target="../processing">
-                            <raise scope="broad" event="alive"/>
-                        </transition>
-                        <transition cond="self.parsing_data.startswith('ACK LEAVE')" target="../processing">
-                            <raise scope="broad" event="left"/>
-                        </transition>
-                    </state>
-                </state>
-
-                <state id="receiving">
-                    <state id="receive">
-                        <onentry>
-                            <raise scope="output" event="recv_socket" output="socket_out">
-                                <parameter expr="self.socket"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" event="received_socket" cond="(self.socket == socket) and (data != '')" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                            <script>
-                                print("Got data " + repr(data))
-                                print("Total data: " + repr(self.received_data))
-                                self.received_data += data
-                            </script>
-                        </transition>
-                        <!-- For the sake of this exercise, wait for timeout instead of directly signaling this close -->
-                        <transition port="socket_in" event="received_socket" cond="(self.socket == socket) and (data == '')" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                            <raise event="close"/>
-                        </transition>
-                    </state>
-                </state>
-
-                <state id="sending" initial="waiting_for_inputdata">
-                    <state id="waiting_for_inputdata">
-                        <transition cond="len(self.queue) > 0" target="../transmitting">
-                            <script>
-                                self.send_data = self.queue.pop(0) + "\0"
-                            </script>
-                        </transition>
-                    </state>
-
-                    <state id="transmitting">
-                        <onentry>
-                            <raise scope="output" event="send_socket" output="socket_out">
-                                <parameter expr="self.socket"/>
-                                <parameter expr="self.send_data"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" cond="self.socket == socket and (sent == len(self.send_data))" event="sent_socket" target="../waiting_for_inputdata">
-                            <parameter name="socket"/>
-                            <parameter name="sent"/>
-                            <script>
-                                self.send_data = ""
-                            </script>
-                        </transition>
-                        <transition port="socket_in" cond="self.socket == socket and (sent != len(self.send_data))" event="sent_socket" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="sent"/>
-                            <script>
-                                self.send_data = self.send_data[sent:]
-                            </script>
-                        </transition>
-                    </state>
-                </state>
-            </parallel>
-            <transition event="close" target="error_close"/>
-
-            <state id="error_close">
-                <onentry>
-                    <raise scope="output" event="close_socket" output="socket_out">
-                        <parameter expr="self.socket"/>
-                    </raise>
-                </onentry>
-                <transition event="closed_socket" cond="self.socket == socket" target="../wait_for_destination">
-                    <parameter name="socket"/>
-                    <script>
-                        self.socket = None
-                        self.host = None
-                    </script>
-                </transition>
-            </state>
-
-            <state id="close">
-                <onentry>
-                    <raise scope="output" event="close_socket" output="socket_out">
-                        <parameter expr="self.socket"/>
-                    </raise>
-                </onentry>
-                <transition event="closed_socket" cond="self.socket == socket" target="../init">
-                    <parameter name="socket"/>
-                    <raise scope="broad" event="disconnected"/>
-                </transition>
-            </state>
-
-            <transition event="disconnect" cond="self.socket is not None" target="close">
-                <script>
-                    print("Closing socket")
-                </script>
-            </transition>
-            <transition event="disconnect" cond="self.socket is None" target="wait_for_destination">
-                <script>
-                    print("Signaling disconnectedness")
-                </script>
-                <raise scope="broad" event="disconnected"/>
-            </transition>
-        </state>
-
-        <state id="queue">
-            <state id="queue">
-                <transition event="send_message" target=".">
-                    <parameter name="data"/>
-                    <script>
-                        self.queue.append("MSG %s: %s" % (socket.gethostname(), data))
-                    </script>
-                </transition>
-                <transition event="join" target=".">
-                    <parameter name="data"/>
-                    <script>
-                        self.queue.append("JOIN %s" % data)
-                    </script>
-                </transition>
-                <transition event="leave" target=".">
-                    <script>
-                        self.queue.append("LEAVE")
-                    </script>
-                </transition>
-                <transition event="poll" target=".">
-                    <script>
-                        self.queue.append("POLL")
-                    </script>
-                </transition>
-            </state>
-        </state>
-        </parallel>
-    </scxml>
-</class>

+ 0 - 95
examples/chatroom/classes/networkserver.xml

@@ -1,95 +0,0 @@
-    <class name="NetworkServer" default="true">
-        <relationships>
-            <association name="sockets" class="NetworkServerSocket" />
-        </relationships>
-        <constructor>
-            <parameter name="port"/>
-            <body>
-                <![CDATA[
-                self.socket = None
-                self.association_name = None
-                self.port = port
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="init">
-            <state id="init">
-                <transition event="set_association_name" target="../main">
-                    <parameter name="association_name"/>
-                    <script>
-                        self.association_name = association_name
-                    </script>
-                </transition>
-            </state>
-            <parallel id="main">
-                <state id="main" initial="init">
-                    <state id="init">
-                        <onentry>
-                            <raise scope="output" event="create_socket" port="socket_out"/>
-                        </onentry>
-                        <transition port="socket_in" event="created_socket" target="../binding">
-                            <parameter name="socket"/>
-                            <script>
-                                self.socket = socket
-                            </script>
-                        </transition>
-                    </state>
-                    <state id="binding">
-                        <onentry>
-                            <raise scope="output" event="bind_socket" port="socket_out">
-                                <parameter expr="self.socket"/>
-                                <parameter expr="('0.0.0.0', self.port)"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" event="bound_socket" cond="self.socket == socket" target="../listening">
-                            <parameter name="socket"/>
-                        </transition>
-                    </state>
-                    <state id="listening">
-                        <onentry>
-                            <raise scope="output" event="listen_socket" port="socket_out">
-                                <parameter expr="self.socket"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" event="listened_socket" cond="self.socket == socket" target="../accepting">
-                            <parameter name="socket"/>
-                        </transition>
-                    </state>
-                    <state id="accepting">
-                        <onentry>
-                            <raise scope="output" port="socket_out" event="accept_socket">
-                                <parameter expr="self.socket"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" event="accepted_socket" cond="self.socket == socket" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="connected_socket"/>
-                            <raise scope="cd" event="create_instance">
-                                <parameter expr="'sockets'" />
-                                <parameter expr="'NetworkServerSocket'" />
-                                <parameter expr="connected_socket" />
-                            </raise>
-                        </transition>
-                        <transition event="instance_created" target=".">
-                            <parameter name="instancename"/>
-                            <raise scope="narrow" event="set_association_name" target="instancename">
-                                <parameter expr="instancename"/>
-                            </raise>
-                            <raise scope="cd" event="start_instance">
-                                <parameter expr="instancename" />
-                            </raise>
-                        </transition>
-                    </state>
-                </state>
-                <state id="close">
-                    <state id="close">
-                        <transition event="close" target=".">
-                            <raise scope="cd" event="delete_instance">
-                                <parameter expr="association_name"/>
-                            </raise>
-                        </transition>
-                    </state>
-                </state>
-            </parallel>
-        </scxml>
-    </class>

+ 0 - 109
examples/chatroom/classes/networkserversocket.xml

@@ -1,109 +0,0 @@
-    <class name="NetworkServerSocket">
-        <constructor>
-            <parameter name="my_socket"/>
-            <body>
-                <![CDATA[
-                self.socket = my_socket
-                self.received_data = ""
-                self.send_data = None
-                self.association_name = None
-                self.queue = []
-                ]]>
-            </body>
-        </constructor>
-        <scxml initial="parallel">
-            <parallel id="parallel">
-                <!-- We explicitly use the fact that there is no threading -->
-                <state id="processing" initial="processing">
-                    <state id="processing">
-                        <transition cond="'\0' in self.received_data" target=".">
-                            <script>
-                                self.parsing_data, self.received_data = self.received_data.split('\0', 1)
-                            </script>
-                            <raise scope="broad" event="server_output">
-                                <parameter expr="self.socket"/>
-                                <parameter expr="self.parsing_data"/>
-                            </raise>
-                        </transition>
-                    </state>
-                </state>
-
-                <state id="receiving">
-                    <state id="receive">
-                        <onentry>
-                            <raise scope="output" event="recv_socket" output="socket_out">
-                                <parameter expr="self.socket"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" event="received_socket" cond="self.socket == socket and data != ''" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                            <script>
-                                self.received_data += data
-                            </script>
-                        </transition>
-                        <transition port="socket_in" event="received_socket" cond="self.socket == socket and data == ''" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                            <raise event="stop"/>
-                        </transition>
-                    </state>
-                </state>
-
-                <state id="sending" initial="waiting_for_inputdata">
-                    <state id="waiting_for_inputdata">
-                        <transition cond="len(self.queue) > 0" target="../transmitting">
-                            <script>
-                                self.send_data = self.queue.pop(0) + "\0"
-                            </script>
-                        </transition>
-                    </state>
-
-                    <state id="transmitting">
-                        <onentry>
-                            <raise scope="output" event="send_socket" output="socket_out">
-                                <parameter expr="self.socket"/>
-                                <parameter expr="self.send_data"/>
-                            </raise>
-                        </onentry>
-                        <transition port="socket_in" cond="self.socket == socket and (sent == len(self.send_data))" event="sent_socket" target="../waiting_for_inputdata">
-                            <parameter name="socket"/>
-                            <parameter name="sent"/>
-                            <script>
-                                self.send_data = ""
-                            </script>
-                        </transition>
-                        <transition port="socket_in" cond="self.socket == socket and (sent != len(self.send_data))" event="sent_socket" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="sent"/>
-                            <script>
-                                self.send_data = self.send_data[sent:]
-                            </script>
-                        </transition>
-                    </state>
-                </state>
-
-                <state id="receiver">
-                    <state id="queue">
-                        <transition event="server_input" cond="self.socket == socket" target=".">
-                            <parameter name="socket"/>
-                            <parameter name="data"/>
-                            <script>
-                                self.queue.append(data)
-                            </script>
-                        </transition>
-                    </state>
-                </state>
-
-                <transition event="stop" target="../close"/>
-            </parallel>
-
-            <state id="close">
-                <onentry>
-                    <raise scope="output" event="close_socket" output="socket_out">
-                        <parameter expr="self.socket"/>
-                    </raise>
-                </onentry>
-            </state>
-        </scxml>
-    </class>

+ 0 - 15
examples/chatroom/classes/port2event.xml

@@ -1,15 +0,0 @@
-<class name="Port2Event">
-	<scxml initial="main">
-		<state id="main">
-			<transition port="tkinter_input" event="input" target=".">
-				<parameter name="character"/>
-				<raise event="tkinter_input" scope="broad">
-					<parameter expr="character"/>
-				</raise>
-				<script>
-					print("RAISING EVENT" + str(character))
-				</script>
-			</transition>
-		</state>
-	</scxml>
-</class>

+ 0 - 34
examples/chatroom/run_client.py

@@ -1,34 +0,0 @@
-"""
-Runner script for the TkInter chat window SCCD model.
-
-Author: Yentl Van Tendeloo
-"""
-
-import Tkinter as tk
-import chatclient
-import socket2event
-from python_runtime.statecharts_core import Event
-from python_runtime.tkinter_eventloop import *
-from chatwindowGUI import ChatWindowGUI
-
-def keypress(key):
-    global controller
-    try:
-        str(key.char)
-        if len(key.char) == 1:
-            controller.addInput(Event("input", "tkinter_input", [key.char]), 0.0)
-        # Don't do anything for empty characters, as these are control characters (e.g. press shift)
-    except UnicodeEncodeError:
-        print("Unicode input is not supported for simplicity")
-
-root = ChatWindowGUI(keypress)
-		
-if __name__ == "__main__":
-    global controller
-    controller = chatclient.Controller(root, TkEventLoop(root))
-    socket2event.boot_translation_service(controller)
-    controller.start()
-    try:
-		root.mainloop()
-    except:
-        controller.stop()

+ 0 - 19
examples/chatroom/run_server.py

@@ -1,19 +0,0 @@
-import chatserver
-import socket2event
-import sys
-
-if len(sys.argv) != 2:
-    print("Usage:")
-    print("  %s port" % sys.argv[0])
-    sys.exit(1)
-
-controller = chatserver.Controller(int(sys.argv[1]))
-socket2event.boot_translation_service(controller)
-controller.start()
-
-try:
-    import time
-    while 1:
-        time.sleep(1)
-finally:
-    controller.stop()

+ 0 - 52
examples/chatroom/scrollable_frame.py

@@ -1,52 +0,0 @@
-## Source: http://tkinter.unpythonic.net/wiki/VerticalScrolledFrame
-
-from Tkinter import *
-
-class VerticalScrolledFrame(Frame):
-    """A pure Tkinter scrollable frame that actually works!
-
-    * Use the 'interior' attribute to place widgets inside the scrollable frame
-    * Construct and pack/place/grid normally
-    * This frame only allows vertical scrolling
-    
-    """
-    def __init__(self, parent, *args, **kw):
-        Frame.__init__(self, parent, *args, **kw)            
-
-        # create a canvas object and a vertical scrollbar for scrolling it
-        vscrollbar = Scrollbar(self, orient=VERTICAL)
-        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
-        canvas = Canvas(self, bd=0, highlightthickness=0,
-                        yscrollcommand=vscrollbar.set)
-        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
-        vscrollbar.config(command=canvas.yview)
-
-        # reset the view
-        canvas.xview_moveto(0)
-        canvas.yview_moveto(0)
-
-        # create a frame inside the canvas which will be scrolled with it
-        self.interior = interior = Frame(canvas)
-        interior_id = canvas.create_window(0, 0, window=interior,
-                                           anchor=NW)
-
-        # track changes to the canvas and frame width and sync them,
-        # also updating the scrollbar
-        def _configure_interior(event):
-            # update the scrollbars to match the size of the inner frame
-            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
-            canvas.config(scrollregion="0 0 %s %s" % size)
-            if interior.winfo_reqwidth() != canvas.winfo_width():
-                # update the canvas's width to fit the inner frame
-                canvas.config(width=interior.winfo_reqwidth())
-            #NOTE my own addition
-            canvas.yview_moveto(1)
-        interior.bind('<Configure>', _configure_interior)
-
-        def _configure_canvas(event):
-            if interior.winfo_reqwidth() != canvas.winfo_width():
-                # update the inner frame's width to fill the canvas
-                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
-        canvas.bind('<Configure>', _configure_canvas)
-
-        return

+ 0 - 85
examples/chatroom/socket2event.py

@@ -1,85 +0,0 @@
-import threading
-from python_runtime.statecharts_core import Event
-import socket
-
-def _recv(controller, sock):
-    data = sock.recv(4096)
-    controller.addInput(Event("received_socket", "socket_in", [sock, data]), 0.0)
-
-def _accept(controller, sock):
-    conn, addr = sock.accept()
-    controller.addInput(Event("accepted_socket", "socket_in", [sock, conn]), 0.0)
-
-def _connect(controller, sock, destination):
-    sock.connect(destination)
-    controller.addInput(Event("connected_socket", "socket_in", [sock]), 0.0)
-
-def _create(controller, _):
-    sock = socket.socket()
-    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-    controller.addInput(Event("created_socket", "socket_in", [sock]), 0.0)
-
-def _send(controller, sock, data):
-    sent = sock.send(data)
-    controller.addInput(Event("sent_socket", "socket_in", [sock, sent]), 0.0)
-
-def _close(controller, sock):
-    sock.close()
-    controller.addInput(Event("closed_socket", "socket_in", [sock]), 0.0)
-
-def _bind(controller, sock, addr):
-    sock.bind(addr)
-    controller.addInput(Event("bound_socket", "socket_in", [sock]), 0.0)
-
-def _listen(controller, sock):
-    sock.listen(1)
-    controller.addInput(Event("listened_socket", "socket_in", [sock]), 0.0)
-
-def _wrapper_func(*args):
-    func = args[0]
-    controller = args[1]
-    sock = args[2]
-    try:
-        func(*args[1:])
-    except socket.error as e:
-        print("ERROR " + str(e))
-        controller.addInput(Event("error_socket", "socket_in", [sock, e]), 0.0)
-    except Exception as e:
-        print("UNKNOWN ERROR " + str(e))
-        controller.addInput(Event("unknown_error_socket", "socket_in", [sock, e]), 0.0)
-
-def _start_on_daemon_thread(func, args):
-    new_args = [func]
-    new_args.extend(args)
-    args = new_args
-    thrd = threading.Thread(target=_wrapper_func, args=args)
-    thrd.daemon = True
-    thrd.start()
-
-def boot_translation_service(controller):
-    _start_on_daemon_thread(_poll, [controller, None])
-
-def _poll(controller, _):
-    socket_out = controller.addOutputListener("socket_out")
-    while 1:
-            evt = socket_out.fetch(-1)
-            name, params = evt.getName(), evt.getParameters()
-            print("Got event " + str(evt))
-            if name == "accept_socket":
-                _start_on_daemon_thread(_accept, [controller, params[0]])
-            elif name == "recv_socket":
-                _start_on_daemon_thread(_recv, [controller, params[0]])
-            elif name == "connect_socket":
-                _start_on_daemon_thread(_connect, [controller, params[0], params[1]])
-            elif name == "create_socket":
-                _start_on_daemon_thread(_create, [controller, None])
-            elif name == "close_socket":
-                _start_on_daemon_thread(_close, [controller, params[0]])
-            elif name == "send_socket":
-                _start_on_daemon_thread(_send, [controller, params[0], params[1]])
-            elif name == "bind_socket":
-                _start_on_daemon_thread(_bind, [controller, params[0], params[1]])
-            elif name == "listen_socket":
-                _start_on_daemon_thread(_listen, [controller, params[0]])
-            elif name == "stop":
-                break