Slide 1

Slide 1 text

OPENCHATOPS Programming language agnostic ChatOps @jimmycuadra

Slide 2

Slide 2 text

WARNING

Slide 3

Slide 3 text

THIS IS ALL VAPORWARE

Slide 4

Slide 4 text

SOME BACKGROUND

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

IRC

Slide 11

Slide 11 text

IRC

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

BUT HOW?

Slide 15

Slide 15 text

ADAPTER | ROBOT / \ PLUGIN PLUGIN

Slide 16

Slide 16 text

ROBOT ADAPTER PLUGIN PLUGIN

Slide 17

Slide 17 text

ROBOT PLUGIN

Slide 18

Slide 18 text

ROBOT PLUGIN NETWORK

Slide 19

Slide 19 text

ROBOT PLUGIN RPC NETWORK

Slide 20

Slide 20 text

Remote Procedure Call

Slide 21

Slide 21 text

REST (Representational State Transfer)

Slide 22

Slide 22 text

RPC REST GET /posts/1 HTTP/1.1 Host: www.example.com getPost(1) 01101001

Slide 23

Slide 23 text

• CORBA • JSON-RPC • SOAP • XML-RPC • Thrift • DRb • WCF • Protocol Buffers • Avro • Transit • D-Bus • AMF • Finagle • Cap’n Proto • ASN.1 • FlatBuffers • EDN • Fressian

Slide 24

Slide 24 text

THE DETAILS

Slide 25

Slide 25 text

gRPC

Slide 26

Slide 26 text

Protocol Buffers v3

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

syntax = "proto3"; package helloworld; // The greeter service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; }

Slide 29

Slide 29 text

class GreeterServer < Helloworld::Greeter::Service def sayhello(helloreq) Helloworld::HelloReply.new( message: "Hello #{hello_req.name}” ) end end Server (Ruby)

Slide 30

Slide 30 text

def main s = GRPC::RpcServer.new s.add_http2_port('0.0.0.0:50051') s.handle(GreeterServer) s.run end

Slide 31

Slide 31 text

var client = new hello_proto.Greeter(‘localhost:50051'); client.sayHello({name: user}, function(err, response) { console.log('Greeting:', response.message); }); Client (JavaScript)

Slide 32

Slide 32 text

// The RPC service that controls the chat bot. service Robot { // Instructs the bot to join a room. rpc Join (JoinRequest) returns (JoinResponse); // Listens to a stream of incoming events. rpc Listen (ListenRequest) returns (stream Event); // Instructs the bot to part from a room. rpc Part (PartRequest) returns (PartResponse); // Sends one or more messages to a user or room. rpc SendMessages (SendMessagesRequest) returns (SendMessagesResponse); }

Slide 33

Slide 33 text

TRADE OFFS

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

ADAPTER | ROBOT / \ PLUGIN PLUGIN

Slide 36

Slide 36 text

ROBOT ADAPTER PLUGIN PLUGIN

Slide 37

Slide 37 text

https://github.com/openchatops

Slide 38

Slide 38 text

THANK YOU @jimmycuadra

Slide 39

Slide 39 text

QUESTIONS? @jimmycuadra