private void SendTcpData(int clientId, Packet packet) { PineappleLogger.Log(LogType.INFO, $"{type} SendTcpData()"); packet.WriteLength(); server.Clients[clientId].Tcp.SendData(packet); }
public override void ReceiveCallback(IAsyncResult _result) { try { int _byteLength = stream.EndRead(_result); if (_byteLength <= 0) { if (IsServer == false) { Client.Disconnect(); } //TODO if server is true disconnect that client //Server.clients[id].Disconnect(); return; } byte[] _data = new byte[_byteLength]; Array.Copy(receiveBuffer, _data, _byteLength); receivedData.Reset(HandleData(_data)); // Reset receivedData if all data was handled stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null); } catch (Exception _ex) { PineappleLogger.Log(LogType.ERROR, $"Error receiving TCP data: {_ex}"); //Server.Clients[id].Disconnect(); } }
//private static UdpClient udpListener; public void Start(int port) { try { IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections(); foreach (var tcpi in tcpConnInfoArray) { if (tcpi.LocalEndPoint.Port == port) { throw new SocketException(); } } Port = port; IsRunning = true; PineappleLogger.Log(LogType.INFO, "Starting server..."); Initialize(); serverLooper.Start(); tcpListener = new TcpListener(IPAddress.Any, Port); tcpListener.Start(); tcpListener.BeginAcceptTcpClient(TCPConnectCallback, null); PineappleLogger.Log(LogType.INFO, $"Server started on port {Port}."); } catch (Exception e) { PineappleLogger.HandleException(e, false); } }
public void JoinLobby(int clientId, Packet packet) { try { string password = packet.ReadString(); int lobbyId = packet.ReadInt(); //bool result = serverHelper.JoinLobby(clientId, lobbyId, password); int tries = 0; while (serverHelper.JoinLobby(clientId, lobbyId, password) == false) { tries++; if (tries >= 3) { throw new Exception("Too many tries!"); } Thread.Sleep(100); } } catch (Exception ex) { PineappleLogger.HandleException(ex, true, "ServerHandle - JoinLobby()"); } }
public void StartOnline(bool simulate = false) { if (Players.Count <= 0 || Server != null || Client != null) { PineappleLogger.HandleException(new Exception("GameController - StartOnline()"), true); } GameType = GameType.CLIENT; if (simulate == false) { Client = new Client(this); int tries = 0; while (Client.IsConnected == false) { tries++; if (tries >= 10) { throw new Exception($"GameController - StartOnline()"); } Thread.Sleep(100); } } }
public void StartServer(bool simulate = false) { if (Server == null || Client != null) { PineappleLogger.HandleException(new Exception("GameController - StartServer()"), true); } GameType = GameType.SERVER; }
public void AssignPlayerToClient(Player player) { if (this.Player != null) { PineappleLogger.HandleException(new Exception("Client - AssignPlayerToClient"), true); } this.Player = player; }
public void Disconnect() { if (IsServer == false) { Tcp.Socket.Close(); //udp.socket.Close(); PineappleLogger.Log(LogType.DEBUG, "Disconnected from server."); } }
public void WelcomeClient(int clientId, string msg = "Welcome to the Server!") { PineappleLogger.Log(LogType.INFO, $"{type} Welcome Client: {clientId}"); using (Packet packet = new Packet((int)PacketType.Welcome)) { packet.Write(msg); packet.Write(clientId); SendTcpData(clientId, packet); } }
public void StartOffline(bool simulate = false) { if (Players.Count <= 0 || Server != null || Client != null) { PineappleLogger.HandleException(new Exception("GameController - StartOffline()"), true); } Enemies = new List <EnemyController>(); GameType = GameType.LOCAL; Enemies.Add(new EnemyController(this)); }
public static void QueueClient(TcpClient client) { if (client == null) { PineappleLogger.Log(LogType.DEBUG, "ClientConnectQueue - Null"); return; } lock (clientQueue) { clientQueue.Enqueue(client); } }
public void CreateLobby(int clientId, Packet packet) { try { string password = packet.ReadString(); bool join = packet.ReadBool(); bool result1 = serverHelper.CreateLobby(clientId, password, join); } catch (Exception ex) { PineappleLogger.HandleException(ex, true, "ServerHandle - CreateLobby()"); } }
/// <summary>Sets an action to be executed on the main thread.</summary> /// <param name="_action">The action to be executed on the main thread.</param> public static void ExecuteOnMainThread(Action _action) { if (_action == null) { PineappleLogger.Log(LogType.DEBUG, "ExecuteOnMainThread - Null"); return; } lock (executeOnMainThread) { executeOnMainThread.Add(_action); actionToExecuteOnMainThread = true; } }
public void SendData(Packet _packet) { try { if (Socket != null) { //PineappleLogger.PineappleLog(LogType.INFO, Socket.Client.LocalEndPoint.ToString() + " " + Socket.Client.RemoteEndPoint.ToString()); stream.BeginWrite(_packet.ToArray(), 0, _packet.Length(), null, null); } } catch (Exception _ex) { PineappleLogger.HandleException(_ex, true); } }
public void WelcomeReceived(int clientId, Packet packet) { try { Client client = server.Clients[clientId]; Player clientPlayer = (Player)serializer.Deserialize(packet.ReadBytes(packet.UnreadLength())); client.IsConnected = true; client.AssignPlayerToClient(clientPlayer); } catch (Exception ex) { PineappleLogger.HandleException(ex, true, "ServerHandle - WelcomeReceived()"); } }
public void CombatCalc(int clientId, Packet packet) { try { string packetId = packet.ReadString(); int length = packet.ReadInt(); int order = packet.ReadInt(); byte[] data = packet.ReadBytes(packet.UnreadLength()); serverHelper.CombatCalc(clientId, packetId, length, order, data); } catch (Exception ex) { PineappleLogger.HandleException(ex, true, "ServerHandle - CombatCalc()"); } }
/// <summary>Handles new TCP connections.</summary> private void TCPConnectCallback(IAsyncResult _result) { if (IsRunning == false) { PineappleLogger.Log(LogType.WARNING, "Server - TCPConnectCallback - IsRunning == false"); return; } TcpClient socket = tcpListener.EndAcceptTcpClient(_result); tcpListener.BeginAcceptTcpClient(TCPConnectCallback, null); PineappleLogger.Log(LogType.INFO, $"Incoming connection from {socket.Client.RemoteEndPoint}..."); ThreadManager.QueueClient(socket); //PineappleLogger.PineappleLog(LogType.WARNING, $"{_client.Client.RemoteEndPoint} failed to connect: Server full!"); }
public void Stop() { try { PineappleLogger.Log(LogType.WARNING, "Stopping server..."); IsRunning = false; ThreadManager.Stop(); serverLooper.Stop(); tcpListener.Stop(); Thread.Sleep(50); } catch (Exception e) { PineappleLogger.HandleException(e, true); } }
static void Main(string[] args) { try { //Console.WriteLine("Hello World!"); //new PineappleLib.Networking.Server().Start(5, 55555); //var client = new ClientLocal(); //client.Init(); } catch (Exception e) { PineappleLogger.HandleException(e, false); } Console.ReadKey(); }
public void WelcomeFromServer(Packet packet) { try { string msg = packet.ReadString(); int id = packet.ReadInt(); PineappleLogger.Log(LogType.INFO, $"{type} [{client.Id}] I received welcome from server my new ID is: {id}"); client.IsConnected = true; client.Id = id; client.ClientSender.WelcomeReceived(); } catch (Exception ex) { PineappleLogger.HandleException(ex, true, "ClientHandle - WelcomeFromServer()"); } }
public void WriteReadTest() { string date = DateTime.Now.ToString("yyyy_MM_dd"); string path = Path.Combine("C:/Utveckling/ProjectPineapple/PineappleServer/Logger", "Deploy.log"); if (File.Exists(path)) { File.Delete(path); } Assert.False(File.Exists(path)); PineappleLogger.CreateDeployLog(); Assert.True(File.Exists(path)); string content = PineappleReader.Read(path); Assert.Equal($"{date} - Deployed", content); }
protected override void ConnectCallback(IAsyncResult _result) { try { Socket.EndConnect(_result); if (!Socket.Connected) { return; } stream = Socket.GetStream(); receivedData = new Packet(); stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null); Client.IsConnected = true; } catch (Exception e) { PineappleLogger.HandleException(e, false); } }
private void SendTCPData(Packet _packet) { PineappleLogger.Log(LogType.INFO, $"{type} [{client.Id}] SendTCPData()"); _packet.WriteLength(); client.Tcp.SendData(_packet); }