public void AddOutputData(ServerCore.Data outputData) { lock (outputBuffer) { outputBuffer.Add(outputData); dataForSending.Set(); } }
public IWorldActionExecutor GetWorld(ServerCore.Data data) { int index = -1; if (!IsUserLogged(data.clientSocket, out index)) { return(null); } return(loggedBuffer[index].wold); }
public bool ExecuteAction(ref ServerCore.Data inputdata) { int action = inputdata.action[1] * 257 + inputdata.action[2]; Actions act = (Actions)action; #region SetPosition if (act == Actions.SetPosition) { Vector3 pos = new Vector3(); if (AreCoordinates(inputdata.parameters, out pos)) { this.position = pos; } } #endregion #region GetPosition else if (act == Actions.GetPosition) { inputdata.parameters = position.ToString(); return(true); } #endregion #region GetPlayersPosition else if (act == Actions.GetPlayersPosition) { int index = -1; String[] users = Accounts.GetInstance().GetLoggedUsers(Accounts.GetInstance().SocketToUsername(inputdata.clientSocket), out index); List <String> players = new List <String>(); for (int t = 0; t < users.Length; t++) { IWorldActionExecutor world = Accounts.GetInstance().GetWorld(users[t]); if (world != null && t != index) { players.AddRange(world.GetPosition().ToString()); } } inputdata.parameters = players.ToArray(); return(true); } #endregion return(false); }
private void SendDataToClient(ServerCore.Data od) { if (od.clientSocket.Connected) { NetworkStream networkStream = new NetworkStream(od.clientSocket, false); StreamWriter streamWriter = new StreamWriter(networkStream); List <char> packet = new List <char>(); packet.Add(od.priority); packet.Add(od.action[0]); packet.Add(od.action[1]); packet.Add(od.action[2]); packet.Add(od.flags); for (int t = 0; t < od.parameters.Length; t++) { char[] par = od.parameters[t].ToCharArray(); for (int u = 0; u < par.Length; u++) { packet.Add(par[u]); } packet.Add('$'); } try { streamWriter.WriteLine(packet.ToArray()); streamWriter.Flush(); streamWriter.Close(); } catch { //uzivatel se odpojil, data se zahodi ... } } }
private void AcceptClient(IAsyncResult asyn) { allDone.Set(); Socket listener = (Socket)asyn.AsyncState; Socket clientsocket = listener.EndAccept(asyn); ServerCore.Data data = new ServerCore.Data(); data.clientSocket = clientsocket; while (clientsocket.Connected) { NetworkStream networkStream = new NetworkStream(clientsocket, false); StreamReader streamReader = new StreamReader(networkStream); try { if (streamReader.EndOfStream) { break; } } catch { break; } string line = streamReader.ReadLine(); #region parsing packet if (line.Length > 4) { data.priority = line[0]; data.action = new char[3] { line[1], line[2], line[3] }; data.flags = line[4]; line = line.Substring(5); List <String> parameters = new List <string>(); while (true) { int parindex = line.IndexOf("$"); if (parindex == -1) { break; } parameters.Add(line.Substring(0, parindex)); line = line.Substring(parindex + 1); } data.parameters = parameters.ToArray(); lock (dataBuffer) { dataBuffer.Add(data); } } #endregion } users--; clientsocket.Close(); }
public bool ExecuteAction(ref ServerCore.Data inputdata) { Actions action = (Actions)(inputdata.action[1] * 257 + inputdata.action[2]); #region GetLoggedUsers if (action == Actions.GetLoggedUsers) { inputdata.parameters = GetLoggedUsers(SocketToUsername(inputdata.clientSocket)); } #endregion #region GetAllChat else if (action == Actions.GetAllChat) { inputdata.parameters = GetAllChat(GetIndexOfUser(inputdata.clientSocket)); } #endregion #region SendChatMessage else if (action == Actions.SendChatMessage) { if (inputdata.parameters.Length >= 1) { SendChatMessage(SocketToUsername(inputdata.clientSocket), inputdata.parameters[0]); return(false); } else { inputdata.parameters = ServerCore.Data.NOT_SUPPORTED; } } #endregion #region Logout else if (action == Actions.Logout) { inputdata.parameters = Logout(inputdata.clientSocket); inputdata.flags = 'T'; } #endregion #region Login else if (action == Actions.Login) { if (inputdata.parameters.Length >= 2) { inputdata.parameters = Login(inputdata.clientSocket, inputdata.parameters[0], inputdata.parameters[1]); } else { inputdata.parameters = ServerCore.Data.NOT_SUPPORTED; } } #endregion #region SendMessage else if (action == Actions.SendMessage) { if (inputdata.parameters.Length >= 2) { if (SendMessage(SocketToUsername(inputdata.clientSocket), inputdata.parameters[0], inputdata.parameters[1])) { return(false); } else { inputdata.parameters = new string[] { "NotLogged" }; } } } #endregion return(true); }