public static void WriteOpcode(this NetOutgoingMessage msg, NetOpcodes oc) { msg.Write((byte)oc); }
// Handles a relevent data packet public void HandlePacket(NetOpcodes oc, NetIncomingMessage msg) { GameClient client = _netManager.ClientList[msg.SenderConnection]; switch (oc) { case NetOpcodes.StationConfirm: { if (_clientWaiting[client]) _clientWaiting[client] = false; else Debug.LogWarning("The client download status is out of sync with the server."); } break; case NetOpcodes.StationFailure: { _clientFails[client]++; string ip = client.NetConnection.RemoteEndPoint.Address.ToString(); Debug.LogWarning("Client " + ip + " has had " + _clientFails[client] + " failed download(s)."); if (_clientFails[client] < 3) { Debug.LogWarning("Restarting download for client " + ip + "."); _clientWaiting[client] = true; _clientStatus[client] = 0; NetOutgoingMessage mes = _netManager.CreateMessage(); mes.WriteOpcode(NetOpcodes.StationSend); mes.Write(_stationData.Count); mes.Write(_totalLength); mes.Write(_checksum); _netManager.SendToClient(mes, client.NetConnection); } else { Debug.LogError("Client " + ip + " has had 3 failed downloads. Disconnecting client."); _clientFails.Remove(client); _clientStatus.Remove(client); _clientWaiting.Remove(client); client.NetConnection.Disconnect("Your download of the station files has failed too many times."); } } break; default: Debug.LogWarning("StationProvider was passed an incorrect type of message: " + oc); break; } }