-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathReplayClientLog.fsx
79 lines (61 loc) · 2.82 KB
/
ReplayClientLog.fsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#r "c:/Users/jerem/.nuget/packages/newtonsoft.json/12.0.3/lib/netstandard2.0/Newtonsoft.Json.dll"
#r "c:/Users/jerem/.nuget/packages/fable.jsonconverter/1.0.8/lib/net45/Fable.JsonConverter.dll"
#r "c:/Users/jerem/.nuget/packages/fable.remoting.json/2.6.0/lib/netstandard2.0/Fable.Remoting.Json.dll"
#r "c:/Users/jerem/.nuget/packages/fable.core/3.1.5/lib/netstandard2.0/Fable.Core.dll"
#r "c:/Development/packages/FSharp.Data/lib/net45/FSharp.Data.dll"
#I "c:/Development/crazy/src/Shared/"
#load "Shared.fs" "SharedGame.fs"
#load "../Server/SharedServer.fs"
open System
open Shared
open Fable
open Fable.Remoting.Json
open Newtonsoft.Json
open FSharp.Data
//type Envelope =
// { data: Data }
//and Data =
// { data: Notif [] }
//and Notif =
// { channel: string
// data: NotifData[] }
//and NotifData =
// { args: Args}
//and Args =
// { version: int
// events: Board.Event []}
let s =
let js = Newtonsoft.Json.JsonSerializer()
js.Converters.Add (FableJsonConverter())
js
//let data =
// use json = IO.File.OpenText @"C:\Users\jerem\Downloads\gamelog.json"
// s.Deserialize<Envelope>(new JsonTextReader(json))
let events =
Http.RequestStream("http://localhost/convert3.php")
|> fun stream -> s.Deserialize<Board.Event []>(new JsonTextReader(new IO.StreamReader(stream.ResponseStream)))
|> Array.toList
|> List.takeWhile(function
| Board.Played(_, Player.CardPlayed(PlayBribe _)) -> false
| _ -> true )
let state = List.fold Board.evolve Board.initialState events
//let es = Board.decide (Board.Play("63097441", Player.PlayCard(PlayBribe(Parcel(Axe(-1,1))) ))) state
let es = Board.decide (Board.Play("2323673", Player.PlayCard(PlayBribe(Parcel(Axe(2,1))) ))) state
//let events =
// data.data.data
// |> Array.collect(fun d -> if d.channel.StartsWith @"/table/" then d.data else [||])
// |> Array.filter (fun d -> if isNull(box d) || isNull (box d.args) || isNull(d.args.events) then false else d.args.version < 200 )
// |> Array.collect(fun d -> d.args.events)
// |> Array.toList
//let start = Board.Start { Players = [ Color.Blue, "88302919", "TEMPVSCANIS"; Color.Yellow, "88218789", "Ryochou"];
// Goal = Common 27
// Undo = FullUndo
// UseGameOver = false}
//let started = Board.decide start Board.initialState
//let startedBoard = List.fold Board.evolve Board.initialState started |> SharedServer.privateUndoableBoard ""
//let state =
// List.fold Board.evolve startedBoard (SharedServer.privateEvents "" events)
//let cmd = Board.Play("87747553", Player.Move { Direction = Down; Destination = Crossroad(Axe(-2,2), CRight)})
//let result = Board.decide cmd state
//let finalState =
// List.fold Board.evolve state ( SharedServer.privateEvents "" result)