@@ -76,16 +76,39 @@ func (p *Publisher) SendMessage(refereeMsg *state.Referee) {
76
76
if len (p .conns ) == 0 && ! p .connect () {
77
77
return
78
78
}
79
+
80
+ bytes , err := marshalRefereeMessage (refereeMsg )
79
81
for _ , conn := range p .conns {
80
- bytes , err := proto .Marshal (refereeMsg )
81
- if err != nil {
82
- log .Printf ("Could not marshal referee message: %v\n Error: %v" , refereeMsg , err )
83
- return
84
- }
85
82
_ , err = conn .Write (bytes )
86
83
if err != nil {
87
84
log .Println ("Could not write referee message:" , err )
88
85
p .disconnect ()
89
86
}
90
87
}
91
88
}
89
+
90
+ func marshalRefereeMessage (refereeMsg * state.Referee ) ([]byte , error ) {
91
+ bytes , err := proto .Marshal (refereeMsg )
92
+ if err != nil {
93
+ log .Printf ("Could not marshal referee message: %v\n Error: %v" , refereeMsg , err )
94
+ return nil , err
95
+ }
96
+
97
+ if len (bytes ) > maxDatagramSize {
98
+ log .Printf ("Referee message is too large (%d bytes) to send in one packet. Shortening message." , len (bytes ))
99
+
100
+ shortenedRefereeMsg := proto .Clone (refereeMsg ).(* state.Referee )
101
+ shortenedRefereeMsg .GameEvents = []* state.GameEvent {}
102
+ shortenedRefereeMsg .GameEventProposals = []* state.GameEventProposalGroup {}
103
+
104
+ bytes , err = proto .Marshal (shortenedRefereeMsg )
105
+ if err != nil {
106
+ log .Printf ("Could not marshal referee message: %v\n Error: %v" , shortenedRefereeMsg , err )
107
+ return nil , err
108
+ }
109
+
110
+ return bytes , nil
111
+ }
112
+
113
+ return bytes , nil
114
+ }
0 commit comments