/** * ADMIN ONLY * Merges a dictionary of objects into the store * TODO: check that the client is an admin * */ /* * public void Merge(MClient c, MNetMessage m) * { * Dictionary<string, MServerObject> Results = null; * try * { * Results = JsonConvert.DeserializeObject<Dictionary<string, MServerObject>>(m.Payload); * } * catch (Exception e) * { * MNetMessage mr = new MNetMessage(1, "SERVER", MNetMessage.MERGE, "FAILED: " + e.Message); * Send(c, "Message", mr.Serialize()); * } * finally * { * if (Results != null) * { * foreach (KeyValuePair<string, MServerObject> kv in Results) * { * AddToWorld(kv.Value); * } * } * MNetMessage mr = new MNetMessage(1, "SERVER", MNetMessage.MERGE, "SUCCESS"); * Send(c, "Message", mr.Serialize()); * } * } */ public void ConnectToMASSIVE(MClient c, MNetMessage m) { c.State = MClient.STATE_CONNECTOWORLD; MNetMessage mr = new MNetMessage(); mr.Command = MNetMessage.CONNECTTOMASSIVE; mr.UserID = c.Account.UserID; Send(c, "Message", mr.Serialize()); ClientConnected?.Invoke(this, new ServerEvent("Connected to MASSIVE:" + c.ToString())); }
//log in registered player //player sends updatedetails message to register public void LoginRequest(MClient c, MNetMessage m) { if (MassiveConnections.Count >= MAXCONNECTIONS) { DisconnectClient(c.connection, "Maximum Connections exceded"); return; } MLoginMessageRequest mlir = MLoginMessageRequest.Deserialize <MLoginMessageRequest>(m.Payload); //check database //if password matches, continue //if not, send failed message IPEndPoint ipe = (IPEndPoint)c.connection.ConnectionInfo.RemoteEndPoint; string s = ipe.Address + ":" + ipe.Port; c.Account.ClientIP = s; if (c.Account.UserID == null) { c.Account.UserID = m.UserID; } _DataBase.UpdatePlayerIP(c.Account); _DataBase.UpdatePlayerUsage(c.Account); MUserAccount mu = _DataBase.GetPlayerByEmail(mlir.Email, mlir.Password); if (mu == null) { MNetMessage mli = new MNetMessage(); mli.Command = MNetMessage.ERROR; mli.Payload = "User not found. Building Disabled. Register User and Login again."; Send(c, "Message", mli.Serialize()); } else { MNetMessage mli = new MNetMessage(); mli.Command = MNetMessage.LOGIN; mli.UserID = mu.UserID; mli.Payload = mu.Serialize(); Send(c, "Message", mli.Serialize()); c.Account = mu; } ClientLoggedIn?.Invoke(this, new ServerEvent("Logged In:" + c.ToString())); }
private void HandleConnection(Connection connection) { IPEndPoint ipe = (IPEndPoint)connection.ConnectionInfo.RemoteEndPoint; //string s = connection.ConnectionInfo.RemoteIPEndPoint.Address + ":" + connection.ConnectionInfo.RemoteIPEndPoint.Port; string s = ipe.Address + ":" + ipe.Port; if ((ipe.Address.ToString() == ServerIPAddress) && (ipe.Port == ServerPort)) { return; } MClient c = new MClient(); c.State = MClient.STATE_CONNECTING; c.connection = connection; c.Address = ipe.Address; c.Port = ipe.Port; c.Account.ClientIP = ipe.Address.ToString(); MassiveConnections.Add(c); if (ClientConnected != null) { ServerEvent se = new ServerEvent("CONNECTED"); se.Client = c; ClientConnected(this, se); } Log("Connected:" + c.ToString(), UTILITY); MNetMessage m = new MNetMessage(); int Count = MassiveConnections.Count; if (Count < MAXCONNECTIONS) { m.Command = MNetMessage.READY; m.UserID = MNetMessage.SERVER; Send(c, "Message", m.Serialize()); } else { DisconnectClient(connection, "Maximum Connections Reached. Please try a different server, or come back later."); } }
private void HandleConnectionClosed(Connection connection) { //IPEndPoint ipe = (IPEndPoint)connection.ConnectionInfo.RemoteEndPoint; //string s = ipe.Address + ":" + ipe.Port; MClient ToRemove = null; foreach (MClient m in MassiveConnections) { if (m.connection == connection) { ToRemove = m; } } _DataBase.RemoveUserFromUniverse(ToRemove.Account.UserID); //CurrentUniverse.Cleanup(ToRemove.Account.UserID); if (ToRemove != null) { ToRemove.Account.LastActivity = DateTime.Now; ToRemove.Save(); MassiveConnections.Remove(ToRemove); } if (ClientDisconnected != null) { ServerEvent se = new ServerEvent("DISCONNECTED"); ClientDisconnected(this, se); } MNetMessage mn = new MNetMessage(); mn.Command = MNetMessage.LOGGEDOUT; mn.UserID = ToRemove.Account.UserID; SendToAllClients(ToRemove, mn.Serialize()); Log("Disconnected:" + ToRemove.ToString(), UTILITY); }