protected void Initialize(IPEndPoint serverEndpoint) { m_groupId = MySandboxGame.ConfigDedicated.GroupID; ServerStarted = false; HostName = "Dedicated server"; SyncLayer.RegisterMessageImmediate <ConnectedClientDataMsg>(this.OnConnectedClient, MyMessagePermissions.ToServer | MyMessagePermissions.FromServer); SyncLayer.RegisterMessageImmediate <AllMembersDataMsg>(OnAllMembersData, MyMessagePermissions.ToServer | MyMessagePermissions.FromServer); m_membersCollection = new MemberCollection(m_members); SetMemberLimit(MaxPlayers); SteamSDK.Peer2Peer.SessionRequest += Peer2Peer_SessionRequest; SteamSDK.Peer2Peer.ConnectionFailed += Peer2Peer_ConnectionFailed; ClientLeft += MyDedicatedServer_ClientLeft; SteamSDK.SteamServerAPI.Instance.GameServer.ServersConnected += GameServer_ServersConnected; SteamSDK.SteamServerAPI.Instance.GameServer.ServersConnectFailure += GameServer_ServersConnectFailure; SteamSDK.SteamServerAPI.Instance.GameServer.ServersDisconnected += GameServer_ServersDisconnected; SteamSDK.SteamServerAPI.Instance.GameServer.PolicyResponse += GameServer_PolicyResponse; SteamSDK.SteamServerAPI.Instance.GameServer.ValidateAuthTicketResponse += GameServer_ValidateAuthTicketResponse; SteamSDK.SteamServerAPI.Instance.GameServer.UserGroupStatus += GameServer_UserGroupStatus; ServerStartResult startResult = SteamSDK.SteamServerAPI.Instance.GameServer.Start( serverEndpoint, (ushort)MySandboxGame.ConfigDedicated.SteamPort, SteamSDK.ServerMode.eServerModeAuthenticationAndSecure, MyFinalBuildConstants.APP_VERSION.ToString(), MyFakes.DEDICATED_SERVER_USE_SOCKET_SHARE); switch (startResult) { case ServerStartResult.PortAlreadyUsed: ServerInitError = "Error starting Steam dedicated server: Server port " + (ushort)MySandboxGame.ConfigDedicated.ServerPort + " already in use"; MyLog.Default.WriteLineAndConsole(ServerInitError); break; case ServerStartResult.UnknownError: ServerInitError = "Error starting Steam dedicated server"; MyLog.Default.WriteLineAndConsole(ServerInitError); break; } if (startResult != ServerStartResult.OK) { return; } // This has to be exact name of app like this to show in Server Browser SteamSDK.SteamServerAPI.Instance.GameServer.SetModDir(MyPerGameSettings.SteamGameServerGameDir); SteamSDK.SteamServerAPI.Instance.GameServer.ProductName = MyPerGameSettings.SteamGameServerProductName; SteamSDK.SteamServerAPI.Instance.GameServer.GameDescription = MyPerGameSettings.SteamGameServerDescription; SteamSDK.SteamServerAPI.Instance.GameServer.SetDedicated(true); string serverName = MySandboxGame.ConfigDedicated.ServerName; if (String.IsNullOrWhiteSpace(serverName)) { serverName = "Unnamed server"; } SteamSDK.SteamServerAPI.Instance.GameServer.SetServerName(serverName); SteamSDK.SteamServerAPI.Instance.GameServer.LogOnAnonymous(); SteamSDK.SteamServerAPI.Instance.GameServer.EnableHeartbeats(true); if (m_groupId != 0 && SteamServerAPI.Instance.GetAccountType(m_groupId) != AccountType.Clan) { MyLog.Default.WriteLineAndConsole("Specified group ID is invalid: " + m_groupId); } UInt32 ip = 0; UInt64 id = 0; int timeout = 100; while (ip == 0 && timeout > 0) { SteamSDK.SteamServerAPI.Instance.GameServer.RunCallbacks(); Thread.Sleep(100); timeout--; ip = SteamSDK.SteamServerAPI.Instance.GameServer.GetPublicIP(); id = SteamSDK.SteamServerAPI.Instance.GameServer.GetSteamID(); } MySandboxGame.Services.SteamService.UserId = id; if (ip == 0) { MyLog.Default.WriteLineAndConsole("Error: No IP assigned."); return; } var ipAddress = IPAddressExtensions.FromIPv4NetworkOrder(ip); ServerId = MySteam.Server.GetSteamID(); m_members.Add(ServerId); m_memberData.Add(ServerId, new MyConnectedClientData() { Name = "Server", IsAdmin = true }); SyncLayer.RegisterClientEvents(this); MyLog.Default.WriteLineAndConsole("Server successfully started"); MyLog.Default.WriteLineAndConsole("Product name: " + SteamSDK.SteamServerAPI.Instance.GameServer.ProductName); MyLog.Default.WriteLineAndConsole("Desc: " + SteamSDK.SteamServerAPI.Instance.GameServer.GameDescription); MyLog.Default.WriteLineAndConsole("Public IP: " + ipAddress.ToString()); MyLog.Default.WriteLineAndConsole("Steam ID: " + id.ToString()); ServerStarted = true; }
protected void Initialize(IPEndPoint serverEndpoint) { this.m_groupId = MySandboxGame.ConfigDedicated.GroupID; this.ServerStarted = false; this.HostName = "Dedicated server"; this.SetMemberLimit(this.MaxPlayers); MyGameService.Peer2Peer.SessionRequest += new Action <ulong>(this.Peer2Peer_SessionRequest); MyGameService.Peer2Peer.ConnectionFailed += new Action <ulong, string>(this.Peer2Peer_ConnectionFailed); base.ClientLeft += new Action <ulong, MyChatMemberStateChangeEnum>(this.MyDedicatedServer_ClientLeft); MyGameService.GameServer.PlatformConnected += new Action(this.GameServer_ServersConnected); MyGameService.GameServer.PlatformConnectionFailed += new Action <string>(this.GameServer_ServersConnectFailure); MyGameService.GameServer.PlatformDisconnected += new Action <string>(this.GameServer_ServersDisconnected); MyGameService.GameServer.PolicyResponse += new Action <sbyte>(this.GameServer_PolicyResponse); MyGameService.GameServer.ValidateAuthTicketResponse += new Action <ulong, JoinResult, ulong>(this.GameServer_ValidateAuthTicketResponse); MyGameService.GameServer.UserGroupStatusResponse += new Action <ulong, ulong, bool, bool>(this.GameServer_UserGroupStatus); string serverName = MySandboxGame.ConfigDedicated.ServerName; if (string.IsNullOrWhiteSpace(serverName)) { serverName = "Unnamed server"; } MyGameService.GameServer.SetServerName(serverName); MyGameService.Peer2Peer.SetServer(true); if (MyGameService.GameServer.Start(serverEndpoint, (ushort)MySandboxGame.ConfigDedicated.SteamPort, MyFinalBuildConstants.APP_VERSION.ToString())) { MyGameService.GameServer.SetModDir(MyPerGameSettings.SteamGameServerGameDir); MyGameService.GameServer.ProductName = MyPerGameSettings.SteamGameServerProductName; MyGameService.GameServer.GameDescription = MyPerGameSettings.SteamGameServerDescription; MyGameService.GameServer.SetDedicated(true); if (!string.IsNullOrEmpty(MySandboxGame.ConfigDedicated.ServerPasswordHash) && !string.IsNullOrEmpty(MySandboxGame.ConfigDedicated.ServerPasswordSalt)) { MyGameService.GameServer.SetPasswordProtected(true); this.IsPasswordProtected = true; } MyGameService.GameServer.LogOnAnonymous(); MyGameService.GameServer.EnableHeartbeats(true); if ((this.m_groupId != 0) && (MyGameService.GetServerAccountType(this.m_groupId) != MyGameServiceAccountType.Clan)) { MyLog.Default.WriteLineAndConsole("Specified group ID is invalid: " + this.m_groupId); } uint ip = 0; ulong serverId = 0UL; int num3 = 100; while ((ip == 0) && (num3 > 0)) { MyGameService.GameServer.Update(); Thread.Sleep(100); num3--; ip = MyGameService.GameServer.GetPublicIP(); serverId = MyGameService.GameServer.ServerId; } MyGameService.UserId = serverId; if (ip == 0) { MyLog.Default.WriteLineAndConsole("Error: No IP assigned."); } else { IPAddress address = IPAddressExtensions.FromIPv4NetworkOrder(ip); base.ServerId = MyGameService.GameServer.ServerId; base.ReplicationLayer.SetLocalEndpoint(new EndpointId(MyGameService.GameServer.ServerId)); this.m_members.Add(base.ServerId); MyMultiplayerBase.MyConnectedClientData data = new MyMultiplayerBase.MyConnectedClientData { Name = MyTexts.GetString(MySpaceTexts.ChatBotName), IsAdmin = true }; this.MemberDataAdd(base.ServerId, data); base.SyncLayer.RegisterClientEvents(this); MyLog.Default.WriteLineAndConsole("Server successfully started"); MyLog.Default.WriteLineAndConsole("Product name: " + MyGameService.GameServer.ProductName); MyLog.Default.WriteLineAndConsole("Desc: " + MyGameService.GameServer.GameDescription); MyLog.Default.WriteLineAndConsole("Public IP: " + address.ToString()); MyLog.Default.WriteLineAndConsole("Steam ID: " + serverId.ToString()); this.ServerStarted = true; } } }