/// <summary> /// Sends the <see cref="ServerInfoMessage"/> structure to the connected client. /// </summary> /// <param name="info">The info message to send.</param> /// <returns>True on success.</returns> public bool SendServerInfo(ServerInfoMessage info) { _packet.Reset((ushort)RoutingID.ServerInfo, 0); if (info.Write(_packet)) { _packet.FinalisePacket(); return(Add(_packet) > 0); } return(false); }
/// <summary> /// Sends the given <see cref="ServerInfoMessage"/> to the client. /// </summary> /// <param name="info">Details of the server to send to the client.</param> /// <remarks> /// Should always be send as the first message to the client. /// </remarks> public bool SendServerInfo(ServerInfoMessage info) { _serverInfo = info; const float secondsToMicroseconds = 1e6f; _secondsToTimeUnit = secondsToMicroseconds / (_serverInfo.TimeUnit != 0 ? _serverInfo.TimeUnit : 1.0f); if (Connected) { _packetLock.Lock(); try { _packet.Reset((ushort)RoutingID.ServerInfo, 0); if (info.Write(_packet)) { _packet.FinalisePacket(); _sendLock.Lock(); try { // Do not use collation buffer or compression for this message. if (_client != null && _client.Connected) { _client.GetStream().Write(_packet.Data, _packet.Cursor, _packet.Count); } return(true); } catch (System.IO.IOException) { _client.Close(); _client = null; } finally { _sendLock.Unlock(); } } } finally { _packetLock.Unlock(); } } return(false); }