Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
5b50440a7bcaebebc058d5df6c1293ccfa88ecd7
[jaceP2P.git] / src / jaceP2P / SenderSocket.java
1 package jaceP2P;
2
3 import java.io.ObjectOutputStream;
4 import java.net.Socket;
5
6
7
8 public class SenderSocket extends Sender {
9
10         // attributes
11         static SenderSocket Instance = null;
12         // JaceBuffer buffer;
13         // Message msg = null;
14         String name;
15
16         // boolean msgIsSent; //attribute used in the JaceSender to know if msg has
17         // been sent
18         // JaceInterface stub = null;
19         // boolean running;
20         // constructors
21         public static SenderSocket Instance() {
22                 if (Instance == null) {
23                         Instance = new SenderSocket();
24                 }
25                 return Instance;
26         }
27
28         private SenderSocket() {
29                 setPriority(MAX_PRIORITY);
30                 running = true;
31                 buffer = new JaceBuffer();
32                 Instance = this;
33         }
34
35         // methods
36         public void kill() {
37                 Instance = null;
38                 running = false;
39         }
40
41         public void run() {
42                 msg = null;
43                 while (running) {
44                         // consumme the msg to send (doing a wait, so the msg is processed
45                         // immediately)
46                         // System.out.println("the sender thread is alive");
47                         msg = buffer.get();
48                         if (msg != null) {
49
50                                 msgIsSent = false;
51
52                                 // sending of the message !
53                                 // stub =
54                                 // RemoteStubs.Instance().lookUp(msg.getReceiver().getHostIP()).getStub();
55                                 // stub = msg.getReceiver().getHostStub();
56                                 name = msg.getReceiver().getHostName();
57                                 try {
58                                         if (Register.Instance().getNodeOfName(name)
59                                                         .getOutputStream() != null) {
60                                                 ObjectOutputStream out = (ObjectOutputStream) Register
61                                                                 .Instance().getNodeOfName(name)
62                                                                 .getOutputStream();
63                                                 out.writeObject((Object) msg);
64                                                 out.flush();
65                                                 out.reset();
66                                                 // System.out.println("tryin to send to " +
67                                                 // msg.getReceiver().getRank() + "(" +
68                                                 // Register.Instance().getListeOfTasks().getTaskIdOfRank(msg.getReceiver().getRank()).getHostName()
69                                                 // +
70                                                 // ")"+" tag="+msg.getSrc_tag()+" iter= "+msg.getSrc_iteration());
71                                         } else {
72                                                 Socket s = new Socket(name, LocalHost.Instance()
73                                                                 .getSocketPort());
74                                                 ObjectOutputStream out = new ObjectOutputStream(s
75                                                                 .getOutputStream());
76                                                 out.writeObject((Object) msg);
77                                                 out.flush();
78                                                 out.reset();
79                                                 Register.Instance().getNodeOfName(name)
80                                                                 .setOutputStream(out);
81                                                 new HandleClient(s, 1).start();
82                                         }
83                                         // if (stub == null) {
84                                         // System.out.println("SENDER : stub nuuuuuuuuuuuuuuuuuuuuuuuuuuull");
85                                         // }
86
87                                         // stub.iSendYou(msg);
88
89                                         // System.out.println("ENVOI succesful to " +
90                                         // msg.getReceiver().getRank() + "(" +
91                                         // Register.Instance().getListeOfTasks().getTaskIdOfRank(msg.getReceiver().getRank()).getHostName()
92                                         // + ")");
93                                         // System.out.println("envoi succesful to " +
94                                         // msg.getReceiver().getHostIP());
95                                         msgIsSent = true;
96                                         yield();
97                                 } catch (Exception e) {
98                                         System.out
99                                                         .println("error in SenderSocket run method :" + e);
100
101                                         // System.out.println("SENDER : the node of task " +
102                                         // msg.getReceiver().getHostIP() + " is dead !!!! " + e);
103                                         // System.out.println("SENDER : the dest is dead so I send nothing, message lost");
104                                         yield();
105                                 }
106                         }
107                         // }
108                 }
109         }
110 }