Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-WIC-Cnf
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
3
Issues
3
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
CommunityXG
OpenXG-WIC-Cnf
Commits
a5debe6d
Commit
a5debe6d
authored
Jun 04, 2020
by
Elf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加卫星的代码,增加卫星的例子
parent
d80238b2
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
774 additions
and
4 deletions
+774
-4
bishe-cloud-center/src/main/java/top/ninwoo/cloudcenter/service/impl/CloudServiceImpl.java
...top/ninwoo/cloudcenter/service/impl/CloudServiceImpl.java
+1
-0
bishe-test/pom.xml
bishe-test/pom.xml
+6
-0
bishe-test/src/test/java/top/ninwoo/BisheTests.java
bishe-test/src/test/java/top/ninwoo/BisheTests.java
+128
-4
bishe-weixingsim/pom.xml
bishe-weixingsim/pom.xml
+24
-0
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/entity/SimData.java
...m/src/main/java/top/ninwoo/weixingsim/entity/SimData.java
+36
-0
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/entity/WeiXingData.java
...c/main/java/top/ninwoo/weixingsim/entity/WeiXingData.java
+31
-0
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/Toponet.java
.../src/main/java/top/ninwoo/weixingsim/service/Toponet.java
+53
-0
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/Weixing.java
.../src/main/java/top/ninwoo/weixingsim/service/Weixing.java
+138
-0
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/impl/ToponetImpl.java
.../java/top/ninwoo/weixingsim/service/impl/ToponetImpl.java
+110
-0
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/impl/WeixingImpl.java
.../java/top/ninwoo/weixingsim/service/impl/WeixingImpl.java
+246
-0
pom.xml
pom.xml
+1
-0
No files found.
bishe-cloud-center/src/main/java/top/ninwoo/cloudcenter/service/impl/CloudServiceImpl.java
View file @
a5debe6d
...
...
@@ -23,6 +23,7 @@ public class CloudServiceImpl implements CloudService {
private
static
final
String
ADJUST_CLUSTER
=
"/adjustCluster"
;
private
static
final
String
SEND_LOGICTOPO
=
"/sendLogicTopo"
;
private
static
final
String
ADJUST_LOGICTOPO
=
"/adjustLogicTopo"
;
private
static
final
String
ADJUST_LOGICTOPO_BYTOPO
=
"/adjustLogicTopoBytopo"
;
private
static
final
String
DROP_DOCKER_NETWORK
=
"/dropDockerNetwork?clusterId={clusterId}&appName={appName}&ipList={ipList}"
;
private
static
final
String
CANCEL_DROP_DOCKER_NETWORK
=
"/cancelDropDockerNetwork?clusterId={clusterId}&appName={appName}&ipList={ipList}"
;
private
static
final
String
REMOTE_IP_LIST_BY_APPNAME
=
"/getIpListByAppName?clusterId={clusterId}&appName={appName}"
;
...
...
bishe-test/pom.xml
View file @
a5debe6d
...
...
@@ -35,6 +35,12 @@
<artifactId>
influxdb-java
</artifactId>
<version>
2.9
</version>
</dependency>
<dependency>
<groupId>
top.ninwoo
</groupId>
<artifactId>
bishe-weixingsim
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<plugins>
...
...
bishe-test/src/test/java/top/ninwoo/BisheTests.java
View file @
a5debe6d
...
...
@@ -10,8 +10,13 @@ import top.ninwoo.bishe.starter.service.ClusterService;
import
top.ninwoo.bishe.starter.service.NetworkService
;
import
top.ninwoo.common.entity.*
;
import
top.ninwoo.client.BisheTestMain
;
import
top.ninwoo.weixingsim.entity.SimData
;
import
top.ninwoo.weixingsim.entity.WeiXingData
;
import
top.ninwoo.weixingsim.service.impl.ToponetImpl
;
import
top.ninwoo.weixingsim.service.impl.WeixingImpl
;
import
javax.annotation.Resource
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -112,6 +117,12 @@ public class BisheTests {
}
}
//改变集群拓扑配置
private
boolean
adjustCluster
(
List
<
SeparatedClusterConfig
>
configs
)
{
boolean
b
=
clusterService
.
adjustClusterToEdgeNode
(
configs
);
return
b
;
}
//测试逻辑网路
@Test
public
void
test1
()
{
...
...
@@ -174,6 +185,7 @@ public class BisheTests {
clusterService
.
sendClusterConfigToEdgeNode
(
clusterConfigs
);
//下发逻辑拓扑
clusterService
.
sendLogicTopoToEdgeNode
(
clusterConfigs
);
//改变逻辑拓扑
...
...
@@ -184,13 +196,125 @@ public class BisheTests {
{
1
,
1
,
1
,
0
}};
topo
.
setTopology
(
newtopology
);
//下发修改后的逻辑拓扑
clusterService
.
adjustLogicTopoToEdgeNode
(
clusterConfigs
);
}
//改变集群拓扑配置
private
boolean
adjustCluster
(
List
<
SeparatedClusterConfig
>
configs
)
{
boolean
b
=
clusterService
.
adjustClusterToEdgeNode
(
configs
);
return
b
;
// 测试初始化设置
@Test
public
void
test2
()
throws
IllegalAccessException
,
InterruptedException
{
//从文本中获取卫星的数据
WeixingImpl
wx
=
new
WeixingImpl
();
ToponetImpl
tp
=
new
ToponetImpl
();
SimData
sd
=
new
SimData
();
File
file
=
new
File
(
"C:\\WorkSpace\\test\\topusim_1.txt"
);
List
<
WeiXingData
>
wxData
=
wx
.
iniTopo
(
file
);
int
[][]
toponet
=
tp
.
getTopology
(
wxData
,
sd
);
ArrayList
<
SeparatedClusterConfig
>
clusterConfigs
=
new
ArrayList
<>();
SeparatedClusterConfig
separatedClusterConfig
=
new
SeparatedClusterConfig
();
List
<
ContainerDescription
>
cds
=
new
ArrayList
<>();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig
.
setEdgeNodeId
(
"192.168.190.135:8081"
);
ClusterConfig
clusterConfig
=
new
ClusterConfig
();
clusterConfig
.
setId
(
11111
l
);
clusterConfig
.
setOwner
(
"joliu"
);
//创建容器
for
(
int
k
=
0
;
k
<
wxData
.
size
();
k
++)
{
ContainerDescription
containerDescription
=
new
ContainerDescription
();
containerDescription
.
setMode
(
"normal"
);
containerDescription
.
setReplicas
(
1
);
DockerContainer
container
=
new
DockerContainer
();
container
.
setName
(
wxData
.
get
(
k
).
getName
());
container
.
setCommand
(
"sh"
);
container
.
setImage
(
"joliu/networktest"
);
containerDescription
.
setDockerContainer
(
container
);
cds
.
add
(
containerDescription
);
}
clusterConfig
.
setDockers
(
cds
);
NetworkTopology
topo
=
new
NetworkTopology
();
topo
.
setAppNames
(
tp
.
getAppNames
(
wxData
));
// 这个参数好像没啥用
topo
.
setTopologyId
(
11
);
topo
.
setTopology
(
toponet
);
clusterConfig
.
setTopology
(
topo
);
separatedClusterConfig
.
setClusterConfig
(
clusterConfig
);
clusterConfigs
.
add
(
separatedClusterConfig
);
clusterService
.
sendClusterConfigToEdgeNode
(
clusterConfigs
);
//下发逻辑拓扑
clusterService
.
sendLogicTopoToEdgeNode
(
clusterConfigs
);
}
//测试连续传输
@Test
public
void
test3
()
throws
IllegalAccessException
,
InterruptedException
{
ArrayList
<
SeparatedClusterConfig
>
clusterConfigs
=
new
ArrayList
<>();
SeparatedClusterConfig
separatedClusterConfig
=
new
SeparatedClusterConfig
();
List
<
ContainerDescription
>
cds
=
new
ArrayList
<>();
// TODO: 这个ID应该是从借口获取的
separatedClusterConfig
.
setEdgeNodeId
(
"192.168.190.135:8081"
);
ClusterConfig
clusterConfig
=
new
ClusterConfig
();
clusterConfig
.
setId
(
11111
l
);
clusterConfig
.
setOwner
(
"joliu"
);
//从文本中获取卫星的数据
WeixingImpl
wx
=
new
WeixingImpl
();
ToponetImpl
tp
=
new
ToponetImpl
();
SimData
sd
=
new
SimData
();
//tp.delHistory();
File
file
=
new
File
(
"C:\\WorkSpace\\test\\topusim_1.txt"
);
List
<
WeiXingData
>
wxData
=
wx
.
iniTopo
(
file
);
int
[][]
toponet
=
tp
.
getTopology
(
wxData
,
sd
);
//创建容器
for
(
int
k
=
0
;
k
<
wxData
.
size
();
k
++)
{
ContainerDescription
containerDescription
=
new
ContainerDescription
();
containerDescription
.
setMode
(
"normal"
);
containerDescription
.
setReplicas
(
1
);
DockerContainer
container
=
new
DockerContainer
();
container
.
setName
(
wxData
.
get
(
k
).
getName
());
container
.
setCommand
(
"sh"
);
container
.
setImage
(
"joliu/networktest"
);
containerDescription
.
setDockerContainer
(
container
);
cds
.
add
(
containerDescription
);
}
clusterConfig
.
setDockers
(
cds
);
NetworkTopology
topo
=
new
NetworkTopology
();
topo
.
setAppNames
(
tp
.
getAppNames
(
wxData
));
// 这个参数好像没啥用
topo
.
setTopologyId
(
11
);
topo
.
setTopology
(
toponet
);
clusterConfig
.
setTopology
(
topo
);
separatedClusterConfig
.
setClusterConfig
(
clusterConfig
);
clusterConfigs
.
add
(
separatedClusterConfig
);
clusterService
.
sendClusterConfigToEdgeNode
(
clusterConfigs
);
//下发逻辑拓扑
clusterService
.
sendLogicTopoToEdgeNode
(
clusterConfigs
);
for
(
int
i
=
1
;
;
i
++)
{
Thread
.
sleep
(
2000
);
int
time
=
i
*
sd
.
getJiange
();
List
<
WeiXingData
>
changetp
=
wx
.
changeTopo
(
wxData
,
time
);
topo
.
setTopology
(
tp
.
getTopology
(
changetp
,
sd
));
//下发修改后逻辑拓扑
clusterService
.
adjustLogicTopoToEdgeNode
(
clusterConfigs
);
}
}
}
bishe-weixingsim/pom.xml
0 → 100644
View file @
a5debe6d
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
bishe
</artifactId>
<groupId>
top.ninwoo
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
bishe-weixingsim
</artifactId>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
1.18.10
</version>
<scope>
provided
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/entity/SimData.java
0 → 100644
View file @
a5debe6d
package
top.ninwoo.weixingsim.entity
;
import
lombok.Data
;
/**
* @description 储存有关星间链路的数据
*/
@Data
public
class
SimData
{
//时间间隔,默认值为10
private
int
jiange
=
10
;
//todo:这里因该预设默认值
//星间链路带宽
private
double
bandwidth
=
10
e9
;
//加性高斯白噪声(AWGN)
private
double
n0
=
5
*
10
e
-
15
;
//信号发射功率
private
double
pt
=
5
*
10
e3
;
//信号发射增益系数
private
double
gt
=
52.5
;
//信号接收增益系数
private
double
gr
=
37.5
;
//载波波长
private
double
lamda
=
0.05
;
//星间信道容量最低容限
private
double
c0
=
10
e9
;
public
double
ptGtGr
(){
return
pt
*
gt
*
gr
;
}
public
double
n0B
(){
return
n0
*
bandwidth
;
}
}
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/entity/WeiXingData.java
0 → 100644
View file @
a5debe6d
package
top.ninwoo.weixingsim.entity
;
import
lombok.Data
;
@Data
public
class
WeiXingData
{
//卫星的名字,之后可能作为增删改查的唯一标识
private
String
name
;
//地心距离
private
Float
high
;
//根据高度计算得出,规定(默认)逆时针为正方向
private
Double
speed
;
private
Boolean
tag
=
true
;
//测试用一个角度作为初始相位,后期需要三个角度来算出xyz坐标轴
private
Float
alpha
;
private
Float
beta
;
private
Float
gamma
;
//xyz坐标轴数据
private
Double
xaxis
;
private
Double
yaxis
;
private
Double
zaxis
;
//卫星的序列号
private
Integer
index
;
//运行时间
private
Integer
lastime
=
0
;
@Override
public
String
toString
(){
return
"卫星名是:"
+
name
+
";高度是:"
+
high
+
"\n"
+
"x轴坐标:"
+
xaxis
+
"\n"
+
"y轴坐标:"
+
yaxis
+
"\n"
+
"z轴坐标:"
+
zaxis
;
}
}
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/Toponet.java
0 → 100644
View file @
a5debe6d
package
top.ninwoo.weixingsim.service
;
import
top.ninwoo.weixingsim.entity.SimData
;
import
top.ninwoo.weixingsim.entity.WeiXingData
;
import
java.util.List
;
/**
* 拓扑网络的服务
* 根据Weixing的服务所得到的List转化为二维数组
*/
public
interface
Toponet
{
/**
* @param weiXingDataList WeiXingData对象
* @return 拓扑图的元素
* @description 得到生成拓扑网络中的所有元素名字,需要自动生成所需的ovs,和docker容器一一对应
*/
String
[]
getAppNames
(
List
<
WeiXingData
>
weiXingDataList
);
/**
* @param weiXingDataList WeiXingData对象
* @return 二维数组,也就是拓扑图
* @description 得到网络拓扑形式类似为 app1 app2 app3 ovs1 ovs2 ovs3
*/
int
[][]
getTopology
(
List
<
WeiXingData
>
weiXingDataList
,
SimData
simData
);
/**
* @param a 具体的卫星a
* @param b 具体的卫星b
* @return a,b之间的距离
* @description 计算距离,在getTopology中调用
*/
Double
distance
(
WeiXingData
a
,
WeiXingData
b
);
Double
channelCapacity
(
WeiXingData
a
,
WeiXingData
b
,
SimData
simData
);
/**
@description 记录卫星拓扑的变化历史
*/
/**
* @description 写入一个文本文件中,作为拓扑的历史记录
* @param appNames 传入的卫星名字,取前1/2
* @param topo 卫星拓扑图
*/
void
history
(
String
[]
appNames
,
int
[][]
topo
);
/**
* @description 删除历史记lu
*/
void
delHistory
();
}
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/Weixing.java
0 → 100644
View file @
a5debe6d
package
top.ninwoo.weixingsim.service
;
import
top.ninwoo.weixingsim.entity.WeiXingData
;
import
java.io.File
;
import
java.util.List
;
import
java.util.Map
;
/**
* 有关卫星的服务
* 1.解析初始文本,得到初始的卫星状态
* 2.将卫星的状态写入一个List中
* 3.增删改查四种基本功能
*/
public
interface
Weixing
{
/**
* @description 从文本中获取卫星的初始状态,但是其中的数据均为string型
* @param file 传入的文本路径
* @return 返回一个List
*/
List
<
Map
>
parseTxt
(
File
file
);
/**
* @description 将parseTxt中得到的Map转化为初始的卫星数据
* @param wx WeiXingData类
* @param map parseTxt得到的Map
* @return 单个卫星数据
* @throws IllegalAccessException
*/
WeiXingData
initWX
(
Class
wx
,
Map
map
)
throws
IllegalAccessException
;
List
<
WeiXingData
>
initNet
(
List
<
Map
>
maps
)
throws
IllegalAccessException
;
/**
* @description 根据卫星高度计算出卫星的速度,取逆时针为正方向。
* @description 和addAxis不同,只需计算一次即可
* @param wx WeiXingData对象
* @return
*/
List
<
WeiXingData
>
addSpeed
(
List
<
WeiXingData
>
wx
);
/**
* @description 根据角度,高度,速度和间隔时间t获取卫星的坐标数据
* @param wx WeiXingData对象
* @return
*/
List
<
WeiXingData
>
addAxis
(
List
<
WeiXingData
>
wx
);
/**
* @description 为每个卫星添加序号值
* @param wx 卫星List
* @return bool类型
*/
boolean
addIndex
(
List
<
WeiXingData
>
wx
);
/**
* @description 确认index和卫星List的对应关系
* @param wx 卫星List
* @return boolean
*/
boolean
checkIndex
(
List
<
WeiXingData
>
wx
);
/**
* @description 确保卫星列表中中没有名字重复的卫星
* @param wx 卫星List
*/
void
checkWX
(
List
<
WeiXingData
>
wx
);
/**
增删改查的功能
*/
/**
* @description 根据提供的appName查找对应的序列号
* @param weiXingDataList 卫星List
* @param appName 卫星名字
* @return index 序列号
*/
Integer
findindex
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
);
/**
* @description 查找功能
* @param weiXingDataList 传入的卫星列表
* @param appName 查找的卫星名字
* @return 卫星数据
*/
WeiXingData
findWX
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
);
/**
* @description 增加一个卫星,这里无需考虑顺序问题,卫星主要靠名字搜索
* @param weiXingDataList 旧的卫星List数据
* @param newWX 新的卫星数据
* @return 新的卫星List数据
*/
List
<
WeiXingData
>
addWX
(
List
<
WeiXingData
>
weiXingDataList
,
WeiXingData
newWX
);
/**
* @description 删除指定的卫星
* @param weiXingDataList 旧的卫星List数据
* @param appName 指定卫星的名字
* @return 新的卫星List
*/
List
<
WeiXingData
>
delWX
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
);
/**
* @description 修改给定卫星的给定值,只能修改高度
* @param weiXingDataList 旧的卫星List
* @param appName 要修改的卫星名字
* @param field 要修改的属性
* @param val 要改成的值,传入为String类型,可在代码中转化为Double类型的值
* @return 新的卫星List
*/
List
<
WeiXingData
>
changeWX
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
,
String
field
,
String
val
);
/**
* @description 初始化拓扑
* @param file 传入文件路径
* @return 返回为卫星List
*/
List
<
WeiXingData
>
iniTopo
(
File
file
)
throws
IllegalAccessException
;
/**
* @description 改变拓扑
* @param wxData 旧的网络
* @param time 抽样时间
* @return 改变后的网络
*/
List
<
WeiXingData
>
changeTopo
(
List
<
WeiXingData
>
wxData
,
int
time
);
/**
* @description 增减卫星时需要调用
* @param wxData
* @return
*/
List
<
WeiXingData
>
initChangeTopo
(
List
<
WeiXingData
>
wxData
);
}
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/impl/ToponetImpl.java
0 → 100644
View file @
a5debe6d
package
top.ninwoo.weixingsim.service.impl
;
import
top.ninwoo.weixingsim.entity.SimData
;
import
top.ninwoo.weixingsim.entity.WeiXingData
;
import
top.ninwoo.weixingsim.service.Toponet
;
import
java.io.BufferedWriter
;
import
java.io.File
;
import
java.io.FileWriter
;
import
java.io.IOException
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.List
;
public
class
ToponetImpl
implements
Toponet
{
@Override
public
String
[]
getAppNames
(
List
<
WeiXingData
>
weiXingDataList
)
{
//先判断有多少个docker容器,并生成相对应的ovs
int
n
=
weiXingDataList
.
size
();
//创建docker容器和一个ovs的数组
String
[]
appNames
=
new
String
[
n
+
1
];
for
(
int
j
=
0
;
j
<
n
;
j
++){
appNames
[
j
]
=
weiXingDataList
.
get
(
j
).
getName
();
}
appNames
[
n
]
=
"br:"
+
"ovs"
;
return
appNames
;
}
@Override
public
int
[][]
getTopology
(
List
<
WeiXingData
>
weiXingDataList
,
SimData
simData
)
{
int
n
=
weiXingDataList
.
size
();
int
[][]
topu
=
new
int
[
n
+
1
][
n
+
1
];
//先将docker容器和ovs相连如:app1连br:ovs,app2连br:ovs
for
(
int
i
=
0
;
i
<
n
;
i
++)
{
topu
[
n
][
i
]
=
1
;
}
//判断docker之间是否相通
for
(
int
a
=
0
;
a
<
n
;
a
++){
for
(
int
b
=
a
+
1
;
b
<
n
;
b
++){
//通过距离来判断
double
channelCapacity
=
this
.
channelCapacity
(
weiXingDataList
.
get
(
a
),
weiXingDataList
.
get
(
b
),
simData
);
if
(
channelCapacity
>=
simData
.
getC0
()){
topu
[
b
][
a
]
=
1
;
}
}
}
return
topu
;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public
Double
distance
(
WeiXingData
a
,
WeiXingData
b
)
{
Double
r
;
r
=
Math
.
sqrt
(
Math
.
pow
(
a
.
getXaxis
()-
b
.
getXaxis
(),
2
)+
Math
.
pow
(
a
.
getYaxis
()-
b
.
getYaxis
(),
2
)+
Math
.
pow
(
a
.
getZaxis
()-
b
.
getZaxis
(),
2
));
return
r
;
}
@Override
public
Double
channelCapacity
(
WeiXingData
a
,
WeiXingData
b
,
SimData
sd
)
{
double
r
=
this
.
distance
(
a
,
b
);
double
channelCapacity
;
channelCapacity
=
sd
.
getBandwidth
()*
Math
.
log
(
1
+(
sd
.
ptGtGr
()/(
Math
.
pow
(
4
*
Math
.
PI
*
r
*
sd
.
getJiange
()/
sd
.
getLamda
(),
2
)*
sd
.
n0B
())))/
Math
.
log
(
2
);
return
channelCapacity
;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public
void
history
(
String
[]
appNames
,
int
[][]
topo
)
{
File
file1
=
new
File
(
"C:\\WorkSpace\\test\\history.txt"
);
try
{
FileWriter
fw
=
new
FileWriter
(
file1
,
true
);
BufferedWriter
bw
=
new
BufferedWriter
(
fw
);
//先写上日期标记
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss SSS"
);
Date
d
=
new
Date
();
String
str
=
sdf
.
format
(
d
);
bw
.
write
(
str
+
"开始的拓扑结构"
+
"\n"
);
//todo 需要设计排版
int
num
=
appNames
.
length
/
2
;
int
[][]
logic
=
new
int
[
num
][
num
];
for
(
int
i
=
0
;
i
<
num
;
i
++){
for
(
int
m
=
0
;
m
<
num
;
m
++){
logic
[
i
][
m
]
=
topo
[
i
+
num
][
m
+
num
];
bw
.
write
(
logic
[
i
][
m
]
+
" "
);
bw
.
flush
();
}
bw
.
write
(
"\n"
);
bw
.
flush
();
}
bw
.
close
();
fw
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
@Override
public
void
delHistory
()
{
File
file
=
new
File
(
"C:\\WorkSpace\\test\\history.txt"
);
if
(
file
.
exists
())
{
file
.
delete
();
}
}
}
bishe-weixingsim/src/main/java/top/ninwoo/weixingsim/service/impl/WeixingImpl.java
0 → 100644
View file @
a5debe6d
package
top.ninwoo.weixingsim.service.impl
;
import
top.ninwoo.weixingsim.entity.WeiXingData
;
import
top.ninwoo.weixingsim.service.Weixing
;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.FileReader
;
import
java.lang.reflect.Field
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
public
class
WeixingImpl
implements
Weixing
{
private
static
double
G
=
6.754
*
Math
.
pow
(
10
,-
11
);
private
static
double
EARTHMASS
=
5.965
*
Math
.
pow
(
10
,
24
);
private
static
double
GM
=
G
*
EARTHMASS
;
@Override
public
List
<
Map
>
parseTxt
(
File
file
)
{
String
str
;
List
<
Map
>
maps
=
new
ArrayList
<
Map
>();
try
{
BufferedReader
br
=
new
BufferedReader
(
new
FileReader
(
file
));
while
((
str
=
br
.
readLine
())
!=
null
){
if
(
str
.
equals
(
"-------------"
)){
//WeiXing initwx = new WeiXing();
Map
<
String
,
String
>
map
=
new
HashMap
();
str
=
br
.
readLine
();
while
(
str
.
equals
(
"-------------"
)==
false
){
String
[]
split
=
str
.
split
(
"="
);
//if(split(0)==initwx.)
map
.
put
(
split
[
0
],
split
[
1
]);
str
=
br
.
readLine
();
}
maps
.
add
(
map
);
}
}
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
return
maps
;
}
@Override
public
WeiXingData
initWX
(
Class
wx
,
Map
map
)
throws
IllegalAccessException
{
WeiXingData
initwx
=
new
WeiXingData
();
Field
[]
fields
=
wx
.
getDeclaredFields
();
for
(
Field
field
:
fields
)
{
field
.
setAccessible
(
true
);
if
(
field
.
getType
()
==
Float
.
class
)
{
field
.
set
(
initwx
,
Float
.
parseFloat
((
String
)
map
.
get
(
field
.
getName
())));
}
else
if
(
field
.
getType
()
==
String
.
class
)
{
field
.
set
(
initwx
,
map
.
get
(
field
.
getName
()));
}
else
if
(
field
.
getType
()
==
Boolean
.
class
)
{
if
(
map
.
get
(
field
.
getName
()).
equals
(
"true"
)){
field
.
set
(
initwx
,
true
);
}
else
{
field
.
set
(
initwx
,
false
);}
}
}
return
initwx
;
}
@Override
public
List
<
WeiXingData
>
initNet
(
List
<
Map
>
maps
)
throws
IllegalAccessException
{
List
<
WeiXingData
>
initnet
=
new
ArrayList
<>();
for
(
int
i
=
0
;
i
<
maps
.
size
();
i
++){
WeiXingData
wx
=
new
WeiXingData
();
wx
=
this
.
initWX
(
WeiXingData
.
class
,
maps
.
get
(
i
));
initnet
.
add
(
wx
);
}
return
initnet
;
}
@Override
public
List
<
WeiXingData
>
addSpeed
(
List
<
WeiXingData
>
wx
)
{
for
(
int
i
=
0
;
i
<
wx
.
size
();
i
++){
if
(
wx
.
get
(
i
).
getTag
().
equals
(
true
)){
wx
.
get
(
i
).
setSpeed
(
Math
.
sqrt
(
GM
/
Math
.
pow
(
wx
.
get
(
i
).
getHigh
(),
2
)));}
else
{
wx
.
get
(
i
).
setSpeed
((-
1
)*
Math
.
sqrt
(
GM
/
Math
.
pow
(
wx
.
get
(
i
).
getHigh
(),
2
)));}
}
return
wx
;
}
@Override
public
List
<
WeiXingData
>
addAxis
(
List
<
WeiXingData
>
wx
)
{
for
(
int
i
=
0
;
i
<
wx
.
size
();
i
++)
{
Float
High
=
wx
.
get
(
i
).
getHigh
();
Double
hudu
=
Math
.
toRadians
(
wx
.
get
(
i
).
getSpeed
()
*
wx
.
get
(
i
).
getLastime
());
Double
Alpha
=
Math
.
toRadians
(
wx
.
get
(
i
).
getAlpha
());
Double
Beta
=
Math
.
toRadians
(
wx
.
get
(
i
).
getBeta
());
Double
Gamma
=
Math
.
toRadians
(
wx
.
get
(
i
).
getGamma
());
wx
.
get
(
i
).
setXaxis
(
High
*
Math
.
cos
(
hudu
+
Gamma
)
*
Math
.
sin
(
Beta
)
+
High
*
Math
.
sin
(
hudu
+
Gamma
)
*
Math
.
cos
(
Alpha
)
*
Math
.
cos
(
Beta
));
wx
.
get
(
i
).
setYaxis
(
High
*
Math
.
cos
(
hudu
+
Gamma
)
*
Math
.
cos
(
Beta
)
-
High
*
Math
.
sin
(
hudu
+
Gamma
)
*
Math
.
cos
(
Alpha
)
*
Math
.
sin
(
Beta
));
wx
.
get
(
i
).
setZaxis
(
High
*
Math
.
sin
(
hudu
+
Gamma
)
*
Math
.
sin
(
Alpha
));
}
return
wx
;
}
@Override
public
boolean
addIndex
(
List
<
WeiXingData
>
wx
)
{
for
(
int
i
=
0
;
i
<
wx
.
size
();
i
++){
wx
.
get
(
i
).
setIndex
(
i
+
1
);
}
return
true
;
}
@Override
public
boolean
checkIndex
(
List
<
WeiXingData
>
wx
)
{
boolean
k
=
false
;
int
tag
=
0
;
for
(
int
m
=
0
;
m
<
wx
.
size
();
m
++){
if
(
wx
.
get
(
m
).
getIndex
()
==
m
+
1
){
tag
++;
}
else
{
wx
.
get
(
m
).
setIndex
(
m
+
1
);
m
=
m
-
1
;
}
}
if
(
tag
==
wx
.
size
()){
k
=
true
;
}
return
k
;
}
@Override
public
void
checkWX
(
List
<
WeiXingData
>
wx
)
{
for
(
int
i
=
0
;
i
<
wx
.
size
();
i
++){
for
(
int
j
=
i
+
1
;
j
<
wx
.
size
();
j
++){
if
(
wx
.
get
(
i
).
getName
().
equals
(
wx
.
get
(
j
).
getName
())){
String
str
=
wx
.
get
(
i
).
getName
()
+
i
+
j
;
wx
.
get
(
j
).
setName
(
str
);
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public
Integer
findindex
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
)
{
Integer
index
=
0
;
for
(
int
i
=
0
;
i
<
weiXingDataList
.
size
();
i
++){
if
(
weiXingDataList
.
get
(
i
).
getName
().
equals
(
appName
)){
index
=
weiXingDataList
.
get
(
i
).
getIndex
();
break
;
}
}
return
index
;
}
@Override
public
WeiXingData
findWX
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
)
{
WeiXingData
wxData
=
null
;
int
k
=
findindex
(
weiXingDataList
,
appName
);
if
(
k
!=
0
){
wxData
=
weiXingDataList
.
get
(
k
-
1
);
}
return
wxData
;
}
//增加和删除卫星需要反求(球坐标)
@Override
public
List
<
WeiXingData
>
addWX
(
List
<
WeiXingData
>
weiXingDataList
,
WeiXingData
newWX
)
{
//先判断是否已存在相同名字的卫星
WeiXingData
wxdata
=
findWX
(
weiXingDataList
,
newWX
.
getName
());
if
(
wxdata
!=
null
){
//加上时间这一唯一标识
newWX
.
setName
(
newWX
.
getName
()+
System
.
currentTimeMillis
());
}
weiXingDataList
.
add
(
newWX
);
//修改坐标系
for
(
int
i
=
0
;
i
<
weiXingDataList
.
size
()-
1
;
i
++){
float
gamma
=
(
float
)
(
weiXingDataList
.
get
(
i
).
getGamma
()+
weiXingDataList
.
get
(
i
).
getLastime
()*
weiXingDataList
.
get
(
i
).
getSpeed
());
weiXingDataList
.
get
(
i
).
setGamma
(
gamma
);
weiXingDataList
.
get
(
i
).
setLastime
(
0
);
}
this
.
addIndex
(
weiXingDataList
);
this
.
checkIndex
(
weiXingDataList
);
return
weiXingDataList
;
}
@Override
public
List
<
WeiXingData
>
delWX
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
)
{
//找到该卫星
WeiXingData
wxdata
=
findWX
(
weiXingDataList
,
appName
);
if
(
wxdata
!=
null
){
weiXingDataList
.
remove
(
wxdata
.
getIndex
()-
1
);
}
//修改坐标系
for
(
int
i
=
0
;
i
<
weiXingDataList
.
size
();
i
++){
float
gamma
=
(
float
)
(
weiXingDataList
.
get
(
i
).
getGamma
()+
weiXingDataList
.
get
(
i
).
getLastime
()*
weiXingDataList
.
get
(
i
).
getSpeed
());
weiXingDataList
.
get
(
i
).
setGamma
(
gamma
);
weiXingDataList
.
get
(
i
).
setLastime
(
0
);
}
this
.
addIndex
(
weiXingDataList
);
this
.
checkIndex
(
weiXingDataList
);
return
weiXingDataList
;
}
//todo 只考虑增加高度一个选项
@Override
public
List
<
WeiXingData
>
changeWX
(
List
<
WeiXingData
>
weiXingDataList
,
String
appName
,
String
field
,
String
val
)
{
return
null
;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@Override
public
List
<
WeiXingData
>
iniTopo
(
File
file
)
throws
IllegalAccessException
{
List
<
Map
>
maps
=
this
.
parseTxt
(
file
);
List
<
WeiXingData
>
wxData
=
this
.
initNet
(
maps
);
wxData
=
this
.
initChangeTopo
(
wxData
);
return
wxData
;
}
@Override
public
List
<
WeiXingData
>
changeTopo
(
List
<
WeiXingData
>
wxData
,
int
time
)
{
for
(
int
i
=
0
;
i
<
wxData
.
size
();
i
++){
wxData
.
get
(
i
).
setLastime
(
time
);
}
wxData
=
this
.
addAxis
(
wxData
);
this
.
addIndex
(
wxData
);
this
.
checkIndex
(
wxData
);
return
wxData
;
}
@Override
public
List
<
WeiXingData
>
initChangeTopo
(
List
<
WeiXingData
>
wxData
)
{
wxData
=
this
.
addSpeed
(
wxData
);
wxData
=
this
.
addAxis
(
wxData
);
this
.
checkWX
(
wxData
);
this
.
addIndex
(
wxData
);
this
.
checkIndex
(
wxData
);
return
wxData
;
}
}
pom.xml
View file @
a5debe6d
...
...
@@ -17,6 +17,7 @@
<module>
bishe-client-starter
</module>
<module>
bishe-test
</module>
<module>
bishe-case-dis
</module>
<module>
bishe-weixingsim
</module>
</modules>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment