Connectors Style: Main program and subroutines INF 123 – Software architecture 1
Outline Some theory Connector 1: Procedure call Style: Main program and subroutines Connector 2: Socket 2
SOME THEORY 3
Connector Architectural element in charge of the interactions among components Connector in implementations – No dedicated code – Scattered across modules Connector in architectures – Its own spec – To distinguish computations from interactions 4
Connectors Allow components to transfer control and data with each other Aka facilitating control flow and data flow 5 What is control?
Connectors “The guards at the gate of separation of concerns” Often domain-agnostic: the how, not the what 6 I protect that which matters most
Connectors Can be super smart and complex E.g. order, filter, combine, or discard messages 7 I am a trafficker of information
4 interaction roles Communication – Transfer of data – Message passing Coordination – Transfer of control – Function calls Conversion – Translation – Wrapping Facilitation – Load-balancing – Locks 8
Connector examples vs concerns Procedure call Method call Event broker Pubsub Interrupts Socket Load balancer DB driver SSH Tunnel … Best effort vs exactly once vs reliable Encrypted vs cleartext Uni/multi/broadcast Static vs dynamic linkage Serialization (JSON, XML, binary) Stateless vs stateful Sync vs asynchronous … 9
PROCEDURE CALL 10
Procedure call Communication role – Arguments, return values Coordination role – Control flow The most basic connector – “The Assembly language of sw interaction” 11
Examples Subroutines – Architectural style: Main program and subroutine Object-oriented methods UNIX fork and exec OS calls (open, read, write, poll, …) Callbacks Basis for Remote Procedure Call 12
STYLE: MAIN PROGRAM AND SUBROUTINES 13
Style: Main program and subroutines Break down a long program into 1 main and N subroutines Subroutines – Self-contained No side-effects Independent of each other – Functionally meaningful and substantial Good: detect_and_execute_collisions(me, enemies, walls) returns True if the game is over Bad: add_one_to_score(score) returns score+1 14
Style: Main program and subroutines 15 main Subroutine 1Subroutine 2Subroutine N … Function calls
Easy to follow the control flow 16 main Subroutine 1Subroutine 2Subroutine N …
Style: Main program and subroutines while keep_going: keep_going, direction = process_input(direction) mybox = move(mybox, direction) if collide(mybox, borders): mybox, direction = create_box(dims) mybox, pellets = eat_colliding_pellet(mybox, pellets, dims) draw_everything(screen, mybox, pellets, borders) clock.tick(50) 17
Style: Main program and subroutines 18 game loop process_inputmovedraw_everything … Function calls Only these functions involve Pygame
Same loop, but replace Pygame display 19
IP SOCKETS 20
Socket Endpoint of inter-process communication across the network Most follow Internet Protocol (IP) BSD standard IP socket API – Constructor, bind, listen, connect, accept, send, recv, close, setsockopt, … – poll, select, epoll, or kqueue to know the socket state (is there data to recv? The other end hung up?) Client-server paradigm 21
Client-server paradigm Server socket bind() and listen() Server poll() its sockets periodically Client socket connect() Client poll() its socket periodically Server socket accept() – Creates a new socket for that client connection Both sockets send() and recv() One socket close() The other’s poll() will notify the closure 22
Client-server The client contacts the server The server can’t pull a client in! – Neo must sit to connect 23
Sequence diagram 24
IP sockets in Python