Skip to content

Instantly share code, notes, and snippets.

@EnricoPicci
EnricoPicci / socket-io-observable.ts
Last active June 13, 2018 08:52
Sockets as Observable
import { Server } from 'http';
import { Observable } from 'rxjs';
import { Observer } from 'rxjs';
import * as socketIoServer from 'socket.io';
import {SocketObs} from './socket-obs';
@EnricoPicci
EnricoPicci / socket-obs.ts
Last active June 13, 2018 09:03
Messages received as Observables
import { Observable, Observer } from 'rxjs';
export class SocketObs {
constructor(private socket: SocketIO.Socket) {}
onMessageType(messageType): Observable<any> {
return new Observable<any>((observer: Observer<any>) => {
this.socket.on(messageType, data => observer.next(data));
});
}
@EnricoPicci
EnricoPicci / start-socket-server-1.ts
Created June 13, 2018 12:48
Determine the nature of the Client
startSocketServer(httpServer: Server) {
sockets(httpServer, this.port).pipe(
mergeMap(socket =>
race(
socket.onMessageType(MessageType.BIND_MONITOR),
socket.onMessageType(MessageType.BIND_CONTROLLER)
)
)
)
.subscribe();
@EnricoPicci
EnricoPicci / mobile-object-server-2.ts
Last active June 19, 2018 10:18
Observable which emits when MobileObject has to be added or removed from all Monitors
import {sockets} from './socket-io-observable';
import {SocketObs} from './socket-obs';
class MobileObjectServer {
private mobileObjectAdded = new Subject<{mobObj: MobileObject, mobObjId: string}>();
private mobileObjectRemoved = new Subject<string>();
startSocketServer(httpServer: Server) {
sockets(httpServer, this.port).pipe(
mergeMap(socket =>
@EnricoPicci
EnricoPicci / mobile-object-server-2.ts
Last active June 19, 2018 12:40
Handle dynamics Observable for all Monitors
import {sockets} from './socket-io-observable';
import {SocketObs} from './socket-obs';
class MobileObjectServer {
private mobileObjectAdded = new Subject<{mobObj: MobileObject, mobObjId: string}>();
private mobileObjectRemoved = new Subject<string>();
startSocketServer(httpServer: Server) {
sockets(httpServer, this.port).pipe(
startSocketServer(httpServer: Server) {
sockets(httpServer, this.port).pipe(
mergeMap(socket =>
race(
socket.onMessageType(MessageType.BIND_MONITOR)
.pipe(
map(() => (socketObs: SocketObs) => this.handleMonitorObs(socketObs))
),
socket.onMessageType(MessageType.BIND_CONTROLLER)
.pipe(
@EnricoPicci
EnricoPicci / mobile-object-server-4.ts
Created June 20, 2018 10:21
The core of the logic for MobileObjectServer
import {sockets} from './socket-io-observable';
import {SocketObs} from './socket-obs';
class MobileObjectServer {
private mobileObjectAdded = new Subject<{mobObj: MobileObject, mobObjId: string}>();
private mobileObjectRemoved = new Subject<string>();
public startSocketServer(httpServer: Server) {
sockets(httpServer, this.port).pipe(
export const readLinesObs = Observable.bindCallback(_readLines);
function _readLines(filePath: string, callback: (lines: Array<string>) => void) {
const lines = new Array<string>();
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
crlfDelay: Infinity
});
rl.on('line', (line: string) => {
lines.push(line);
});
@EnricoPicci
EnricoPicci / lambda-calculus-TW0-as-2-typed.ts
Last active April 23, 2019 20:35
lambda-calculus-TW0-as-2
type uF = (x: any) => any;
type NUMBER = (f: uF) => (x: any) => any;
const TWO: NUMBER = (f: uF) => (x: any) => f(f(x));
const f: uF = x => x + 1;
const x = 0;
const result = TWO(f)(x);
console.log(result) // 2
const TWO: NUMBER = f => x => f(f(x));
const f = x => x + 1;
const x = 0;
const result = TWO(f)(x);
console.log(result) // 2