@@ -76,16 +76,39 @@ func (p *Publisher) SendMessage(refereeMsg *state.Referee) {
7676 if len (p .conns ) == 0 && ! p .connect () {
7777 return
7878 }
79+
80+ bytes , err := marshalRefereeMessage (refereeMsg )
7981 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- }
8582 _ , err = conn .Write (bytes )
8683 if err != nil {
8784 log .Println ("Could not write referee message:" , err )
8885 p .disconnect ()
8986 }
9087 }
9188}
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